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:
        //
}
上一篇下一篇

猜你喜欢

热点阅读