首页 > 其他分享 >Go 语言 -make函数

Go 语言 -make函数

时间:2024-10-31 14:46:12浏览次数:1  
标签:初始化 slice 函数 map int make Go

在 Go 语言中,make 是一个内置函数,专门用于分配和初始化 slice(切片)map(映射)channel(通道) 三种数据类型。
**make 函数不会返回一个指针,而是返回初始化后的数据结构本身的引用**。

make 函数的用途

make 的主要作用是为这些引用类型的数据结构分配内存并进行初始化,而不是像 new 函数那样仅仅分配内存。
make 返回的引用类型可以直接使用,无需进一步初始化。

make 函数的语法

make 函数的基本调用格式如下:

make(type, length, capacity)
  • type:要创建的类型,可以是 slicemapchannel
  • length(可选):数据结构的初始长度,适用于 slicechannel
  • capacity(可选):数据结构的容量,适用于 slice,如果不指定,容量默认等于长度。

make 函数的返回值

make 函数返回的是指定类型的值:

  • slice:返回一个指定长度和容量的切片。
  • map:返回一个初始化后的映射。
  • channel:返回一个带有指定容量的通道(若不指定容量则为无缓冲通道)。

每种类型的 make 返回值都是对应类型的引用,因此可以直接使用。

示例

1. 使用 make 创建切片

s := make([]int, 5, 10) // 创建一个长度为 5,容量为 10 的切片
fmt.Println(len(s), cap(s)) // 输出:5 10
  • make([]int, 5, 10) 创建了一个长度为 5,容量为 10 的切片。
  • 返回值 s 是一个初始化后的切片,带有 5 个默认值为 0 的 int 元素。

2. 使用 make 创建映射

m := make(map[string]int) // 创建一个空的 map
m["key"] = 42
fmt.Println(m["key"]) // 输出:42
  • make(map[string]int) 创建了一个空的 map,可以直接插入键值对。
  • 返回值 m 是一个空的映射,可以直接用来存储键值对。

3. 使用 make 创建通道

ch := make(chan int, 2) // 创建一个容量为 2 的缓冲通道
ch <- 1
ch <- 2
fmt.Println(<-ch) // 输出:1
fmt.Println(<-ch) // 输出:2
  • make(chan int, 2) 创建了一个容量为 2 的缓冲通道,可以存放两个 int 值。
  • 返回值 ch 是一个通道,允许在 Goroutine 间进行数据通信。

总结

  • make 函数用于分配和初始化三种引用类型:slicemapchannel
  • make 函数返回一个初始化后的值,而不是指针,可以直接使用

标签:初始化,slice,函数,map,int,make,Go
From: https://www.cnblogs.com/niumachen/p/18517768

相关文章

  • GO类型断言
    在Go语言中,类型断言用于将接口类型的变量转换为具体类型,以便能够访问其底层值。它在操作空接口(interface{})时尤其有用,因为空接口可以持有任意类型的值。类型断言的语法类型断言的基本语法如下:value,ok:=interfaceVariable.(TargetType)interfaceVariable是一个接口类......
  • Goroutine
    在Go语言中,Goroutine是一种轻量级的并发执行单元,可以理解为Go的“协程”。它由Go运行时管理,用于执行函数或任务。Goroutine的轻量级和高效并发特性使Go能够轻松处理数千甚至数百万个并发任务,适合构建高并发的服务器和网络应用。Goroutine的启动Goroutine通过go关......
  • Go 语言的Channel
    在Go语言中,Channel是一种用于在多个Goroutine之间传递数据的通信机制。Channel提供了类型安全、同步的数据传输方式,使Goroutine可以相互通信而无需使用锁。1.Channel的定义与声明在Go中,可以使用make函数创建Channel,并指定Channel中传输的数据类型:ch:=make(......
  • 如何在Go中进行单元测试
    #如何在Go中进行单元测试在Go语言中进行单元测试是确保代码质量和功能正确性的重要手段。Go的标准库提供了`testing`包来支持单元测试、基准测试、示例函数等测试方式。本文将详细介绍如何在Go语言中有效地进行单元测试,包括编写测试用例、运行测试、使用表驱动测试、测试覆盖率......
  • 西安短期驻场:python+flask/django 1.5万/月可谈
    驻场周期:2个月,不包食宿。地点:西安高新区费用:1.5万/月。可谈python后台开发岗位要求:-本科及以上学历,计算机相关专业,3年以上开发经验。-熟悉Python及其主流框架flask或django。-熟悉数据库设计与优化,如MySQL、Mango等,具备数据库性能调优经验。-熟练使用Git等版本控制工具,具备......
  • Python+Django框架淘宝家用电器销售数据可视化系统作品截图和开题报告参考
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开发......
  • 使用FastAPI整合Gradio和Django
    大家好,我是每天分享AI应用的萤火君!经常接触机器学习的同学可能都接触过Gradio这个框架,Gradio是一个基于Python的专门为机器学习项目创建的快速开发框架,可以让开发者快速发布自己的模型给用户测试,目前Huggingface上的机器学习项目都是基于Gradio对外提供服务的。不过Gradio的目......
  • golang有类似于java的spring吗_3
    为了回答这个问题:Golang是否有类似于Java的Spring框架,我们可以从两个角度来看:一、目前Golang是否有直接对应的全栈框架;二、Golang是否有能提供与Spring类似特性的框架或者库。对于第一个问题,Golang目前并没有一个完全仿照Spring的全栈框架。Java中的Spring框架是......
  • 【全】Go 操作Redis数据库
    操作Redis数据库在Go语言中是一项常见的任务,尤其是在构建高性能应用时。以下是一个关于如何使用Go操作Redis的详细指南,涵盖了从安装、配置到不同数据类型操作的各个层次(初级、中级、高级)。1.Go操作Redis实战介绍Redis是一个开源的内存数据结构存储,支持多种数......
  • Python+Django框架山西太原二手房数据可视化大屏系统开题报告参考
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开发......