指针:

指针就是地址。 指针变量就是存储地址的变量。

*p : 解引用、间接引用。

栈帧: 用来给函数运行提供内存空间。 取内存于 stack 上。

当函数调用时,产生栈帧。函数调用结束,释放栈帧。

栈帧存储: 1. 局部变量。 2. 形参。 (形参与局部变量存储地位等同) 3. 内存字段描述值

指针使用注意:

空指针:未被初始化的指针。 var p *int *p --> err

野指针:被一片无效的地址空间初始化。

格式化输出:

%q: 以Go语言格式显示字符串。 默认带有“”符

%v: 显示对应数据详细信息

变量存储:

等号 左边的变量,代表 变量所指向的内存空间。 (写)

等号 右边的变量,代表 变量内存空间存储的数据值。 (读)

指针的函数传参(传引用)。

传地址(引用):将形参的地址值作为函数参数传递。

传值(数据据):将实参的 值 拷贝一份给形参。

传引用: 在A栈帧内部,修改B栈帧中的变量值。

切片:

为什么用切片:

1. 数组的容量固定,不能自动拓展。

2. 值传递。 数组作为函数参数时,将整个数组值拷贝一份给形参。

在Go语言当,我们几乎可以在所有的场景中,使用 切片替换数组使用。

切片的本质:

不是一个数组的指针,是一种数据结构体,用来操作数组内部元素。 runtime/slice.go type slice struct {
*p
len
切片的使用: cap
}
数组和切片定义区别:

创建数组时 [ ] 指定数组长度。

创建切片时, [] 为空,或者 ...

切片名称 [ low : high : max ]

low: 起始下标位置

high:结束下标位置 len = high - low

容量:cap = max - low

截取数组,初始化 切片时,没有指定切片容量时, 切片容量跟随原数组(切片)。

s[:high:max] : 从 0 开始,到 high结束。(不包含)

s[low:] : 从low 开始,到 末尾

s[: high]: 从 0 开始,到 high结束。容量跟随原先容量。【常用】

切片创建:

1. 自动推导类型创建 切片。slice := []int {1, 2, 4, 6}

2. slice := make([]int, 长度,容量)

3. slice := make([]int, 长度) 创建切片时,没有指定容量, 容量== 长度。【常用】

切片做函数参数 —— 传引用。(传地址)

append:在切片末尾追加元素

append(切片对象, 待追加元素)

向切片增加元素时,切片的容量会自动增长。1024 以下时,一两倍方式增长。

copy:

copy(目标位置切片, 源切片)

拷贝过程中,直接对应位置拷贝。

map:

字典、映射 key —— value key: 唯一、无序。 不能是引用类型数据。

map 不能使用 cap()

创建方式:
1. var m1 map[int]string --- 不能存储数据

2. m2 := map[int]string{} ---能存储数据

3. m3 := make(map[int]string) ---默认len = 0

4. m4 := make(map[int]string, 10)

初始化:

1. var m map[int]string = map[int]string{ 1: "aaa", 2:"bbb"} 保证key彼此不重复。

2. m := map[int]string{ 1: "aaa", 2:"bbb"}

赋值:

赋值过程中,如果新map元素的key与原map元素key 相同 ——> 覆盖(替换)

赋值过程中,如果新map元素的key与原map元素key 不同 ——> 添加

map的使用:

遍历map:

for key值, value值 := range map {

}

for key值 := range map {

}

判断map中key是否存在。

map[下标] 运算:返回两个值, 第一个表 value 的值,如果value不存在。 nil

第二个表 key是否存在的bool类型。存在 true, 不存在false

删除map:

delete()函数: 参1: 待删除元素的map 参2: key值

delete(map, key) 删除一个不存在的key , 不会报错。

map 做函数参数和返回值,传引用。

golang-笔记1的更多相关文章

  1. golang笔记1

    golang笔记1 go代码是用包来组织的,每个包有一个或多个go文件组成,这些go文件文件放在一个文件夹中 每个源文件开始都用一个package声明,指明本源文件属于哪个包 pakage声明后紧跟这 ...

  2. Golang笔记(二)面向对象的设计

    Golang笔记(二)面向对象的设计 Golang本质还是面向过程的语言,但它实现了一些OOP的特性,包括抽象.封装.继承和多态. 抽象和封装 Golang和C语言一样以struct为数据结构核心,不 ...

  3. Golang笔记(一)简洁的语言风格

    Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是 ...

  4. Golang笔记集

    学习Golang了, 下面分享我的, 还有我收集的Golang的学习资料 我的基础笔记地址: https://github.com/zhuchangwu/go-study-notes 其他参考: Go ...

  5. Golang笔记整理--One day

    题外话: 很早就有整理学习笔记的想法,今天将想法付诸于行动,将Golang相关知识系统整理一遍,此分类为Golang学习笔记,最近开始学习这门语言的同学可以参考. 一 第一个Go程序: hello.g ...

  6. golang笔记——函数与方法

    如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...

  7. golang笔记——IDE

    可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1.Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目 ...

  8. golang笔记——包

    1.包简述 GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包.比如 ...

  9. golang笔记——环境搭建

    1.下载安装 从 https://golang.org/dl/ 这里下载最新版本的 golang 安装包,分别有 Windows\Linux\Apple OSX\源码包. golang的官方网站是 h ...

  10. 【Golang笔记】Golang工具包Cobra安装记录

    0.环境信息 系统:Win10_x64 Go版本:go version go1.8.1 windows/amd64 Git版本:git version 2.17.0.windows.1 1.安装Go运 ...

随机推荐

  1. 在windows中使用PuTTy上传下载文件和目录

    打开windows的cmd,使用cd命令切换到PuTTy安装目录 C:\Users\NUC>cd C:\Program Files\PuTTY 在cmd中使用pscp命令上传下载文件 windo ...

  2. 深入理解JVM(六) -- GC执行原则和方案

    上篇文章中,我们了解了Java虚拟机垃圾回收的思路和策略,这篇文章我们将了解Java是如何实现高效的回收算法的. 我们需要了解,内存回收必须要保证“一致性”,意思就是在执行GC分析的时候,系统看起来要 ...

  3. 大数据相关技术原理资料整理(hdfs, spark, hbase, kafka, zookeeper, redis, hive, flink, k8s, OpenTSDB, InfluxDB, yarn)

    hdfs: hdfs官方文档 深入理解HDFS的架构和原理 https://blog.csdn.net/kezhong_wxl/article/details/76573901 HDFS原理解析(总体 ...

  4. UCOSIII内建消息队列

    使能内建消息队列 将OS_CFG_TASK_Q_EN置1 API函数 #if OS_CFG_TASK_Q_EN > 0u //删除 OS_MSG_QTY OSTaskQFlush (OS_TCB ...

  5. 解决问题 inner element must either be a resource reference or empty.

    -Q: 错误<item>内部元素必须是资源引用或空 升级Andriod Studio之后编译发现如下错误 Android resource compilation failed ***\a ...

  6. jenkins rpm卸载

    rpm卸载 1.rpm -e jenkins rpm -ql jenkins 检查是否卸载成功 2.彻底删除残留文件:find / -iname jenkins | xargs -n 1000 rm ...

  7. django使用admin站点上传图片

      Django有提供文件系统支持,在Admin站点中可以轻松上传图片.使用Admin站点保存图片,需要安装Python的图片操作包 pip install Pillow 1 配置 默认情况下,Dja ...

  8. 【kafka】安装部署kafka集群(kafka版本:kafka_2.12-2.3.0)

    3.2.1 下载kafka并安装kafka_2.12-2.3.0.tgz tar -zxvf kafka_2.12-2.3.0.tgz 3.2.2 配置kafka集群 在config/server.p ...

  9. Python——Python安装

    下载地址:https://www.python.org/downloads/windows/ 3.X安装方法: 1. 设置一个自选路径,并将下面的选项打钩.(建议使用根目录) 2. 应用在所有用户中 ...

  10. Flink原理(四)——任务及调度

    本文是博主阅读官网文档.博客及书籍后自己所思所得,若是存在有误的地方,欢迎留言分享,谢谢! 一.任务调度 Flink是通过task slot的来定义执行资源的,为优化资源的利用率,Flink通过slo ...