Golang的优

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方面的人,上手容易