栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

go语言入门4

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)
}

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648740.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号