golang使用注意事项

1.可以给类型取别名,但是该类型和别名是两个不同的类型:

  type myInt int

2.go支持可变参数:args...

  0个或多个参数:func sum(args... int) sum int {}

  1个或多个参数:func sum(n int, args... int) sum int {}

3.init()函数是初始化函数,如果有全局变量,执行顺序为:全局变量——> init()——>main()

4.匿名函数:

    res := func(n1 int, n2 int) int {
        return n1 + n2
    }(10, 20)
    fmt.Println(res)
    a := func(n1 int, n2 int) int {
        return n1 - n2
    }
    fmt.Println(a(10, 5))

5.全局匿名函数:

var(
     Fun1 = func(n1 int, n2 int) int {
        return n1 * n2
    }
 )

func main() {
    b := Fun1(10, 5)
    fmt.Println(b)
}

 6.闭包:返回的是一个匿名函数,但是这个匿名函数引用到函数外的n,因此这个匿名函数就和n形成一个整体,构成闭包。

func makeSuffix(suffix string) func (string) string {
    return func (name string) string {
        if !strings.HasSuffix(name, suffix) {
            return name + suffix
        }
    return name
    }
}

7.defer:当执行到defer时,暂时不执行,会将defer后面的语句压入到独立的栈(defer栈),当函数执行完毕后,再从defer栈,按照先入后出的方式出栈:

func sum1(n1 int, n2 int) int {
    defer fmt.Println("ok1 n1-", n1)
    defer fmt.Println("ok2 n2-", n2)

    res := n1 + n2
    fmt.Println("ok3 res-", res)
    return res
}

8.字符串遍历,同时处理有中文的问题 r := []rune(str)

str := "hello北京"
    r := []rune(str)
    for i := 1; i < len(r); i++ {
        fmt.Printf("字符=%c\n", r[i])
    }

 9.使用defer+recover来处理错误

func test(){
    defer func() {
        err := recover()
        if err != nil {
            fmt.Println("err=", err)
        }
    }()
    num1 := 10
    num2 := 0
    res := num1 / num2
    fmt.Println("res=", res)
}

func main() {
    test()
}

10.自定义错误:errors.New和panic内置函数

  1)errors.New("错误说明"), 会返回一个error类型的值,表示一个错误

  2)panic内置函数,接收一个interface{}类型的值(也就是 任何值了)作为参数,可以接收error类型的变量,输出错误信息,并退出程序

func readConf(name string) (err error) {
    if name == "config.ini" {
        return nil
    } else {
        return errors.New("读取文件错误...")
    }
}

func test() {
    err := readConf("config.ini")
    if err != nil {
        panic(err)
    }
    fmt.Println("test()继续执行...")
}

func main() {
    test()
}

 

posted @ 2019-10-31 00:03  顽强的allin  阅读(542)  评论(0编辑  收藏  举报