golangnewmake

admin 2026-01-18 12:48:33 编程 来源:ZONE.CI 全球网 0 阅读模式

Golang中的new和make

Golang是Google开发的一种编程语言,它的设计目标是通过简洁的语法和强大的并发能力来提高程序员的效率。在Golang中,我们经常会遇到需要创建新的变量或者数据结构的场景,这时就需要使用到new和make这两个关键字。

new关键字

在Golang中,new关键字用于创建一个指向新分配零值的指针,并返回该指针。我们可以使用new关键字来创建一个基本类型的指针变量,也可以用它来创建一个结构体指针。

下面是new关键字的使用示例:

package main

import "fmt"

func main() {
    var p *int
    p = new(int)
    
    fmt.Println(*p) // 输出 0
}

在上面的代码中,我们使用new关键字创建了一个int类型的指针变量p,并将其赋值为nil。由于new函数分配了一块内存空间,并将其置为零值,所以*p的初始值为0。

除了基本类型,我们还可以使用new关键字创建结构体的指针变量:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := new(Person)
    
    fmt.Println(*p) // 输出 {"" 0}
}

在上面的代码中,我们使用new关键字创建了一个Person类型的指针变量p,并将其赋值为nil。因为Person的零值是一个空字符串和0,所以*p的初始值为{"" 0}。

make关键字

与new关键字不同,make关键字用于创建特定类型的对象,例如切片、映射和通道。make函数分配了一块未初始化的内存,将其置为零值,并返回该对象的引用。

下面是make关键字的使用示例:

package main

import "fmt"

func main() {
    s1 := make([]int, 3, 5)
    
    fmt.Println(s1)        // 输出 [0 0 0]
    fmt.Println(len(s1))   // 输出 3
    fmt.Println(cap(s1))   // 输出 5
    
    m1 := make(map[string]int)
    
    fmt.Println(m1)        // 输出 map[]
    
    ch := make(chan int)
    
    fmt.Println(ch)        // 输出 0xc00001e0c0
}

在上面的代码中,我们使用make关键字分别创建了一个切片变量s1、一个映射变量m1和一个通道变量ch。make函数会根据后面的参数决定创建的类型和长度。

对于切片来说,第一个参数是切片的类型,第二个参数是切片的长度,第三个参数是切片的容量。上面的代码中,s1是一个长度为3、容量为5的int类型切片,初始值都为0。

对于映射来说,make函数不需要指定长度和容量,所以我们只需要指定映射的类型即可。上面的代码中,m1是一个空的map[string]int类型映射。

对于通道来说,make函数不需要指定长度和容量,所以我们只需要指定通道的类型即可。上面的代码中,ch是一个int类型的通道。

结论

Golang的new关键字用于创建一个指向新分配零值的指针,而make关键字用于创建特定类型的对象。new关键字适用于基本类型和结构体的指针创建,而make关键字适用于切片、映射和通道等对象的创建。正确地使用new和make关键字可以帮助我们更好地管理内存和创建数据结构,提高程序的效率。

golangnewmake 编程

golangnewmake

Golang中的new和makeGolang是Google开发的一种编程语言,它的设计目标是通过简洁的语法和强大的并发能力来提高程序员的效率。在Golang中,
golang前景 编程

golang前景

Go语言是一种开源的编程语言,由Google开发并于2009年发布。它以其简洁的语法、高效的执行速度和强大的并发能力而受到开发者的喜爱。近年来,随着云计算、大数
Golang判断字符串编码方式 编程

Golang判断字符串编码方式

在Golang中,判断字符串的编码方式是一项常见的任务。编码方式指的是将字符转换为二进制数据的方法,常见的编码方式包括UTF-8、GBK、ASCII等。通过判断
golang讯飞合成语音 编程

golang讯飞合成语音

你好!作为一个专业的Golang开发者,我想和大家分享一下如何利用Golang和讯飞合成语音技术来实现语音合成功能。了解Golang语言 Golang是一种现代
评论:0   参与:  0