go语言入门4

go语言入门4,第1张

go语言入门4 行为的定义

相对其他的编程语言,go的方法多一个(接受者 接收者类型)

func (e Employee) String() string{
	return fmt.Sprintf("ID:%s-Nmae:%s-Age:%d",e.Id,e.Name,e.Age)
}

func (e *Employee) String() string{
    return fmt.Sprintf("ID:%s/Name:%s/Age:%d", e.Id,e.Name,e.Age)
}

其中第一种定义方式在实例对应方法被调用时,实例的对象会继续值的复制;而第二种则是为了避免内存拷贝。
同时因为第一种只传递了变量,所以不会改变自己的值,而第二种传递了指针,所以如果函数里做了 *** 作,自己的原值也会改变。同时go语言进行了一定的优化,用指针访问指向的结构体的字段时,可以不使用*。

func TestStr7uctOperations(t *testing.T){
    e:=Employee{"0","Bob",20}
    //e:=&Employee{"0","Bob",20}
    fmt.Printf("Address is %xn", unsafe.Pointer(&e.Name))
    t.Log(e.String)
}

两种定义的方式返回的结果是一样的。

但是依旧有区别,如果输出传递的地址,两者则是不同的。考虑到指针的 *** 作省去了复制值的过程,为了节省空间可以考虑指针的方案。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5650935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存