我一直试图找出为什么一个特定的行可以编译,而另一行则不能。这是一个精炼版本:
type A *string
type B *string
func TakeStringPointer(a *string) {
fmt.Println("something: %s\n", *a)
}
func TakeA(a A) {
fmt.Println("something else: %s\n", *a)
}
func Sample() {
aa := "asdf"
var pA A
var pB B
var pString *string
pA = &aa
pB = &aa
pString = &aa
TakeStringPointer(pString)
TakeStringPointer(pA)
TakeStringPointer(pB)
TakeA(pA)
TakeA(pB) // Does not compile
TakeA(pString) // Does compile
}
据我了解,TakeA(pB)要么TakeA(pString)两者都起作用,要么两者都不起作用......
A value x is assignable to a variable of type T if:
x’s type is identical to T.
x’s type V and T have identical underlying types…
是在 go 规范中。对我来说,我希望两者都能编译,因为两者A都有B相同的底层类型。(或者,两者都不会,因为 *string 与 A 不同,因为我们有类型声明)。
这里发生了什么?
largeQ
相关分类