golang-笔记1
指针:
指针就是地址。 指针变量就是存储地址的变量。
*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的更多相关文章
- golang笔记1
golang笔记1 go代码是用包来组织的,每个包有一个或多个go文件组成,这些go文件文件放在一个文件夹中 每个源文件开始都用一个package声明,指明本源文件属于哪个包 pakage声明后紧跟这 ...
- Golang笔记(二)面向对象的设计
Golang笔记(二)面向对象的设计 Golang本质还是面向过程的语言,但它实现了一些OOP的特性,包括抽象.封装.继承和多态. 抽象和封装 Golang和C语言一样以struct为数据结构核心,不 ...
- Golang笔记(一)简洁的语言风格
Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是 ...
- Golang笔记集
学习Golang了, 下面分享我的, 还有我收集的Golang的学习资料 我的基础笔记地址: https://github.com/zhuchangwu/go-study-notes 其他参考: Go ...
- Golang笔记整理--One day
题外话: 很早就有整理学习笔记的想法,今天将想法付诸于行动,将Golang相关知识系统整理一遍,此分类为Golang学习笔记,最近开始学习这门语言的同学可以参考. 一 第一个Go程序: hello.g ...
- golang笔记——函数与方法
如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...
- golang笔记——IDE
可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1.Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目 ...
- golang笔记——包
1.包简述 GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包.比如 ...
- golang笔记——环境搭建
1.下载安装 从 https://golang.org/dl/ 这里下载最新版本的 golang 安装包,分别有 Windows\Linux\Apple OSX\源码包. golang的官方网站是 h ...
- 【Golang笔记】Golang工具包Cobra安装记录
0.环境信息 系统:Win10_x64 Go版本:go version go1.8.1 windows/amd64 Git版本:git version 2.17.0.windows.1 1.安装Go运 ...
随机推荐
- Python之TensorFlow的(案例)验证码识别-6
一.这里的案例相对比较简单,主要就是通过学习验证码的识别来认识深度学习中我们一般在工作中,需要处理的东西会存在哪些东西. 二.因为我没有数据集,没有关系,这里自己写了一个数据集,来做测试,为了方便我把 ...
- SWD下载k60
转:JTAG各类接口针脚定义,含义及SWD接线方式 IAR设置如下
- Oracle数据库的视图
使用视图的优点: 1.简化数据操作:视图可以简化用户处理数据的方式. 2.着重于特定数据:不必要的数据或敏感数据可以不出现在视图中. 3.视图提供了一个简单而有效的安全机制,可以定制 ...
- PS1变量设置
\d :代表日期,格式为weekday month date \H :完整的主机名 \h :主机的第一个名字 \t :显示时间为24小时格式(HH:MM:SS) \T :显示时间为12小时格式 \A ...
- 逗号分隔的字符串转成表格参与IN条件查询
返回值为'1,2,3,4,5,6,7',是一个字符串,如果要用IN 查询的话sql认为这是一个完整的字符串,需要将内容分隔转换变成table 定义函数如下: create Function sysfS ...
- mybatis中如何将多个表的查询结果,放入结果集中返回
1.首先需要将resultMap进行改造,为了避免对其他sql的影响建议另外定义一个resultMapExtral,避免id相同, 2.然后在resultMapExtral中添加其它表的字段,若多个表 ...
- python之变量的数据类型(1)int 、bool 、str 及for循环运用
一.变量的数据类型(1) 1.int 类型 int类型是整数,常用的有bit_length() 方法 用来返回一个数的二进制长度 2.bool类型 布尔型只有两个值 True,False 有关类型转换 ...
- Lenet5设计理解——咬文嚼字系列
最近在看lecun大神的这篇经典文章:“Gradient-Based Learning Appliedto Document Recognition”,文章较老,但是对于lenet5的一些基础概念讲解 ...
- vscode 上安装 leetcode插件
vscode 真是一款非常好的轻量级的代码编辑工具,无论windows还是ubuntu使用体验都非常好. leetcode用来练练脑子吧,不要老年痴呆了. 1. 安装vscode Ubuntu先去下载 ...
- pl/sql developer 中文字段显示乱码 解决办法
一.原因:因为数据库的编号格式和pl /sql developer的编码格式不统一造成的. 二.查看和修改oracle数据库字符集: select userenv('language') from d ...