V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zzlyzq
V2EX  ›  问与答

go 语言 uint64 和 uint32 的问题

  •  
  •   zzlyzq · 2016-07-04 21:51:25 +08:00 · 5496 次点击
    这是一个创建于 3059 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    4 条回复    2019-03-27 22:08:19 +08:00
    rrfeng
        1
    rrfeng  
       2016-07-04 22:54:16 +08:00
    和其他语言有什么不同吗?难道不就是个类型转换的问题?
    Valyrian
        2
    Valyrian  
       2016-07-05 02:45:41 +08:00 via iPhone
    可以强行转 a = uint32(b)
    (还是 a = b.unit32 …忘了)
    zzlyzq
        3
    zzlyzq  
    OP
       2016-07-06 14:49:04 +08:00
    感谢大家提供的线索。

    无论如何,我是看不懂 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  
       2019-03-27 22:08:19 +08:00 via iPhone
    @zzlyzq 楼主验证成功了嘛?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1254 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:26 · PVG 07:26 · LAX 15:26 · JFK 18:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.