make函数用于初始化slice、chan和map
如果只用var声明,不用make初始化,变量对应的值为nil。

1.make初始化slice
共有三个参数:类型,长度和容量,其中类型和长度必须指定。

关于长度和容量,指定长度len,即为slice赋指定长度的默认值,比如int赋值0,string赋值"",bool赋值false等。并且0到len-1都是合法的下标访问范围。


容量表示slice底层数组的长度,当使用append操作进行追加时,如果追加后的底层数组长度大于了当前容量cap,那么就会重新分配另一块连续内存给当前的底层数组,并把之前的复制过来。若不声明容量,则默认容量等于当前长度len。

切片是基于数组的。可以把切片简单的理解为数组中的一段,它保留了指向数组中某个元素(可以不是第一个元素)的指针,以及它本身的长度(也就是切片的大小)。
var s=make([]int,0,10)这条语句创建了一个长度为10的数组,并在该数组之上建立了一个切片s,该切片保留指向数组第一个元素的指针,以及它的长度(0)。

下面是demo示例:

//s的地址0xc0002fe000  s:[0 0 0 0 0], len:5,cap:6,底层数组长度为5,最大连续长度为6,返回一个[0:5]的切片s:=make([]int,5,6)fmt.Printf("%p\n",s)fmt.Println(s)fmt.Println(len(s),cap(s))//b的地址0xc0002fe000  s不变,append到切片s的下一位(底层数组第6位) len:6,cap:6,底层数组长度为6,返回一个[0:6]的切片b:=append(s,6)fmt.Printf("%p\n",b)fmt.Println(b)fmt.Println(len(b),cap(b))//c的地址0xc0002fe000  s不变,append到切片s的下一位(底层数组第6位) len:6,cap:6,底层数组长度为6,返回一个[0:6]的切片c:=append(s,7)fmt.Printf("%p\n",c)fmt.Println(c)fmt.Println(len(c),cap(c))//切片b[0:6],超过底层数组的cap,所以在b后面追加一个元素底层数组会进行扩容,扩容后cap的为原来的两倍,并且底层数组的首地址改变,返回一个[0:7]切片d:=append(b,7)fmt.Printf("%p\n",d)fmt.Println(d)fmt.Println(len(d),cap(d))//切片s根本没有变过,因为它引用的底层数组[0:5]没有变过fmt.Printf("%p\n",s)fmt.Println(s)fmt.Println(len(s),cap(s))

打印结果:
0xc00002a0f0
[0 0 0 0 0]
5 6
0xc00002a0f0
[0 0 0 0 0 6]
6 6
0xc00002a0f0
[0 0 0 0 0 7]
6 6
0xc000092060
[0 0 0 0 0 7 7]
7 12
0xc00002a0f0
[0 0 0 0 0]
5 6

2.make初始化map
make初始化map时,可以指定map的容量,也可以不指定。而且可以看到指定map的容量对map的初始大小是没有什么关系的。

 m:=make(map[string]int)m1:=make(map[string]int,2)fmt.Println(m,len(m)) //map[] 0fmt.Println(m1,len(m1))  //map[] 0

可以看到map的大小随着添加的kv对增多而变大

 m1:=make(map[string]int,2)fmt.Println(m1,len(m1)) //map[] 0m1["1"]=1fmt.Println(m1,len(m1)) //map[1:1] 1m1["2"]=2fmt.Println(m1,len(m1))  //map[1:1 2:2] 2

golang make的使用相关推荐

  1. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  2. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  3. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

  4. 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发

    基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...

  5. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  6. 基于Golang的对象序列化的程序包开发——myJsonMarshal

    基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...

  7. 【golang程序包推荐分享】go-ini、viper、godoc

    [golang程序包推荐&分享]go-ini.viper.godoc 一.go-ini 1.程序包简介 2.下载安装 3.简单使用[截取自官网] 二.viper 1.程序包简介 2.下载安装 ...

  8. 基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1

    基于Golang的监听&读取配置文件的程序包开发--simpleConfig_v1 [阅读时间:约10分钟] 一.配置文件概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 ...

  9. 基于Golang的CLI 命令行程序开发

    基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...

  10. centos使用镜像源轻松配置golang+vscode的方法

    Title:centos使用镜像源轻松配置golang+vscode的方法 (阅读时间:约5分钟) 零.序言 最近笔者在上一门名为服务计算的课程,在老师的作业博客中提到,安装golang+vscode ...

最新文章

  1. LPC43xx双核笔记
  2. 从零开始学python数据分析-【01】从零开始学Python—数据分析与挖掘概述
  3. 社交游戏纳入文化部监管视野 开发者或出海
  4. 第五节 面向对象相关特性
  5. OpenGL之深入解析坐标系
  6. AcWing 312. 乌龟棋
  7. SWF 文件不能访问本地资源 只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源。...
  8. Java面向对象(二)
  9. 基于java的土地档案管理系统设计(含源文件)
  10. iOS中XML解析 (一) TBXML (实例:打印xml内容及存储到数组)
  11. matlab中运用demod解调程序,matlab调制解调源码有代码解释原理分析
  12. 国内流行的两大开源.net微信公众平台SDK对比分析
  13. NHibernate one-to-one 关系的几点说明
  14. 51单片机外部中断实例
  15. 养一套美国房子有多贵
  16. [ github ] 我是怎么用GitHub的?
  17. python爬虫之使用selenium爬取b站视频信息
  18. 华为交换机s2700怎么重置_华为s2700交换机初次使用常用配置命令
  19. HashMap源码解析——构造方法
  20. web课程设计-照片记录网站(Flask)【web项目】

热门文章

  1. SQL的all、any和some的用法
  2. Nydus 镜像扫描加速
  3. MPAndroidChart项目实战(五)——MPAndroidChart组合图
  4. SurfaceFlinger草稿
  5. 英文文献阅读1-基于灰色关联熵分析的电子商务背景下农村终端配送模式评价
  6. serializeArray()方法获取到空数组
  7. Java游戏服务器成长之路——弱联网游戏篇(源码分析)
  8. 创业小心三种诈骗陷阱
  9. es 按月建索引,定时删除3个月前索引
  10. python socket recvfrom_Python:socket.recvfrom()不返回任何地址