Go 创建结构体实例的四种方式

创建结构体实例的四种方式

  • 方式 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。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值