golang语法速览
2017-10-13 本文已影响0人
sladeliu
关键字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
内建常量:
true false iota nil
内建类型:
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
内建函数:
make len cap new append copy close delete
complex real imag
panic recover
声明
var i = 1000
func main() {}
const PI = 3.141592653589793
type Model struct {}
变量
var 名字 类型 = 表达式
指针
取地址 p := &x
解引用 *p = 2
一些数据类型
array
// 字面量
array := [5]int{1,2,3,4,5}
slice
var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// 基于数组
var mySlice1 []int = myArray[:5]
// 使用make
mySlice2 := make([]int, 5, 10)
// 字面量
mySlice3 := []int{1, 2, 3, 4, 5}
i, v := range []mySlice1
map
var myMap map[keyType]valueType
make(map[keyType]valueType, 100)
myMap = map[keyType]valueTyep {}
new
new(类型) 返回该类型的一个指针
p := new(int)
```go
# 生命周期
包级的变量和程序的生命周期一致
局部变量不再被引用时自动销毁
# 流程控制
## if else
```go
func example(x int) int {
if x == 0 {
return 5
} else {
return x }
}
switch case default fallthrough
switch i {
case 0:
fmt.Printf("0")
case 1:
fmt.Printf("1")
case 2:
fallthrough
case 3:
fmt.Printf("3")
case 4, 5, 6:
fmt.Printf("4, 5, 6")
default:
fmt.Printf("Default")
}
for break continue
普通for循环
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
a := []int{1, 2, 3, 4, 5, 6}
for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 {
a[i], a[j] = a[j], a[i]
}
模仿while(go没有while、do-while)
sum := 0
for {
sum++
if sum > 100 {
break
}
}
break跳转
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break JLoop
}
fmt.Println(i)
}
}
JLoop:
// ...
goto
接口
interface Reader {
read()
}
函数
defer func1()
defer func2()
先进后出,所以先执行func2,后执行func1
goroutine
启动一个goroutine(go的并发体)
go f()
创建一个channel(go的通信机制)
ch = make(chan int)
ch = make(chan int, 3) // 带缓冲
接收
x = <-ch // 从ch接收数据,并保存在x
发送
ch <- x // 将x的内容发送到ch
关闭
close(ch)
多路复用
select {
case <-ch1:
//
case x := <-ch2:
// fmt.Println(x)
case ch3 <- y:
//
default:
//
}