go 语言 uint64 和 uint32 的问题

2016-07-04 21:51:25 +08:00
 zzlyzq

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

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

5496 次点击
所在节点    问与答
4 条回复
rrfeng
2016-07-04 22:54:16 +08:00
和其他语言有什么不同吗?难道不就是个类型转换的问题?
Valyrian
2016-07-05 02:45:41 +08:00
可以强行转 a = uint32(b)
(还是 a = b.unit32 …忘了)
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 的功能。

目前正在验证。
tyit
2019-03-27 22:08:19 +08:00
@zzlyzq 楼主验证成功了嘛?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/290255

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX