共计 2287 个字符,预计需要花费 6 分钟才能阅读完成。
大家好,明天将梳理出的 Go 语言常识遍及内容,分享给大家。请多多指教,谢谢。
后面已将根底语法、数据类型、函数应用内容介绍实现,置信大家曾经有了 Go 根底。此篇内容次要谈一下对 Go 这门语言的背景和个性内容,还有一些编程标准和大家分享一下。
本章节内容
- Go 语言的介绍
- 编程标准
Go 语言的介绍
Go 语言是由谷歌公司在 2007 年开发的一门语言,目标是能在多外围时代高效编写网络应用程序。Go 语言的创始人 Robert Griesemer、Rob Pike 和 Ken Thompson 都是在计算机倒退过程中作出过重要奉献的人。自从 2009 年 11 月正式公开公布后,Go 语言迅速席卷了整个互联网后端开发畛域,其社区里不断涌现出相似 vitess、Docker、etcd、Consul 等重量级的开源我的项目。
Go 语言开发团队花了很长时间来解决当今软件开发人员面对的问题。开发人员在为项目选择语言时,不得不在疾速开发和性能之间作出抉择。C 和 C ++ 这类语言提供了很快的执行速度,而 Ruby 和 Python 这类语言则善于疾速开发。Go 语言在这两者间架起了桥梁,不仅提供了高性能的语言,同时也让开发更疾速。
个性
- 语法简洁到只有几个关键字
- 编译器速度十分快
- 能显著缩小期待我的项目构建的工夫
- 内置并发机制
- 自带垃圾回收器
1. 开发速度
编译一个大型的 C 或者 C ++ 我的项目所破费的工夫甚至比去喝杯咖啡的工夫还长。
Go 语言应用了更加智能的编译器,并简化了解决依赖的算法,最终提供了更快的编译速度。编译 Go 程序时,编译器只会关注哪些间接被援用的库,而不是像 Java、C 和 C ++ 那样,要遍历依赖链中所有依赖的库。因而,很多 Go 程序能够在 1 秒内编译完。在古代硬件上,编译整个 Go 语言源码树只须要 20 秒。
2. Runtime
Golang Runtime 是 go 语言运行所须要的基础设施,次要作用:
- 携程调度,内存调配,GC;
- 操作系统及 CPU 相干的操作的封装(信号处理,零碎调用,寄存器操作,原子操作等),CGO;
- pprof,trace,race 检测的反对;
- Map,channel,string 等内置类型及反射的实现
阐明:
- 与 Java,Python 不同,Go 并没有虚拟机的概念,Runtime 也间接被编译成 native code;
- Go 的 Runtime 与用户代码一起打包在一个可执行文件中;
- 用户代码与 Runtime 代码在执行的时候并没有显著的界线,都是函数调用;
- go 对系统调用的指令进行了封装,不依赖于 glibc;
- 一些 Go 的关键字被编译成 runtime 包下的函数
此局部内容参考 腾讯技术工程公布的 Runtime 文章 https://zhuanlan.zhihu.com/p/…
3. 内存治理
不当的内存治理会导致程序解体或者内存透露,甚至让整个操作系统解体。Go 语言领有现代化的垃圾回收机制,能够无效的解决这个难题。外围的目标是把无趣的内存治理交给业余的编译器去做,而让程序员更专一与更乏味的事件。
实用的畛域
- 服务器编程,以前你如果应用 C 或者 C ++ 做的那些事件,用 Go 来做很适合,例如解决日志、数据打包、虚拟机解决、文件系统等。
- 分布式系统,数据库代理器等。
- 网络编程,这一块目前利用最广,包含 Web 利用、API 利用、下载利用。
- 内存数据库,前一段时间 google 开发的 groupcache,couchbase 的局部组建。
- 云平台,目前国外很多云平台在采纳 Go 开发,CloudFoundy 的局部组建,前 VMare 的技术总监本人进去搞的 apcera 云平台。
- 游戏服务端的开发。
总体来说,所面临的业务要求高并发、性能要求强、解决麻利等个性,都能够首先思考用 Go 来做。
编程标准
命名标准
包命名
放弃 package 的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和规范库不要抵触。包名应该为小写单词,不要应用下划线或者混合大小写。
文件命名
- 尽量采取有意义的文件名,简短,有意义,应该为小写单词,应用下划线分隔各个单词。
- 非单元测试文件不要以_test 结尾,go 编译器默认 x_test.go 为单元测试文件,不会进行编译。
变量命名
- 采纳驼峰法,通过首字母大小写来管制是否包外可见。
- 非凡名词的首字母缩写须要依照标准来,例如 URLProxy 或者 urlProxy 不要命名为 UrlProxy。
接口命名
- 单个函数的接口名以 ”er” 作为后缀,例如
type Reader interface {…}
- 两个函数的接口名综合两个函数名,例如
type WriteFlusher interface {…}
- 三个以上函数的接口名,相似于构造体名,例如
type Car interface {…}
代码格式化
举荐应用 gofmt, goimports
正文
多写要害函数的正文,活用 //TODO
,//FIXME
包援用
- 包引入了三种类型的包:规范库包、程序外部包、第三方包,请按这种程序每局部预留一行空行,较为清晰。
- 在我的项目中不要应用相对路径引入包,应用绝对路径引入包
- 不要应用 . 来省略包名援用
其余标准
- receiver 命名最多 2 个字母,不能应用 me 或者 self 或者 this,例如
func (c *Client) GetUserName() string
- 每行代码长度最好不超过 80 个字符,如果超过倡议换行
- 函数返回值采纳返回 ” 指针 ” 类型而不是返回 ” 值 ” 类型 (举荐)
- 没十分必要不能 panic,过程开始的处理函数能够 panic
- 任何一个 goroutine 都应该有 recover 来爱护程序不会因为 panic 而 crash,因为任何一个 goroutine 如果抛 panic 但没有 recover 整个程序会 crash
技术文章继续更新,请大家多多关注呀~~
参考资料
《Go 语言实战》书籍