1 指针
Go拥有指针,指针保存了值得内存地址。
类型*T是指向T类型的指针,其零值为nil。
var p *int
&操作符会生成一个指向其操作数的指针
i := 42
p = &i
*操作符表示指针指向的底层值,即“间接引用”或“重定向”。
fmt.Println(*p)
*p = 21
Go没有指针运算。
package main
import "fmt"
func main() {
var ppp *int
i := 111
ppp = &i
fmt.Println(ppp)
fmt.Println(*ppp)
*ppp = 222
fmt.Println(i)
}
2 结构体
一个结构体(struct)就是一个字段的集合。
package main
import "fmt"
type vvv struct {
x int
y int
}
func main() {
fmt.Println(vvv{1, 3})
}
3 结构体字段
结构体使用点号访问。
package main
import "fmt"
type vvv struct {
x int
y int
}
func main() {
fmt.Println(vvv{1, 3})
}
4 结构体指针
可以使用结构体指针访问结构体字段。
如果有指向结构体指针p,那么可以通过(*p).x来访问字段x。由于Go提供了隐式间接引用,所以直接使用p.x也可以访问字段。
package main
import "fmt"
type vvv struct {
iii int
jjj int
}
func main() {
v := vvv{00, 111}
p := &v
p.iii = 999
fmt.Println(vvv)
}
5 结构体文法
结构体文法通过直接列出字段值来新分配一个结构体。
使用Name:语法可以列出部分字段。(与字段名顺序无关)
特殊前缀&返回一个指向结构体的指针。
package main
import "fmt"
type vvv struct {
iii, jjj, kkk int
}
var (
v1 = vvv{1, 2, 3}
v2 = vvv{}
v3 = vvv{iii:3, kkk:50}
p = &v1
)
func main() {
fmt.Println(v1, v2, v3, p, p.iii)
}