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

go 语言 uint64 和 uint32 的问题

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

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

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

    3 回复  |  直到 2016-07-06 14:49:04 +08:00
        1
    rrfeng   2016-07-04 22:54:16 +08:00
    和其他语言有什么不同吗?难道不就是个类型转换的问题?
        2
    Valyrian   2016-07-05 02:45:41 +08:00 via iPhone
    可以强行转 a = uint32(b)
    (还是 a = b.unit32 …忘了)
        3
    zzlyzq   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 的功能。

    目前正在验证。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1709 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 18ms · UTC 05:21 · PVG 13:21 · LAX 22:21 · JFK 01:21
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1