指针

&*
*
var p *int // 定义了指向int型变量的指针

指针也可短声明

i:=1 // 短声明一个i并赋值为1,默认应该为int型
p:=&i // 将i的地址赋值给p指针,此时p为*int型的指针
*p++ // 对p地址的内容,即i进行操作,等价于i++

结构体

声明结构体变量如下,注意:结构体遵循可见性规则,定义结构体的字段时首字母为小写则在其他包是不能直接访问该字段的。

type Coordinate struct {
    X int
    Y int
    float32 // 此为一个匿名字段,可以没有变量名,一个结构体内每个数据类型的匿名字段只能有一个
}

创建结构体示例

var c1 Coordinate=Coordinate{X:1,Y:2} // 创建一个Coordinate结构体的示例c1
c2:=Coordinate{3,4,1.2}  // 短声明
c3:=new(Coordinarte) // 另一种短声明,定义的空结构体

结构体变量访问

fmt.Println(c2.X) // 访问c2的X
*
p:=&c2
fmt.Println(p.X) // 相当于打印c2.X

访问匿名字段

c2.float32=2.2 // 直接通过结构体实例名.数据类型 来访问匿名字段

结构体内还支持内嵌结构体,与匿名函数的原理相似,关于内嵌结构体以及其特性、原结构体和内嵌结构体变量名冲突的解决办法等详细内容有待进一步学习。