gpt4 book ai didi

Go:指向类型的指针与接口(interface)不兼容

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:31 25 4
gpt4 key购买 nike

我不确定如何正确地表述问题。我有 2 个 go 代码片段,它们应该做完全相同的事情,但显然它们没有,因为一个工作,另一个不工作(不编译)

func writeSomething(writer *io.Writer) {
}

func main() {
file, _ := os.Create("error.log")
var logWriter io.Writer = file
writeSomething(&logWriter)

}

func main2() {
file, _ := os.Create("error.log")
writeSomething(&file)

}

Playground

main() 有效而 main2() 无效。

prog.go:20:17: cannot use &file (type **os.File) as type *io.Writer in argument to writeSomething: *io.Writer is pointer to interface, not interface

唯一的区别是我使用了一个中间变量,但我没有进行任何指针引用或取消引用。

我在这里做错了什么?

最佳答案

你不应该使用指向接口(interface)的指针,这在 Go 中是一种不好的做法。
关于无法编译的代码——当你创建一个中间变量 logWriter 时,你分配了一个接口(interface)变量,它有自己分配的内存来描述它存储的内容(实际类型)和对实际类型的引用结构。
这就是为什么 &logWriter&file 有不同类型的原因。 但正如我之前所说的那样,你不应该使用指向接口(interface)的指针,只使用接口(interface)类型并且不要获取接口(interface)类型变量的地址。

关于Go:指向类型的指针与接口(interface)不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48845760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com