创建结构体实例的四种方式
方式 1-直接声明
如: var person Person(见上一篇)方式 2-{ }
案例演示: var person Person = Person{}
type Person struct{
Name string
Age int
}
func main() {
p2 := Person{"mary", 20}
// p2.Name = "tom"
// p2.Age = 18
fmt.Println(p2)
}
方式 3-new
案例: var person *Person = new (Person)
var p3 *Person= new(Person)
(*p3).Name = "smith
(*p3).Age = 30
fmt.Println(*p3)
因为p3是一个指针,因此标准的给字段赋值方式:
(*p3).Name = "smith"也可以这样写 p3.Name = "smith"
p3.Name = "john"
p3.Age = 29
fmt.Println(*p3)
原因:
go的设计者 为了程序员使用方便,底层会对 p3.Name = "smith" 进行处理会给 p3 加上 取值运算 (*p3).Name = "smith"
方式4-&{}
案例: var person *Person = &Person{}
var person *Person = &Person{"mary", 60}
-- 或者var person *Person = &Person{}
因为person 是一个指针,因此标准的访问字段的方法
(*person).Name = "scott" go的设计者为了程序员使用方便,也可以 person.Name = "scott"
原因和上面一样,底层会对 person.Name = "scott" 进行处理, 会加上 (*person)
(*person).Name = "scott"
(*person).Age = 88
person.Name = "jm"
person.Age = 10
说明:
第 3 种和第 4 种方式返回的是 结构体指针。结构体指针访问字段的标准方式应该是:
(*结构体指针).字段名
,比如 (*person).Name = "tom" 3) 但 go 做了一个简化也支持 结构体指针.字段名
, 比如 person.Name = "tom"。更加符合程序员使用的习惯,go 编译器底层 对 person.Name 做了转化 (*person).Name。