zzlyzq
V2EX  ›  问与答

go 语言 uint64 和 uint32 的问题

  •  
  •   zzlyzq · Jul 4, 2016 · 5982 views
    This topic created in 3606 days ago, the information mentioned may be changed or developed.

    各位亲, 我在修改 open-falcon 中 swcollection 插件支持 网卡丢包的过程中, 遇到了一个问题, 一般网卡流量,包等指标都是 uint64 的,可是这个 Discads 指标却是 uint32 , 并且报了如下错误, 求助~

    cannot assign uint64 to ifStats.IfInDiscards (type uint32) in multiple assignment

    4 replies    2019-03-27 22:08:19 +08:00
    rrfeng
        1
    rrfeng  
       Jul 4, 2016
    和其他语言有什么不同吗?难道不就是个类型转换的问题?
    Valyrian
        2
    Valyrian  
       Jul 5, 2016 via iPhone
    可以强行转 a = uint32(b)
    (还是 a = b.unit32 …忘了)
    zzlyzq
        3
    zzlyzq  
    OP
       Jul 6, 2016
    感谢大家提供的线索。

    无论如何,我是看不懂 go 语言的。 经过一阵折腾,最后解决了:
    这是 github.com/gaochao1/sw/ifstat_snmpwalk.go 中的一行。

    ifStats.IfInDiscards, _ = strconv.Atoi(ifInDiscardsMap[ifIndex]) // 关键在 Atoi , 因为 gosnmp 在识别 Discards 和 Errors 的时候,识别成了 Counter32 ,在 go 看来就是 int ,而不像网卡流量, 是 Counter64 , go 识别成 uint64 。

    目前目标已经达成, 就是用 swcollection 去完成采集网络设备 Discards 和 Errors 的功能。

    目前正在验证。
    tyit
        4
    tyit  
       Mar 27, 2019 via iPhone
    @zzlyzq 楼主验证成功了嘛?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1265 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 17:38 · PVG 01:38 · LAX 10:38 · JFK 13:38
    ♥ Do have faith in what you're doing.