[Go] GO语言Defer用法实例 →→→→→进入此内容的聊天室

来自 , 2020-10-12, 写在 Go, 查看 114 次.
URL http://www.code666.cn/view/31bd51a7
  1. /**
  2.  * Created with IntelliJ IDEA.
  3.  * User: liaojie
  4.  * Date: 12-9-7
  5.  * Time: 下午8:43
  6.  * To change this template use File | Settings | File Templates.
  7.  * Name:Defer
  8.  */
  9. package main
  10.  
  11. import (
  12.         "fmt"
  13.         "os"
  14.         "log"
  15.         "io"
  16. )
  17.  
  18.  
  19. //将文件内容作为一个字符串返回
  20. func Contents(filename string) (string) {
  21.         //打开文件
  22.         f, err := os.Open(filename)
  23.         if err != nil {
  24.                 log.Printf("%s",err)
  25.         }
  26.         fmt.Println("Close前>",f)
  27.         // 如果f.Close在这里执行时就完了。所以用DEFER延时执行
  28.         // 他应该会在f.Read()接收完后执行 (我个人理解)
  29.         defer f.Close()
  30.         fmt.Println("Close后>",f)
  31.  
  32.         var result []byte
  33.         buf := make([]byte, 100)
  34.         for {
  35.                 n, err := f.Read(buf[0:])
  36.                 result = append(result, buf[0:n]...)
  37.  
  38.                 if err != nil {
  39.                         if err == io.EOF {
  40.                                 break
  41.                         }
  42.                         log.Printf("未接收完关闭了f>%s",err)  // 如果f提前关闭了,打印
  43.                 }
  44.         }
  45.  
  46.         return string(result)
  47. }
  48.  
  49.  
  50. func main() {
  51.  
  52.         fileurl := os.Getenv("HOME")
  53.         filename := fileurl+"/test.txt"
  54.         fmt.Println(Contents(filename))
  55. }
  56.  
  57.  
  58. //go/5608

回复 "GO语言Defer用法实例"

这儿你可以回复上面这条便签

captcha