美文网首页
golang语法速览

golang语法速览

作者: sladeliu | 来源:发表于2017-10-13 13:04 被阅读0次

    关键字

    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:
            //
    }
    

    相关文章

      网友评论

          本文标题:golang语法速览

          本文链接:https://www.haomeiwen.com/subject/xrdzyxtx.html