go 杂记

作者: 阳丶小光 | 来源:发表于2019-07-23 19:33 被阅读0次

    1. string和buffer

    当需要对一个字符串进行频繁的操作时,谨记在go语言中字符串是不可变的(类似java和c#)。使用诸如a += b形式连接字符串效率低下,尤其在一个循环内部使用这种形式。这会导致大量的内存开销和拷贝。应该使用一个字符数组代替字符串,将字符串内容写入一个缓存中。 例如以下的代码示例:

    var b bytes.Buffer
    ...
    for condition {
        b.WriteString(str) // 将字符串str写入缓存buffer
    }
    return b.String()
    

    注意:由于编译优化和依赖于使用缓存操作的字符串大小,当循环次数大于15时,效率才会更佳。

    2.何时使用new()和make()

    • 切片、映射和通道,使用make
    • 数组、结构体和所有的值类型,使用new

    3.多重循环退出

    found := false
    Found: for row := range arr2Dim {
        for column := range arr2Dim[row] {
            if arr2Dim[row][column] == V{
                found = true
                break Found
            }
        }
    }
    

    4.简单的超时模板

    timeout := make(chan bool, 1)
    go func() {
        time.Sleep(1e9) // one second  
        timeout <- true
    }()
    select {
        case <-ch:
        // a read from ch has occurred
        case <-timeout:
        // the read from ch has timed out
    }
    

    相关文章

      网友评论

          本文标题:go 杂记

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