Golang中遇到错误时应该如何处理
Golang中遇到错误时应该如何处理
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"path/filepath"
"gitlab.com/me/myawesomeapp/appconfig"
yaml "gopkg.in/yaml.v2"
)
func init() {
filename, err1 := filepath.Abs("config/config.yml") // 使用了错误的包
if err1 != nil {
log.Fatal(err1)
}}
...
我没有在 err1 上收到任何错误 - 我应该收到错误吗?
更多关于Golang中遇到错误时应该如何处理的实战教程也可以访问 https://www.itying.com/category-94-b0.html
filepath.Abs() 与你的应用程序/包结构无关,它只涉及文件路径。
当 os.Getwd() 返回错误时,它也会返回错误,但仅当路径还不是绝对路径时,正如你在代码中看到的:
https://golang.org/src/path/filepath/path.go?s=6981:7161#L244
更多关于Golang中遇到错误时应该如何处理的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我的意思是在我的项目 gitlab.com/me/myawesomeapp 中没有 config 包,而是有一个 appconfig 包。因此我应该使用 appconfig:
filename, err1 := filepath.Abs("appconfig/config.yml")
我原本预期这里会出现错误。现在我意识到 filepath.Abs 只返回绝对路径,那么 filepath.Abs 会返回什么类型的错误呢?
你所说的"使用了错误的包"是什么意思?filepath 包有一个 Abs() 函数,其签名允许像这样调用,它会根据你提供的相对路径创建一个绝对路径。
我不确定你期望在这里出现什么错误。
func main() {
fmt.Println("hello world")
}
在Go语言中,filepath.Abs() 函数用于返回路径的绝对路径表示。当传入的路径是相对路径时,它会基于当前工作目录进行解析。如果路径解析成功,err1 将为 nil;如果路径无效(例如包含空字符串),则会返回错误。
在你的代码中,如果 "config/config.yml" 是有效的相对路径,并且当前工作目录正确,err1 可能为 nil,因此不会触发错误处理。但如果你预期该路径应该存在而实际上不存在,filepath.Abs() 本身不会检查文件是否存在,它只进行路径解析。因此,如果文件不存在,err1 仍可能为 nil,但后续操作(如读取文件)会失败。
为了确保文件存在,你应该在调用 filepath.Abs() 后使用 os.Stat() 检查文件状态。以下是修改后的代码示例:
import (
"log"
"os"
"path/filepath"
)
func init() {
filename, err := filepath.Abs("config/config.yml")
if err != nil {
log.Fatal(err)
}
// 检查文件是否存在
if _, err := os.Stat(filename); os.IsNotExist(err) {
log.Fatalf("配置文件不存在: %s", filename)
}
// 继续处理配置文件...
}
如果文件 config/config.yml 不存在,os.Stat() 会返回错误,并通过 log.Fatalf() 终止程序。这确保了在文件缺失时及时处理错误。

