GO如何初始化数据结构


本篇内容主要讲解“GO如何初始化数据结构”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“GO如何初始化数据结构”吧!GO 里面提供了 2 个关键字来进行初始化数据结构newmake不过有时候我也会直接使用花括号的方式直接就初始化,例如这样:

name免费云主机域名:=[]string{"xiaomotong","bob","marry"}

上面这种情况,是初始化的时候已经明确好了需要填的值,可以使用上面这种做法,不过工作中大多数情况初始化的时候,数据还是未知的,大部分时间还是会使用上述两种方式make 是 golang 提供的关键字,主要是用于初始化内置的数据结构,不能初始化自定义的数据结构 , make 可以初始化的数据类型有:slice 切片map hash表channel 通道例如我们初始化的时候就可以这样写初始化一个切片,填入 len 值, cap 值,切片底层的数据结构除了这俩值以外,还有一个指针,指向的是一个底层数组初始化一个 map,map 的底层是指向一个 hmap 的结构体指针,结构体里面的具体成员感兴趣的 xdm 可以翻看我的历史文章初始化一个通道 ch,这个 ch 是指向一个 hchan 的结构体指针,同样也可翻看我的历史文章看细节

strs:=make([]string,0,10)myMap:=make(map[string]string,10)ch:=make(chanstruct{},10)

我们查看 make 的源码解释可以看到,make 确实支持创建和初始上述 3 种类型根据解释,我们知道,make 的返回值的类型与填入参数的类型保持一致,咱们填入的是切片类型,那么返回值就是切片类型,填入其他类型对应返回值也是我们期望的类型,没毛病那么为什么有了 make 做数据结构的初始化,还需要 new 干啥?细心的 胖鱼 可以看出来,前面说到了 make 只适用于初始化 golang 提供的内置数据结构,对于自定义的数据结构,就捉襟见肘了 , 这个时候还是需要 new 出马摆平了用 new 初始化数据结构可以这样写:自定义一个结构体,里面 2 个成员, age 和 name使用 new 对 T 最初始化,返回一个结构体的指针

typeTstruct{
ageint
namestring}funcmain(){

t:=new(T)
fmt.Println("t.name==",t.name)
fmt.Println("t.age==",t.age)}

程序执行效果如下:

#gorunmain.got.name==t.age==0

果然是给我初始化了数据结构,只不过数据都是 零值当然我们也可以这样写:

funcmain(){

a:=new(int)
fmt.Println("a==",a)
fmt.Println("*a==",*a)}

程序执行效果如下:

#gorunmain.goa==0xc420018078
*a==0

根据程序运行结果,我们知道 new 返回的是一个指针,且这个指针指向的内存地址上对应的值是一个该类型的 零值golang 源码中说到, new 的第一个参数是 数据类型,不是一个值,并且 new 的返回值是一个根据参数类型分配零值内存的指针因此,我们上面看到的 new 出来的数据结构,打印出来的数据都是对应类型的零值最后再来梳理一下 make 和 new 的区别,加深印象make 只能用来初始化内置数据类型slicemapchan而 new 可以分配任意类型的数据(包括自定义数据类型)make 返回的是引用,是 Type 类型,new 返回的是指针,是 *Type 类型的到此,相信大家对“GO如何初始化数据结构”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: Laravel框架模板继承操作如何实现

本文小编为大家详细介绍“Laravel框架模板继承操作如免费云主机域名何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel框架模板继承操作如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。laravel和Thin…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/04 21:15
Next 03/04 21:15

相关推荐