Go语言知识点四十二章经
- 内存分配发生在运行时,编译后的机器码不使用变量名而是直接使用内存地址访问目标数据,所以编码阶段采用易于阅读的变量名
- 惯例建议以组的方式整理多行变量定义 var {x,y int } type{ xxx }
- 简短声明一般用于函数多返回值,以及if for switch等语句中定义局部变量
- 未使用的局部变量会编译出错,全局变量不报错
- 常量实在预处理阶段展开成指令数据,变量是在运行期分配存储内存.(所以常量无法寻址,没有地址)
- byte是uint8的别名 rune是int32的别名 别名直接可以相互赋值不需要类型转换;拥有相同的底层结构不代表就属于别名
- 未命名类型:数组、切片、字典、通道等类型与具体元素类型或长度等属性相关的类型,可以用type将其改变成命名类型;对于未命名类型 struct tag不同也属于不同类型,字段顺序不同也属于不同类型
- 自增自减只能作为独立语句
- .range迭代是复制数据
- goto只能跳转到同级代码,不能跨级别
- break用于switch for select,终止整个语句块执行;continue只用于for循环,终止后续逻辑立即进入下一轮循环
- 函数类型只支持nil判断,不支持其他比较操作
- 从函数返回局部变量指针是安全的,编译器会通过逃逸分析来决定是否在堆上分配内存;所以参数尽量减少值拷贝
- 不管是指针、引用类型还是其它类型参数,都是值拷贝传递,区别在于拷贝的目标对象
- 指针传递坏处在于延长该变量的声明周期,也可能导致他分配到堆上增加性能消耗
- 变参 func test(a …int){} test(a[:]…)
- 命名返回值的问题: 新定义的同名局部变量会引起同名遮蔽:xx is shadowed during return ;此时实名return即可
- error是接口类型
- runtime/debug.PrintStrack()可以打印完整的堆栈信息
- 多个panic仅最后一个被捕获;不可恢复性、导致系统无法正常工作的错误才会使用panic (文件系统没权限操作、服务端口被占用、数据库未启动等)
- 字符串是不可变字节(byte)序列,可用len获取长度,不可用cap;
- range遍历可以打印出汉字,len遍历出的汉字是乱码;utf8.RuneCountInString(s)代替len获取带汉字的字符串长度
- 字符串加法运算每次都会重新分配内存,构建大字符串性能极差;方法1:strings.Join 方法2:bytes.Buffer 小字符串拼接使用fmt.Sprintf text/template等
- 长度是数组的类型组成部分,元素类型相同长度不同的数组不是同一类型
- 切片:不是动态数组或数组指针;内部通过指针引用底层数组,设定相关属性将数据读写操作限定在指定区域内。可以理解为数组指针的包装
- 切片 var a[]int 为nil,仅代表他未初始化,但依旧分配内存;且a[:]依旧是nil
- 可将字符串直接复制到[]byte => b:=make([]byte,3) n:=copy(b,“abcdefhg”)=>n=3,b=[97 98 99]
- 切片初始化多大cap,copy就会复制成功<=cap的数据
- 字典的key必须支持== != 如数字、字符串、指针、数组、结构、接口
- if v,ok:=m[“d”];ok{存在} 使用ok-idiom模式判断key是否存在
- delete(m,“d”),删除不存在的key不报错
- map被设计成 no addressable,所有没法修改value的成员(如果value是个结构或者数组等) ;改进方法1:先获取完整value,修改后再赋值回去;方法2:value采用指针类型。因为value是指针,所有可以通过指针修改指针指向的数据。
- 对于海量小对象,应该直接用字典存储键值数据拷贝而不是指针,这样减少扫描对象的数量缩短垃圾回收时间。
- 字典不会收缩内存,适当替换新对象是有必要的
- 字段标签是对字段描述的元数据,是类型的组成部分;运行期间可用反射获取标签信息,通常作为格式校验和数据库关系映射等
- reflect.StructTag提供了更完善的功能
- T的方法集是 receiver T;*T的方法集是receiver T+*T
- 匿名嵌入S,T包含 receiver S;匿名嵌入*S,T包含 receiver S+S; 匿名嵌入S或S,*T都包含 receiver S+*S;
- 方法集仅影响接口实现和方法表达式转换。匿名字段就是为方法集准备的
- Chan: 一次性事件使用chan的close效率更高 向close的chan发数据panic 从已关闭的chan接收数据返回已缓存数据或零值 无论收发,nil通道都会阻塞
- Chan和锁的选择: 同步问题应该用锁或原子变量来操作 对性能要求较高时,应避免使用defer unlock 读写并发时,用RWMutex性能更好 对单个数据的读写保护建议使用读写锁 严格测试,尽可能打开数据竞争检查 通道倾向于解决逻辑层次的并发处理架构 锁用来保护局部范围内的数据安全
- 如果对map的读操作远远多于写操作(写操作包括新增和删除key),那么sync.Map是很合适,能够大大提升性能
补充
我们在遇到函数没有实现,但汇编又不存在时,可以通过尝试搜索:go:linkname xxx xx.xxx的形式来找,比如time.Sleep就可以通过//go:linkname timeSleep time.Sleep来查找具体实现在哪。
定时任务
https://github.com/robfig/cron
https://github.com/jasonlvhit/gocron
IM
https://github.com/GoBelieveIO/im_service
使用 Golang 解析 JSON 格式数据时,若以 interface{} 接收数据,则会按照下列规则进行解析:
bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null
import 后面跟着包路径
除非特别指定,否则无法使用 nil 对变量赋值
golang 中的类型比如:channel(通道)、complex(复数类型)、func(函数)均不能进行 JSON 格式化。
全局变量遇到简短声明
//varTest declared and not used
var varTest string
func test(){varTest, err := function()fmt.Println(err.Error())
}
func function()(string, error){return "hello world", errors.New("error")
}
func main(){test()
}
Go语言知识点四十二章经相关推荐
- 2017二级c语言成绩,2017全国计机等级考试二级C语言知识点超全整(打印版).docx
2017全国计机等级考试二级C语言知识点超全整(打印版) 全国计算机 等级考试 目录 第一部分 公共基础知识 第 1 章 算法与数据结构1 HYPERLINK \l "_TOC_250068 ...
- C语言数字3转变字符 3 程序,大学c语言知识点总结
大学c语言知识点总结 C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.一起来看看大学c语言知识点总结吧! 大学c语言知识点总 ...
- STM32中C语言知识点:初学者必看,老鸟复习(长文总结)
说在前面的话 一位初学单片机的小伙伴让我推荐C语言书籍,因为C语言基础比较差,想把C语言重新学一遍,再去学单片机,我以前刚学单片机的时候也有这样子的想法. 其实C语言是可以边学单片机边学的,学单片机的 ...
- 二级考试c语言中 星号与字母 题型总结,2017年计算机二级考试C语言知识点归纳...
2017年计算机二级考试C语言知识点归纳 计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,考核计算机基础知 ...
- c语言中字符占用的存储单元,C语言知识点第1章.doc
C语言知识点第1章 C语言知识点总结(二) 第八节 字符字符常量定义:一对单引号括起来的一个字符.如'A'.'a'.'9'相应字符对应的ASCII编码值(见附录四)字符常量占用一个字节的存储单元(一个 ...
- c语言static知识点,C语言知识点集锦
C语言知识点集锦 C语言作为一门非常适合编程入门的语言,打好基础的重要性不言而喻.下面整理了一些C语言知识点,希望对大家有所帮助! 知识点1:指针使用注意 Int *p只能指向int类型的数据 指针变 ...
- c语言二级考试知识点,2016年计算机二级考试C语言知识点大全
2016年计算机二级考试C语言知识点大全 第一章 1)合法的用户标识符考查: 合法的要求是由字母,数字,下划线组成.有其它元素就错了. 并且第一个必须为字母或则是下划线.第一个为数字就错了. 关键字不 ...
- 江苏省计算机二级c语言复习知识点,计算机二级C语言知识点复习
C语言已先后被移植到大.中.小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序.下面是小编收集的关于计算机二级C语言知识点复习,希望 ...
- 计算机二级c语言考试总结,计算机二级考试C语言知识点总结 .doc
计算机二级考试C语言知识点总结 (完全针对考试大纲) 概述 总体上必须清楚的: 1)程序结构是三种: 顺序结构 , 循环结构(三个循环结构), 选择结构(if 和 switch) 2)读程序都要从ma ...
最新文章
- 2021年全球数据中心调查
- 未来的浏览器=操作系统
- C++第10周项目2扩展之2参考——迭代求和
- kali mysql停止服务器_MySQL 的主从复制(高级篇)
- 音频光端机的必备要素有哪些?
- Delta-Sigma调制(DSM)技术
- C语言指针(1)嵌入式linux
- 写在ICDsoft购买和Paypal付款之后
- 当动物保护用上AI……
- C语言实现简单学籍管理系统
- 需求处理的三个步骤:需求梳理、需求分析、需求放大
- 移动端web自适应解决方案: adaptive.js
- 从头认识java-16.4 nio的读与写(ByteBuffer的使用)
- 如何利用ansible callback插件对执行结果进行解析
- echarts 动态设置y轴单位_Recharts动态设置y轴的最大值最小值
- mac airdrop 隔空投送 我可以发现别人,别人发现不了我。搜索不到。
- ORA-01012: not logged on 解决办法
- STM32 Bootloader开发记录 3 固件签名校验
- 五款手机APP黑科技,好用到爆炸
- 优秀程序员的45个习惯[摘]