Go语言中内建函数make的使用

 更新时间:2024年09月26日 11:42:47   作者:音乐学家方大刚  
在Go语言编程中,make函数是一个重要的内建函数,它用于创建和初始化切片、映射和通道,握 make 的使用方法,可以帮助我们更高效地管理内存和数据结构

在 Go 语言中,make 是一个非常强大的内建函数,用于创建和初始化特定类型的数据结构,包括切片(slice)、映射(map)和通道(channel)。掌握 make 的使用方法,可以帮助我们更高效地管理内存和数据结构。本文将详细介绍 make 函数的使用场景和示例。

make 函数的基本语法

make 函数的基本语法如下:

make(type, size, [capacity])
  • type:指定要创建的数据结构类型,可以是切片、映射或通道。
  • size:指定初始长度(对于切片)或初始大小(对于通道)。
  • capacity(可选):仅适用于切片,指定其容量。

创建切片

使用 make 函数创建切片时,可以指定切片的初始长度和容量。如果未指定容量,默认与长度相同。

package main

import "fmt"

func main() {
    // 创建长度为 5 的切片
    slice1 := make([]int, 5)
    fmt.Println("slice1:", slice1) // 输出:slice1: [0 0 0 0 0]

    // 创建长度为 5,容量为 10 的切片
    slice2 := make([]int, 5, 10)
    fmt.Println("slice2:", slice2) // 输出:slice2: [0 0 0 0 0]
    fmt.Println("slice2 容量:", cap(slice2)) // 输出:slice2 容量: 10
}

创建映射

使用 make 函数创建映射时,只需要指定映射的类型。映射会自动调整大小,因此不需要指定初始容量,但可以提供一个初始容量以提高性能。

package main

import "fmt"

func main() {
    // 创建一个映射
    m := make(map[string]int)
    m["a"] = 1
    m["b"] = 2
    fmt.Println("map:", m) // 输出:map: map[a:1 b:2]

    // 创建一个初始容量为 10 的映射
    m2 := make(map[string]int, 10)
    fmt.Println("map2:", m2) // 输出:map2: map[]
}

创建通道

使用 make 函数创建通道时,需要指定通道的类型和缓冲区大小。如果缓冲区大小为 0,则创建的是无缓冲通道。

package main

import "fmt"

func main() {
    // 创建一个无缓冲通道
    ch1 := make(chan int)
    go func() {
        ch1 <- 1
    }()
    fmt.Println("ch1:", <-ch1) // 输出:ch1: 1

    // 创建一个带缓冲区大小为 5 的通道
    ch2 := make(chan int, 5)
    ch2 <- 1
    ch2 <- 2
    fmt.Println("ch2 容量:", cap(ch2)) // 输出:ch2 容量: 5
    fmt.Println("ch2 长度:", len(ch2)) // 输出:ch2 长度: 2
}

使用 make 函数的注意事项

  • 与 new 区别:make 函数只用于创建切片、映射和通道,并且返回的是初始化后的数据结构;而 new 函数用于分配内存,并返回指向零值的指针。
  • 初始容量:为切片或映射指定初始容量可以提高性能,特别是在预期会存储大量数据的情况下。
  • 无缓冲与缓冲通道:无缓冲通道用于同步,而带缓冲区的通道则允许异步操作。根据需求选择合适的通道类型。

示例代码

以下是一个综合示例,展示了如何使用 make 函数创建切片、映射和通道:

package main

import "fmt"

func main() {
    // 创建切片
    slice := make([]int, 5, 10)
    fmt.Println("切片:", slice) // 输出:切片: [0 0 0 0 0]
    fmt.Println("切片容量:", cap(slice)) // 输出:切片容量: 10

    // 创建映射
    m := make(map[string]int)
    m["a"] = 1
    m["b"] = 2
    fmt.Println("映射:", m) // 输出:映射: map[a:1 b:2]

    // 创建通道
    ch := make(chan int, 5)
    ch <- 1
    ch <- 2
    fmt.Println("通道容量:", cap(ch)) // 输出:通道容量: 5
    fmt.Println("通道长度:", len(ch)) // 输出:通道长度: 2
}

总结

make 是 Go 语言中的一个关键函数,它帮助我们高效地创建和初始化切片、映射和通道。理解和正确使用 make 函数,可以显著提高代码的性能和可维护性。希望这篇博客能帮助你更好地理解和使用 Go 语言中的 make 函数,让你的编程之旅更加顺畅。

到此这篇关于Go语言中内建函数make的使用的文章就介绍到这了,更多相关Go 内建函数make内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文搞懂Go语言标准库strconv

    一文搞懂Go语言标准库strconv

    strconv包实现了基本数据类型和其字符串表示的相互转换,本文主要介绍Go语言标准库strconv,想要学习strconv标准库的可以了解一下
    2023-04-04
  • Go中nil比较的隐藏陷阱

    Go中nil比较的隐藏陷阱

    Go语言中,nil值比较因类型和上下文而异,相同类型nil相等,不同类型比较报错,下面我们就来介绍一下Go中nil比较的隐藏陷阱,感兴趣的可以了解一下
    2025-09-09
  • Golang中的new()和make()函数本质区别

    Golang中的new()和make()函数本质区别

    在 Go 语言开发中,new() 和 make() 是两个容易让开发者感到困惑的内建函数,尽管它们都用于内存分配,但其设计目的、适用场景和底层实现存在本质差异,本文将通过类型系统、内存模型和编译器实现三个维度,深入解析这两个函数的本质区别,感兴趣的朋友一起看看吧
    2025-02-02
  • golang协程池设计详解

    golang协程池设计详解

    这篇文章主要介绍了golang协程池设计详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • win10下go mod配置方式

    win10下go mod配置方式

    这篇文章主要介绍了win10下go mod配置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Gorm更新零值问题解决思路与过程

    Gorm更新零值问题解决思路与过程

    这篇文章主要介绍了Gorm更新零值问题解决思路与过程,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2023-01-01
  • golang 监听服务的信号,实现平滑启动,linux信号说明详解

    golang 监听服务的信号,实现平滑启动,linux信号说明详解

    这篇文章主要介绍了golang 监听服务的信号,实现平滑启动,linux信号说明详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • GoZero实现数据库MySQL单例模式连接的简单示例

    GoZero实现数据库MySQL单例模式连接的简单示例

    在 GoZero 框架中实现数据库的单例连接可以通过以下步骤来完成,GoZero 使用 gorm 作为默认的数据库操作框架,接下来我会展示一个简单的单例模式实现,需要的朋友可以参考下
    2025-02-02
  • Go 1.22对net/http包的路由增强功能详解

    Go 1.22对net/http包的路由增强功能详解

    Go 1.22 版本对 net/http 包的路由功能进行了增强,引入了方法匹配(method matching)和通配符(wildcards)两项新功能,本文将给大家详细的介绍一下Go 1.22对net/http包的路由增强功能,需要的朋友可以参考下
    2024-02-02
  • 深入解析快速排序算法的原理及其Go语言版实现

    深入解析快速排序算法的原理及其Go语言版实现

    这篇文章主要介绍了快速排序算法的原理及其Go语言版实现,文中对于快速算法的过程和效率有较为详细的说明,需要的朋友可以参考下
    2016-04-04

最新评论