init 函数
每个包可以有一个或多个 init 函数,会在包初次被导入时执行,同一个包的多个init函数执行顺序不确定。如果在包里面导入了其它包,则会先执行导入的init,即:级联调用;所有init执行完成之后,才执行main
默认自动初始化
在Golang中存在零值,每个对象被创建的时候,默认都是其对应的零值;如:string 为 "" 、指针为 nil 、init 为 0 等;这可以保存未初始化使用时,导致的一些问题
原生支持UTF-8
GO所有涉及到字符串的包中,都对UTF-8提供了支持
缓过组合实现继承
在OPP中,一般语言实现继承时,可能会导致一些无用的功能,也继承过来了;在Go中通过组合实现继承,
Go程(goroutine)与信道(Channel)
Go的并发采用CSP模型,即:通过通信来共享内存,而非共享内存来通信;goroutine会有执行完成之后自动销毁;Goroutine 是一种上高于线程的抽象,所以它的使用就更加轻量与方便。当多个 goroutine 通信时,就可以通过 channel 来进行
自动GC
Go提供自动GC,不在区分对象是在栈{stack}还是堆{heap}
接口(Interface)
Go的接口是非侵入式的,即在实现接口时,并不需要明确的指定。只要对象定义某个interface声明的所有方法,就表示此对象实现了这个接口。
对于一个模块来说,只有模块使用者最清楚自己,它需要使用由 被使用模块提供的哪个方法,即: interface 应该由使用者自己定义。而被使用者在实现时,并不知道自己会被哪个模块使用,所以其只需要实现自己就好了,不需要关心调用者需要哪些,即:接口定义的粒度
interface 由使用者按需定义,而不是事前规划
先实现后抽象,搭配结构嵌入,降低耦合度
Go命令
编写Go程序时,只需要编写代码,不需要编写其它任何配置文件之类额外的东西
Go的命令簇可以方便的从仓库拉代码、编译、执行、测试等功能
自动类型推导
:= 自动类型推荐的符号
i := 0 # 自动会推导出类型为 int
强制编码风格规范
go fmt 命令格式化代码风格,统一风格,也方便阅读
单元测试与性能测试工具
go test 就可以执行相应的测试
testing.T 为单元测试
testing.B 为性能测试
云平台支持
简化的指针
指针不支持运算功能,只保留了“引用 & 解引用”功能
简单的语法、入门快
C家族的成员,有C方面的人,上手容易