• 技术文章 >后端开发 >Golang

    聊聊GO初始化数据结构的方法(附代码示例)

    藏色散人藏色散人2023-01-16 20:29:47转载373

    本篇文章给大家介绍有关GO语言初始化数据结构的方法,GO里面提供了2个关键字来进行初始化数据结构,下面一起看看怎么使用吧~希望对大家有所帮助。

    使用 golang 进行编码过程中,你们都是如何初始化数据结构的呢?

    GO 里面提供了 2 个关键字来进行初始化数据结构

    不过有时候我也会直接使用花括号的方式直接就初始化,例如这样:

    name := []string{"xiaomotong","bob","marry"}

    上面这种情况,是初始化的时候已经明确好了需要填的值,可以使用上面这种做法,不过工作中大多数情况初始化的时候,数据还是未知的,大部分时间还是会使用上述两种方式

    make

    make 是 golang 提供的关键字,主要是用于初始化内置的数据结构,不能初始化自定义的数据结构 , make 可以初始化的数据类型有:

    例如我们初始化的时候就可以这样写

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

    我们查看 make 的源码解释可以看到,make 确实支持创建和初始上述 3 种类型

    fffa01be322685c93f2a9ab813a16dc.jpg

    根据解释,我们知道,make 的返回值的类型与填入参数的类型保持一致,咱们填入的是切片类型,那么返回值就是切片类型,填入其他类型对应返回值也是我们期望的类型,没毛病

    new

    那么为什么有了 make 做数据结构的初始化,还需要 new 干啥?

    细心的 胖鱼 可以看出来,前面说到了 make 只适用于初始化 golang 提供的内置数据结构,对于自定义的数据结构,就捉襟见肘了 , 这个时候还是需要 new 出马摆平了

    用 new 初始化数据结构可以这样写:

    type T struct{
        age int
        name string}func main(){
    
        t := new(T)
        fmt.Println("t.name == ",t.name)
        fmt.Println("t.age == ",t.age)}

    程序执行效果如下:

    # go run main.got.name ==t.age ==  0

    果然是给我初始化了数据结构,只不过数据都是 零值

    当然我们也可以这样写:

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

    程序执行效果如下:

    # go run main.goa ==  0xc420018078
    *a ==  0

    根据程序运行结果,我们知道 new 返回的是一个指针,且这个指针指向的内存地址上对应的值是一个该类型的 零值

    瞅一眼 new 源码说明

    467037444f85681361eefb1dd994f66.jpg

    golang 源码中说到, new 的第一个参数是 数据类型,不是一个值,并且 new 的返回值是一个根据参数类型分配零值内存的指针

    因此,我们上面看到的 new 出来的数据结构,打印出来的数据都是对应类型的零值

    make 和 new 的区别

    最后再来梳理一下 make 和 new 的区别,加深印象

    【相关推荐:Go视频教程

    以上就是聊聊GO初始化数据结构的方法(附代码示例)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:初始化 Go go语言
    上一篇:go语言结构体是什么意思 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一文浅析Golang中的流程控制• Golang判断结构体是否存在某方法的两种方式(附代码示例)• 一文浅析Golang中的数组• 一文浅析Golang中的切片(Slice)• golang grpc消息过大?教你快速解决!
    1/1

    PHP中文网