在使用结构时,不管是不是用指针隐含的都是使用指针方式的。如下:
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
v := Vertex{1, 2}
p := &v
p.X = 1e9
fmt.Println(v)
fmt.Println(v.X) A
fmt.Println(p.X) B
fmt.Println((*p).X) C
}
结果:
{1000000000 2}
1000000000
1000000000
1000000000
v为直接使用方式,p为指针使用方式,但在A、B、C三行使用上没有区别,结果也相同。可以理解为两种方式在内部都是按指针方式在使用的。但也有不同的时候比如在使用接口时,如果只定义了直接方法则使用直接方法和指针方法都没有问题。但如果只定义了指针方法,则只能使用指针方法,使用直接方法会出现未定义错误。
你这描述,不对吧。你试试函数参数传递结构体和结构体指针看看?
应该说,结构体的指针,会隐式解指针。 也就是说 p.X = 1e9 编译器已经帮你做了 (*p).X = 1e9 这步。
#1