文章目录
1、配置环境变量
-
下载(尽量下载压缩包的zip):https://golang.google.cn/dl/
-
配置GOROOT,值为go安装路径
-
配置GOPATH:值为你项目或者练习项目的路径,自己创建,这里我是在golang安装目录在新建一个空的olangWorkSpace文件下。
-
配置path
-
测试,在命令行在输入go env 进行测试GOROOT和GOPATH配置的对不对
2、Hello
package main
import "fmt"
func main() {
fmt.Println("hello")
}
- 编译+运行:go run xxx.go
- 先编译再运行:
- go build xxx.go
- ./xxx.go
3、声明变量
1. var a int (有默认值,默认值为0)
2. var a int = 100
3. var a = 100
4. a := 100
5. var a, b int = 1, 2
6. var(
a int = 100
b string = "b"
)
注:单个变量声明中,1、2、3是可以声明全局变量,4不可以。
4、const和iota
-
定义常量:const a := 1
-
iota使用在const枚举中
const ( //可以在const()添加一个关键字iota,每行的iota都会累加1,第一行的iota的默认值是0 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 ll 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 )
5、函数和导包
1.函数
1. func f1(a int, b int) int {
return a+b
}
2. func f2(a int, b int) (int, int) {
return a, b
}
3. func f3(a int, b int) (r1 int, r2 int) {
r1 = a * 10
r2 = b * 10
return
}
4. func f4(a int, b int) (r1, r2 int) {
r1 = a * 10
r2 = b * 10
return
}
go执行流程
2.导包
- import “fmt”:直接用fmt去调用方法。
- import f “fmt”:给fmt包区别,通过别名调用方法。
- import _“fmt”:匿名,无法使用当前包的方法,但是会执行当前包内部的init()方法。
- import .“fmt”:将fmt的全部方法全部导入到本包中,直接通过方法名就可以使用理:Println()。不推荐使用
6、指针
指针存的是地址,并且可以直接修改地址里的值,java改引用类型的值并不是改地址里的值,而且赋值另外一个值的地址。
-
&是传地址、*是取地址
-
使用
package main func main() { var a int = 1 var b int = 2 swap(&a, &b) println(a) println(b) } func swap(pa *int, pb *int) { var temp int = *pa *pa = *pb *pb = temp }
-
二级指针
var a int = 1 var p = &a var pp **int = &p
7、defer关键字
-
defer是最后执行的,有点像java的final
defer println("1") println("2") //结果为2 1
-
多个defer是以压栈的形式执行的
defer println("1") defer println("2")