【发布时间】:2018-07-05 18:11:29
【问题描述】:
我有以下代码:
package main
type Vertex struct {
X, Y float64
}
type VertexPointer *Vertex
func main() {
v := Vertex{3, 4}
v_ptr := &v
var test_1 *Vertex = &v
var test_2 **Vertex = &v_ptr
var test_3 VertexPointer = &v
var test_4 *VertexPointer = &v_ptr
}
当我尝试运行它时(我使用的是 Go 1.6.2)我收到以下错误:
# command-line-arguments
./pointers.go:17: cannot use &v_ptr (type **Vertex) as type *VertexPointer in assignment
我很困惑为什么涉及 test_3 的作业有效,而不是 test_4。根据我一直在阅读的内容,我的理解是两个作业都应该起作用,或者它们都不应该起作用。描述的行为是不是有点不一致?
【问题讨论】:
-
您的问题中没有任何类型别名。
-
类型别名是
type A = B而不是type A B。 -
@leaf 那我怎么称呼
type A B?我想使用typedef,但似乎 Go 语言中没有使用该术语。 -
称为类型定义。你可以阅读 golang 规范。