Golang中make的使用
内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上),跟 new 类似,第一个参数也是一个类型而不是一个值,跟 new 不同的是,make 返回类型的引用而不是指针,而返回值也依赖于具体传入的类型
make()函数在golang的代码如下:
func make(t Type,size IntegerType) Type
1
使用make来创建slice,map,chanel说明如下:
slice:
var slice_ []int = make([]int,5,10)
fmt.Println(slice_)
var slice_1 []int = make([]int,5)
fmt.Println(slice_1)
var slice_2 []int = []int{1,2}
fmt.Println(slice_2)
打印结果:
[0 0 0 0 0]
[0 0 0 0 0]
[1,2]
1
2
3
4
5
6
7
8
9
10
11
12
13
在创建slice时第一个参数用于确定初始化该slice的大小该slice中的值为零值,第三个参数用于确定该slice的长度
如果我们创建该slice时就能确定该slice最多只会装多大的数据量时就可以使用第三个参数固定该slice的长度,这样做的就会免去如果slice的数据超出内部所指向的array的最大长度时对array数据的转移,可以提高效率
map:
var m_ map[string]int = make(map[string]int)
m_["one"] = 1
fmt.Println(m_)
var m map[string]int = map[string]int{"1":1}
m["2"] = 2
fmt.Println(m)
打印结果:
map[one:1]
map[1:1 2:2]
1
2
3
4
5
6
7
8
9
10
11
根据 size 大小来初始化分配内存,不过分配后的 map 长度为 0,如果 size 被忽略了,那么会在初始化分配内存时分配一个小尺寸的内存
chanel:
管道缓冲区依据缓冲区容量被初始化。如h果容量为 0 或者忽略容量,管道是没有缓冲区的
make函数,该函数第一个参数是类型,第二个参数是分配的空间,第三个参数是预留分配空间,例如a:=make([]int, 5, 10), len(a)输出结果是5,cap(a)输出结果是10,然后我对a[4]进行赋值发现是可以得,但对a[5]进行赋值发现报错了,于是郁闷这个预留分配的空间要怎么使用呢,于是google了一下发现原来预留的空间需要重新切片才可以使用,代码如下。
package main
import "fmt"
func main(){
a := make([]int, 10, 20)
fmt.Printf("%d, %d\n", len(a), cap(a))
fmt.Println(a)
b := a[:cap(a)]
fmt.Println(b)
}
参考:
https://blog.csdn.net/happinessaflower/article/details/44659651
https://studygolang.com/articles/10751
Golang中make的使用的更多相关文章
- golang中的race检测
golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...
- 基础知识 - Golang 中的正则表达式
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- golang中的reflect包用法
最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...
- Golang中的坑二
Golang中的坑二 for ...range 最近两周用Golang做项目,编写web服务,两周时间写了大概五千行代码(业务代码加单元测试用例代码).用Go的感觉很爽,编码效率高,运行效率也不错,用 ...
- Golang 中的坑 一
Golang 中的坑 短变量声明 Short variable declarations 考虑如下代码: package main import ( "errors" " ...
- google的grpc在golang中的使用
GRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x. 前面写过一篇golang标准库的rpc包的用法,这篇文章接着讲一 ...
- Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper
Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口: 对数据库中一张表的增删改查 ...
- Golang中WaitGroup使用的一点坑
Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...
- Golang中使用lua进行扩展
前言 最近在项目中需要使用lua进行扩展,发现github上有一个用golang编写的lua虚拟机,名字叫做gopher-lua.使用后发现还不错,借此分享给大家. 数据类型 lua中的数据类型与go ...
- golang中Context的使用场景
golang中Context的使用场景 context在Go1.7之后就进入标准库中了.它主要的用处如果用一句话来说,是在于控制goroutine的生命周期.当一个计算任务被goroutine承接了之 ...
随机推荐
- 为了运行十年前的代码,程序员们甚至翻出了一台 1977 年的 Apple II
"Hello, World!" 46 年过去,这段被世人熟知的代码仍散发着历久弥新的魅力,和它一起登场的 C 语言,如今也成长为世界几大通行编程语言之一,为互联网世界乃至现实世界都 ...
- xpath教程-通过ID和Class检索 转
通过ID和Class检索 必备知识点 在html中,id是唯一的 在html中,class是可以多处引用的 工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自 ...
- Harbor 安装教程
Harbor 安装教程 一. CentOS设置 1. 更换阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com ...
- Topsis优劣解距离法 mlx代码
请参考https://blog.csdn.net/qq_36384657/article/details/98188769 mlx代码 topsis 优劣解距离法 参数说明: 分数.获奖次数.价值等 ...
- eclipse 开发常见问题集锦
问题1: eclipse导入外部项目,中文显示乱码(如下图) 方案:项目名-->右键属性-->如下图: 问题2: jsp/html页面eclipse双击打开,代码在工作区不显示(如下图:) ...
- DEM轨迹后处理
更推荐的方法:https://www.cnblogs.com/Jay-CFD/p/12195294.html 2020.6.16更新 方法一:直接在paraview中显示 首先在输出颗粒信息的时候保存 ...
- Redis学习笔记(七)——数据结构之有序集合(sorted set)
一.介绍 Redis有序集合和集合一样都是string类型元素的机会,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.Redis正是通过分数来为集合中的成员进行从小到放大的排 ...
- while语句的一个使用技巧
作用类似于可以输入一个不定量长度的数组,但是严格来说 不可能出现任意长度. 内存是有限的 超出一定长度后,不可能存的下,虽然这个值可能是超级大的,但总有限度. 这里我们利用while(cin>& ...
- openshift 平台上部署 gitlab代码仓库服务
背景: 本文档将以在openshift 平台上部署 gitlab 服务来验证集群各个服务组件的可用性以及熟悉openshift的使用方法.服务部署方式可以多种多样,灵活部署.本篇以常见的镜像部署方式来 ...
- mysql管理表关系
表关系管理 关注公众号"轻松学编程"了解更多. 1.概述 表与表之间的关系可以是一对一.一对多.多对一的.通过外键把表连接起来,外键放在任意一张表都可以,通常选择由从表(相对次 ...