教程推荐:
1.Go 语言教程
2.Go语言圣经(中文版)
3.Go语言高级编程
4.Go语言中文网
5.8小时转职Golang工程师(如果你想低成本学习Go语言)
1 、import导包
<1> import导包路径问题与init方法调用流程
lib1.go:
package lib1
import "fmt"
// Lib1Test 当前lib1包提供的API
func Lib1Test() {
fmt.Println("lib1Test()...")
}
func init() {
fmt.Println("lib1. init() ...")
}
lib2.go:
package lib2
import "fmt"
// Lib2Test 当前lib2包提供的API
func Lib2Test() {
fmt.Println("lib2Test()...")
}
func init() {
fmt.Println("lib2. init() ...")
}
main.go:
package main
import (
"5-init/lib1"
"5-init/lib2"
"fmt"
)
func main() {
fmt.Println("main")
lib1.Lib1Test()
lib2.Lib2Test()
}
<2> 函数名首字母大小写问题
函数名首字母大写则可以在外部调用,小写则不可以
//可以在外部调用
func LibTest() {
fmt.Println("libTest()...")
}
//不可以在外部调用
func libTest() {
fmt.Println("libTest()...")
}
<3> import匿名及别名导包方式
正常导包若不使用会报错,若则时想使用包的init
方法则可以设置匿名及别名
【1】设置匿名
package main
import (
_ "5-init/lib1"
"5-init/lib2"
"fmt"
)
func main() {
fmt.Println("main")
//lib1.Lib1Test()
lib2.Lib2Test()
}
【2】设置别名
package main
import (
mylib "5-init/lib1"
"5-init/lib2"
"fmt"
)
//E:/Project/GO/GoLangStudy/5-init/lib1
func main() {
fmt.Println("main")
mylib.Lib1Test()
lib2.Lib2Test()
}
【3】直接使用.
package main
import (
. "5-init/lib1"
"5-init/lib2"
"fmt"
)
func main() {
fmt.Println("main")
Lib1Test()
lib2.Lib2Test()
}
2、Golang中的指针速通
<1> &
:取地址
package main
import "fmt"
func main() {
a := 12
fmt.Println(&a)
}
<2> *
取值所对应的地址的值
package main
import "fmt"
func main() {
a := 12
ip := &a
fmt.Println("a的址址 = &a = ip :",ip)
fmt.Println("a的值 = a = *ip :",*ip)
}
<3> 应用
package main
func changValue(p *int) {
*p = 99
}
func main() {
a := 12
changValue(&a)
print("a: ",a)
}
3、 defer关键字
<1> defer定义语句
package main
import "fmt"
func main() {
//写入defer关键字,在当前函数准备结束前执行
defer fmt.Println("main end1")
defer fmt.Println("main end2")
fmt.Println("main::hello go 1")
fmt.Println("main::hello go 2")
}
栈式,先defer定义的后执行
<2> defer定义函数
package main
import "fmt"
func printData() {
fmt.Println("printData end")
}
func main() {
//写入defer关键字,在当前函数准备结束前执行
defer printData()
fmt.Println("main::hello go 1")
fmt.Println("main::hello go 2")
}
<3> return 先于defer 执行
package main
import "fmt"
func deferPrint() {
fmt.Println("defet")
}
func deferReturn