• Golang常见小细节总结(1)


    本系列不定期更新,用于记录平常开发过程中出现的一些小问题

    Array 类型的值作为函数参数




    可以理解slice是对array的一个视图,底层还是array所以会被修改

    通过map的ok来确定是否存在key

    if _, ok := maps["xxx"]; !ok {
    ....
    }

    修改一个string中的字符

    注意使用rune数组来保证汉字的字节问题
    func main() {
    str := "test"
    strArr := []rune(str)
    strArr[0] = '我'
    fmt.Println(string(strArr))
    }

    使用sync.WaitGroup注意


    在外部调用的Add是操作外部的sync.WaitGroup,但是test方法内部的Done操作的是内部的sync.WaitGroup,两者的sync.WaitGroup是不同的。在这里需要改为引用传递,而不要传值拷贝。

     

     

    channel会发生panic的情况

    close已经关闭的channel
    向已经关闭的channel发送消息
    在一开始使用channel的时候很容易忽视这个问题,而且这个问题隐藏的很好,所以使用channel一定要注意,因为出现panic会导致程序直接崩溃

    for中使用闭包

    这个问题也很容易犯,但是因为遇到的人多,所以在这里还是提一下

    应该写为

    如果你不懂问题在哪,你赶紧敲代码试试看

    不要直接调用map获取到对象的方法

    type User struct {
    name string
    }

    func (user *User) print() {
    fmt.Println("name: ", user.name)
    }

    func main() {
    user := &User{
    name: "小明",
    }
    m := make(map[string]User)
    m["xiaoming"] = *user
    m["xiaoming"].print()
    }

    这个会出现异常,因为map在获取的时候是不确定的,需要用一个变量去接一下

  • 相关阅读:
    Rufus 真神器也
    i2c-tools命令使用 示例
    常用行棋手法
    Windows系统如何更改任务栏缩略图的大小
    微擎 钻石投票
    发卡系统
    支付宝当面付
    django 多个admin 展示不同model 定制
    Django Admin:如何清除“最近的动作”面板
    tomcat正常运行一段时间后,突然访问不了项目了, 其它根页面报404错误
  • 原文地址:https://www.cnblogs.com/linkstar/p/10880971.html
Copyright © 2020-2023  润新知