从事java后端开发8年多,期间也曾零星看过Go语言、Python、Erlang等等,但都未曾认真学习过,恰好公司最近项目需要,之前用Go开发的项目因为同事离职,暂未人来接手,所以老大就找到我和另外一个同事,希望我们俩尽快把Go学起来并把项目维护起,给了两个周的过渡期,说实话,时间真的挺紧的,但是问题不大,闲聊到此,赶紧学起来吧!
静态类型语言:编译的时候检查出来影藏的大多数问题
语言层面的并发:1.天生的基因支持 2.充分的利用多核
强大的标准库: runtime系统调度机制,已经实现高效的垃圾回收机制,丰富的标准库
只有25个关键字,C语言简洁基因,内嵌C语法支持,面相对象特征(封装、集成、多态),跨平台
导入不使用,会报错,需要注释掉,或者在导包前加”_” 例如: _“demo-go-middle/study”
可以给导入的包起一个别名mylib2 “demo-go-middle/study1”
也可以使用”.“ 的方式进行导包,这样在调用接口的时候,就不用加类名,如果两个方法同名且在不同的类中,那么不建议使用”.”的方式
示例代码:
package main
import (
mylib1 "demo-go-middle/study"
. "emo-go-middle/study1"
)
func main() {
mylib1.Lib1Test()
Lib2Test()
}
iota 只能配合const()一起使用,iota只有在const进行累加效果
示例代码:
package main
import "fmt"
// 用const来定义枚举类型
const (
// 可以在const()添加一个关键字 iota,每行的iota都会累加1,第一行的iota的默认值是0
BEIJING = 10 * iota // iota = 0
SHANGHAI // iota = 1
CHONGQING // iota = 2
)
const (
a, b = iota + 1, iota + 2 // iota = 0, a = iota +1, b = iota +2, a = 1, b = 2
c, d // iota = 1, c = iota +1, d = iota +2, c = 2, d = 3
e, f // iota = 2, e = iota +1, f = iota +2, e = 3, f = 4
g, h = iota * 2, iota * 3 // iota = 3, g = iota *2, h = iota *3, g = 6, h = 9
i, k // iota = 4, i = iota *2, k = iota *3, i = 8, k = 12
)
func main() {
// 用const定义常量,可以用来定义枚举类型
const length int = 10
fmt.Println("length =", length)
fmt.Println("======================")
fmt.Println("BEIJING =", BEIJING)
fmt.Println("SHANGHAI =", SHANGHAI)
fmt.Println("CHONGQING =", CHONGQING)
fmt.Println("======================")
fmt.Println("a =", a, ",b=", b)
fmt.Println("c =", c, ",d=", d)
fmt.Println("e =", e, ",f=", f)
fmt.Println("g =", g, ",h=", h)
fmt.Println("i =", i, ",k=", k)
}
一个类中,方法名称需要大写才能让外部调用,对外开放,如果方法名称不首字母大写,那么只能方法内调用 eg: LibTest()
package main
import "fmt"
func changeValue(p int) {
p = 10
}
func main() {
var a int = 1
changeValue(a)
fmt.Println("a = ", a)
}
package main
import "fmt"
func changeValue(p *int) {
*p = 10
}
func main() {
var a int = 1
changeValue(&a)
fmt.Println("a = ", a)
}
*代表指针
&代表内存地址