![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
GOLang
GO语言踩坑
流浪大诗
没有离经叛道,只有向死而生
展开
-
Go 编程哲学
1、少即是多2、世界是并行的3、组合优于继承4、非侵入式的接口原创 2021-10-14 19:38:57 · 89 阅读 · 0 评论 -
Go工程管理
1、Go几个相关的环境变量(1)$GOROOT:Go 的安装根目录,Linux 下的环境默认是/usr/local/go。(2)$GOPATH :Go 语言编程的工作目录( workspace 如果没有设置 PATH 环境变 ,则linux下系统默认是/HOME/go)(3)$GOBIN 是带有 main 函数的源程序执行 go install 时生成的可执行程序安装目录,默认是$GOPATH/bin。如果想在任何路径执行安装的程序,则可以将$GOBIN 添加到$PATH中。(4)$GOOS 用来设原创 2021-10-13 23:02:52 · 152 阅读 · 0 评论 -
Go 语言陷阱
1、多值赋值和短变量声明原创 2021-10-12 23:54:31 · 174 阅读 · 0 评论 -
Go 反射
1、定义:反射就是程序能够在运行时动态地查看自己的状态,并且允许修改自身的行为。2、底层类型和基础类型的区别在于,基础类型是抽象的类型划分,底层类型是针对每一个具体的类型来定义的,比如不同的 struct 类型在基础类型上都划归为 sturct 类型,但不同的 struct底层类型是不一样的。3、反射规则4、反射API(1)分类i. 实例到 Value:通过实例获取 Value 象,直接使用 reflect. ValueOf()函数,例如: func ValueOf(i interface原创 2021-10-11 22:16:53 · 79 阅读 · 0 评论 -
Go并发和并行
1、基本概念并发:并发意味着程序在单位时间内是同时运行的。并行:并行意味着程序在任意时刻都是同时运行的;2、goroutine 特性:(go func ();)(1)go 的执行是非阻塞的,不会等待。(2)go 后面的函数的返回值会被忽略。(3)调度器不能保证 goroutin 的执行次序。(4)没有父子 goroutin 的概念,所有的 goroutin 是平等地被调度和执行的。(5)Go 程序在执行时会单独为 main 函数 goroutin ,遇到其他go关键字时再去创建其他的 go原创 2021-10-10 21:35:44 · 762 阅读 · 0 评论 -
Go接口小结
1、所谓实现接口实际上就是实现接口内声明的所有的方法集,故而只要具体类型的方法集是接口方法集的超集,就代表该类型实现了接口,编译器在编译时会进行方法集的校验 。2、 接口是没有具体实现辑的,也不能定义字段。3、由于空接口的方法集为空,所以任意类型都被认为实现了 空接口(可根据1中定义理解) ,任意类型的实例都可以赋值或传递给空接口 ,包括非命名类型的实例。4、非命名类型由于不 能定义自己的方法 所以方法集为空,因此其类型变量除了传递给空接口 ,不能传递给任何其他接口(需要回头梳理一下Go的类型系统)原创 2021-10-09 22:31:26 · 112 阅读 · 0 评论 -
Go lib依赖包整理
achieve包achieve/tar //unix系统常用的解压缩格式achieve/zip //windows系统常用的解压缩格式上述两个包均为实现数据的不同格式解压缩compress包功能正如其名字之意 —— 压缩,其提供的数据压缩格式见下述子包:compress/bzip2 //bzip2包实现bzip2的解压缩compress/flate //flate包实现了deflate压缩数据格式compress/gzip //gzip包实现了gzip格式压缩文件的读写compres翻译 2021-08-29 23:02:58 · 585 阅读 · 0 评论 -
Go Routine并发数量限制
在这之前,你需要了解什么是进程,线程和协程,对此网上有一大把的概念和解说,很详细,我们仅讲解三者关系,概念性的东西不在累述。可参考博文进程线程小别一个程序至少包含一个进程,而一个进程至少包含一个或多个线程,而协程则是更为灵活和轻量级的线程,和线程类似,共享堆,不共享栈,协程的切换一般由程序员在代码中显式控制。它避免了上下文切换的额外耗费,兼顾了多线程的优点,简化了高并发程序的复杂。 协程是一种协作任务控制机制,在最简单的意义上,协程不是并发的,而Goroutine支持并发的。因此Goroutine原创 2021-05-23 22:36:07 · 510 阅读 · 2 评论 -
Go sync.map
sync.map产生的原因map是非线程安全的,当进行并发操作时容易产生意想不到的错误sync.map的特点1、sync.map 是线程安全的,读取,插入,删除也都保持着常数级的时间复杂度。2、通过读写分离,降低锁时间来提高效率,适用于读多写少的场景。3、Range 操作需要提供一个函数,参数是 k,v,返回值是一个布尔值:f func(key, value interface{}) bool。4、调用 Load 或 LoadOrStore 函数时,如果在 read 中没有找到 key,原创 2021-05-11 15:04:28 · 364 阅读 · 0 评论 -
Go语言编码规范
注:相关的文章虽然在网上一大堆了,但是自己总结终究是自己所得,哈哈哈代码格式规范goland自带规范格式操作,仅需control + alt + L,就这么简单,给你搞得规规矩矩的,缩进工整。包相关包名要求小写,简洁,准确,若是多个单词则单词间下划线"_"分割另外在导入包时请务必使用绝对路径,不要使用相对路径,真心怕你修改文件层级时你的包找不着北了。当导入多个包时要求尽量把包划分为三类,标准库包,程序内部包,第三方包,然后同一类包按照字母序排序,不同类包之间最好换行加空行分割多个包导入格式如原创 2021-05-11 13:46:39 · 126 阅读 · 0 评论 -
Go语言及go编辑器常识
1、Go语言是一个快速的、静态类型的编译型语言2、查看和使用常见的Go命令help go help [command] get more information about commandbuild compile packages and dependenciesclean remove object filesenv print Go environment informationfix run go tool fix on pa原创 2021-05-03 22:41:13 · 366 阅读 · 0 评论