err.(*os.PathError) 这个用法 不太明白

来源:4-1 结构体和方法

陆鹏1

2018-12-08

func writeFile(filename string) {
file, err := os.OpenFile(filename,
os.O_EXCL|os.O_CREATE|os.O_WRONLY, 0666)

if err != nil {
	err.Error()
	if pathError, ok := err.(*os.PathError); !ok {
		panic(err)
	} else {
		fmt.Printf("%s, %s, %s\n",
			pathError.Op,
			pathError.Path,
			pathError.Err)
	}
	return
}

老师 err.(*os.PathError) 这个用法 我不太明白 err 返回的是一个 PathError 结构体的 地址 这里的意思 是断言 吗?

写回答

1回答

ccmouse

2018-12-08

是的,err是一个接口,它到底是什么我们不知道。所以通过这种类型断言的写法来查看。后面跟个ok表示它到底是不是一个*PathError,然后根据是或不是来分别执行不同操作

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程