golang之结构体

指针结构体
  • 结构体与数组一样,都是值传递。当把数组或结构体当作实参传给函数的形参时,会赋值一个副本。所以为了提高性能,一般不会直接把数组传递给函数,而是使用切片代替。而把结构体传给函数时,可以使用指针结构体

    如果将结构体转给函数,只是复制结构体的副本,如果在函数内修改结构体字段值(只修改,不返回值),外面的结构体并不会受影响,而如果将结构体指针传给函数,则在函数中使用指针对结构体所做的修改,都会影响到指针指向的结构体。

    func main(){
    	m1 := Member{}
    	m1.name = "aaa"
    	Change1(m1)
    	fmt.Println(m1)
    
    	m2 := &Member{}
    	Change2(m2)
    	fmt.Println(m2)
    
    	m3 := Member{}
    	m3 = Change3(m3)
    	fmt.Println(m3)
    }
    
    func Change1(member Member){
    	member.name = "m1.name"
    	//return member
    }
    
    func Change2(member *Member){
    	member.name = "m2.name"
    }
    
    func Change3(member Member) Member{
    	member.name = "m3.name"
    	return member
    }
    
    //结果:
    {aaa 0}
    &{m2.name 0}
    {m3.name 0}
    
  • 指针结构体,即一个指向结构体的指针,声明结构体变量时,在结构体类型前加*号,即声明一个指向结构体的指针。

  • mem := &Member{} :初始化结构体,结构体指针指向某个结构体地址,然后才能访问字段,为字段赋值。

  • 当定义结构体字段名首字母是小写的,意味着这些字段在包外不可见,因而无法在其他包中被访问,只允许包内访问。

    type Member struct {
        id     int
        name   string
        age    int
    }
    

    如果想在一个包中访问另一个包中结构体的字段,则必须是大写字母开头的变量,即可导出的变量,如:

    type Member struct {
    	    Id     int
    	    Name   string
    	    Age    int
    	}
    

【参考文档】
Go Struct超详细讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值