The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
echooo0

关于 golang 的类型转换

  •  
  •   echooo0 · Jul 23, 2020 · 3147 views
    This topic created in 2177 days ago, the information mentioned may be changed or developed.

    接触 golang 不久,感觉这个语法用起来跟其他语言相比麻烦不少。。。。

    使用 sync.map 存储 slice 切片的数据,代码如下

    curSliceI, ok := syncMap.Load(curKey)
    
    curSlice:= curSliceI.([]int)
    
    curSlice:= append(curSlice, curId) 
    

    golang 官方 sync.map 的 Load 方法返回的是两个参数,curSliceI 是 interface 类型,ok 是 bool 类型代表是否成功

    这样的话还要多写一行来做类型转换来拿到 value,有没有啥方法可以简写成一行直接拿值,做类型转换的。。。。

    而且这个 interface 类型的 curSliceI, 如果为空的话,做类型转换还会 panic 报错,还要像下面这样来再

    做一次判断,有没有啥简便的写法么?

    curSlice, ok := curSliceI.([]int)
    if !ok {
       fmt.Println("It's not ok for type")
       return
    }
    
    10 replies    2020-07-24 10:43:40 +08:00
    MrTreasure
        1
    MrTreasure  
       Jul 23, 2020
    因为没有泛型,没有通用容器,后面加上泛型就不会再自己转换了
    echooo0
        2
    echooo0  
    OP
       Jul 23, 2020
    @MrTreasure 看了下泛型的意义写的还挺好的 https://www.jianshu.com/p/5179ede4c4cf ,

    现在 go 是用 interface 这种非侵入式的方式,还是需要手动去转换类型,对于习惯了其他语言的人估计一时有点难以适应。。。

    不过听说 go2 泛型要出来了
    neoblackcap
        3
    neoblackcap  
       Jul 23, 2020
    没有,要不你写一个函数封装一下?
    bruce0
        4
    bruce0  
       Jul 23, 2020
    没有泛型,现在只能用 interface 这个,通过强转来搞
    kidtest
        5
    kidtest  
       Jul 23, 2020
    感觉用 map + RWMutex 方便点,不需要做 type assert
    ViggoSite
        6
    ViggoSite  
       Jul 23, 2020
    从来没用过这个 syncMap,使用场景是啥 (⊙ˍ⊙)
    2kCS5c0b0ITXE5k2
        7
    2kCS5c0b0ITXE5k2  
       Jul 23, 2020
    WaldenHorizon
        8
    WaldenHorizon  
       Jul 23, 2020
    @ViggoSite 普通 map 在多线程同时读写时会报错,只读没事
    ViggoSite
        9
    ViggoSite  
       Jul 23, 2020
    @ViggoSite 噢,感谢解答,,不够我个人连 map 好像都很少用 ( ̄ m  ̄)
    linvon
        10
    linvon  
       Jul 24, 2020
    建议还是 map 加锁吧,syncMap 这种黑科技用起来麻烦性能也不如自己加锁
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5715 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 03:36 · PVG 11:36 · LAX 20:36 · JFK 23:36
    ♥ Do have faith in what you're doing.