• Golang开发-new关键字


    在Go语言中,new关键字用于创建一个新的零值对象,并返回指向该对象的指针。它是Go语言中用于分配内存的一种方式。

    new关键字的语法如下:

    ptr := new(Type)
    
    • 1

    其中,Type表示要创建的对象的类型,ptr是指向新对象的指针。

    以下是一个示例,演示如何使用new关键字创建一个新的对象:

    package main
    
    import "fmt"
    
    type Person struct {
    	Name string
    	Age  int
    }
    
    func main() {
    	p := new(Person)
    	fmt.Println(p) // 输出:&{ 0}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在上述示例中,我们定义了一个Person结构体类型。然后,使用new关键字创建了一个新的Person对象,并将其分配给变量p。由于new关键字创建的是一个指针,因此p的类型为*Person。

    输出结果显示,p指向一个新的Person对象,其中Name字段为空字符串,Age字段为零值(int类型的零值为0)。

    需要注意的是,使用new关键字只是为对象分配了内存,并将其初始化为零值。如果需要对对象进行初始化赋值,可以使用结构体字面量或通过指针访问字段进行赋值操作。

    p := &Person{
    	Name: "John",
    	Age:  30,
    }
    
    • 1
    • 2
    • 3
    • 4

    p := new(Person)
    p.Name = "John"
    p.Age = 30
    
    • 1
    • 2
    • 3

    这样,我们可以通过结构体字面量或指针赋值对新对象进行初始化。

    go的make和new初始化的区别

    new关键字:
    new用于分配内存并返回指向该内存的指针。
    它接受一个类型作为参数,并返回该类型的零值的指针。
    new适用于任何类型,包括基本类型、结构体、指针、函数等。
    new返回的是指针,指向分配的内存空间。该内存空间被初始化为零值。
    new返回的指针可以直接使用,无需进一步初始化。
    示例:

    p := new(int) // 创建一个新的整数变量,并返回指向该整数的指针
    fmt.Println(*p) // 输出:0,表示指针所指向的整数的零值
    
    • 1
    • 2

    make关键字:
    make用于创建并初始化切片、映射和通道类型的数据结构。
    它接受一个类型、长度和容量(对于切片和通道)或长度(对于映射)作为参数,并返回已初始化的数据结构。
    只有一些特定的引用类型(切片、映射和通道)适用于make,而基本类型和结构体类型不适用。
    make返回的是已初始化的数据结构,而不是指针。
    示例:

    s := make([]int, 0, 5) // 创建一个长度为0、容量为5的整数切片
    m := make(map[string]int) // 创建一个空的字符串到整数的映射
    c := make(chan int) // 创建一个整数类型的无缓冲通道
    
    • 1
    • 2
    • 3

    总结:

    new关键字用于分配内存并返回指向该内存的指针,适用于任何类型。
    make关键字用于创建并初始化切片、映射和通道类型的数据结构,仅适用于特定的引用类型。
    使用new关键字返回的是指针,使用make关键字返回的是已初始化的数据结构。
    new关键字返回的指针可以直接使用,而make关键字返回的已初始化数据结构可以直接操作。

  • 相关阅读:
    OSI参考模型个人总结
    怎么查看当前vue项目,要求的node.js版本
    【编程题 】HJ64 MP3光标位置(详细注释 易懂)
    Diffie-Hellman的C++语言描述简单实现
    数据结构--字符串的模式匹配
    QComboBox多选框的实现(源码):采用QListWidget实现多选后控件丢失的问题(探讨)
    企业分账如何帮助用户解决成本优化和预算分配的问题
    阿里云代理商:阿里云跨分部抵销前营收267.6亿元,跨分部抵销后营收207.57亿元,抵销后营收环比增长达17.37%。
    flask获取post请求参数
    AcrelEMS-EV汽车制造能效管理系统解决方案
  • 原文地址:https://blog.csdn.net/liulanba/article/details/132813449