Go语言中如何正确导入os包的File类型?
问题解决方法
1. 类型未定义的原因及修复
你代码里的*File未定义,是因为File是os包下的类型,不是当前foo包的本地类型,必须用包名.类型名的形式引用,也就是写成*os.File。
2. 函数语法与错误处理修复
你的Open()函数还有两个问题:
- Go语言函数必须明确声明返回值类型,要写成
Open() (stuff, error) os.Open()返回两个值:文件句柄和错误,必须处理错误,不能直接赋值
修正后的完整代码
package foo import "os" type stuff struct { f1 *os.File // 用os包限定File类型 f2 *os.File } // 声明返回值类型,同时返回错误 func Open() (stuff, error) { var mine stuff var err error // 处理os.Open的返回值,捕获错误 mine.f1, err = os.Open("f1") if err != nil { return mine, err } mine.f2, err = os.Open("f2") if err != nil { // 如果第二个文件打开失败,要关闭第一个已打开的文件,避免资源泄漏 mine.f1.Close() return mine, err } return mine, nil }
关于跨调用持久化文件句柄
只要你的stuff结构体实例在调用间被保留(比如作为全局变量、或者被上层函数持有),里面的*os.File句柄就会保持有效,直到你主动调用Close()方法关闭它。
内容的提问来源于stack exchange,提问作者intel_chris
相关产品推荐
相关产品推荐

