/** * Created with IntelliJ IDEA. * User: liaojie * Date: 12-9-7 * Time: 下午8:43 * To change this template use File | Settings | File Templates. * Name:Defer */ package main import ( "fmt" "os" "log" "io" ) //将文件内容作为一个字符串返回 func Contents(filename string) (string) { //打开文件 f, err := os.Open(filename) if err != nil { log.Printf("%s",err) } fmt.Println("Close前>",f) // 如果f.Close在这里执行时就完了。所以用DEFER延时执行 // 他应该会在f.Read()接收完后执行 (我个人理解) defer f.Close() fmt.Println("Close后>",f) var result []byte buf := make([]byte, 100) for { n, err := f.Read(buf[0:]) result = append(result, buf[0:n]...) if err != nil { if err == io.EOF { break } log.Printf("未接收完关闭了f>%s",err) // 如果f提前关闭了,打印 } } return string(result) } func main() { fileurl := os.Getenv("HOME") filename := fileurl+"/test.txt" fmt.Println(Contents(filename)) } //go/5608