go 笔记 2

package main

import (
    "fmt"
    "strconv"
    // _ "net"
    // _ "os"
    // "time"
)

//var now = time.Now()
const (
    CD_TIME = 1000
    MAX_NUM = 20
)

var (
    a int = 12
    b int = 234
)

func main() {
    //fmt.Println("main:", int(time.Now().Sub(now).Seconds()))
    fmt.Println(a)
    fmt.Println(b)
    var c int = 123456789
    d := string(c)
    fmt.Println(d)
    fmt.Println(CD_TIME + MAX_NUM)
    fmt.Println(MAX_NUM)
    fmt.Println("====================\n")
    var i int = 3
    for {
        i++
        if i > 10 {
            break
        }
        fmt.Println(i)

    }
    /**
     * switch score 中的变量尅不要,加在后面的 case之后,
     *  但是如果存在这个变量,case 后面就不可可以在加条件,只能是常量
     *  switch 不用显示调用break终止,匹配到以后会自动终止掉
     *  如果不想匹配到后终止要继续执行需要调用fallthrough
     *  如果 写成 switch score:=1 这种 score变量只在switch体内有效
     */
    fmt.Println("=========over===========\n")
    var score int = 5
    switch {
    case score > 1:
        fmt.Println("a>1")
        fallthrough
    case score > 5:
        fmt.Println("a>5")
        fallthrough
    case score > 8:
        fmt.Println("a>8")
        fallthrough
    default:
        fmt.Println("无基准条件")
    }

    fmt.Println("=======================\n")
    switch score {
    case 1:
        fmt.Println("a>1")
    case 5:
        fmt.Println("a>5")
    case 8:
        fmt.Println("a>8")
    default:
        fmt.Println("无基准条件")
    }
    fmt.Println("==========================================\n")

    /**
     * continue,break 终端的标签必须在调用的代码之前
     * goto 调用的代码必须在调用之后,否则死循环标签和go代码位置那段代码了
     * goto 为调整程序执行到指定位置
     * @type {[type]}
     */
BREAK_NOTICE_1:
    for j := 0; j < 10; j++ {
        if j > 3 {
            continue
        }
        for m := j; m < 10; m++ {
            if m > 5 && j > 5 {
                break BREAK_NOTICE_1
            } else {
                fmt.Println("循环:" + strconv.Itoa(j) + "=" + strconv.Itoa(m))
            }

        }
    }
    fmt.Println("结束\n")
    fmt.Println("==========================================\n")
    /**
     *数组
     *定义的格式 var <var_name> = [length] <type> <value>
     *
     */
    var arr = [3]int{0: 12, 1: 13, 2: 15}
    var arr2 = [...]int{1, 2, 3}
    fmt.Println(arr)
    fmt.Println(arr2)
    //数组指针-和数组的区别是前面有个区地址符号
    var arrp *[3]int = &arr
    fmt.Println(arrp)
    //指针数组的指针
    x1, y1 := 1, 2
    var xypoint = [...]*int{&x1, &y1}
    fmt.Println(xypoint)
    //用new创建的数组也是返回的指向数组指针
    arr3 := new([10]int)
    //可以通过数组指针或者数组变量加[]键对数组指定坐标赋值
    arr3[2] = 1000
    fmt.Println(arr3)
    fmt.Println("==========================================\n")
    //数组可以用==和!=但是不可以用其它操作符号,并且不同的长度数组是不可以比较的,长度是数组的一个属性(类似类型),所以不可以比较
    var xyarr1 = [2]int{1, 2}
    var xyarr2 = [2]int{1, 1}

    fmt.Println(xyarr1 == xyarr2)
    fmt.Println(xyarr1 != xyarr2)
    //多维数组
    arr4 := [2][2]int{{1, 1}, {2, 2}}
    fmt.Println(arr4)
    arr4[0][1] = 999
    fmt.Println(arr4)
}

// func init() {
//     fmt.Println("init:", int(time.Now().Sub(now).Seconds()))
//     w := make(chan bool)
//     go func() {
//         time.Sleep(time.Second * 3)
//         w <- true
//     }()
//     <-w
// }