当前位置: > > > > 将有符号值读入无符号类型
将有符号值读入无符号类型
来源:stackoverflow
2024-04-30 09:06:37
0浏览
收藏
Golang不知道大家是否熟悉?今天我将给大家介绍《将有符号值读入无符号类型》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!
问题内容
在 go 中,可以通过执行以下操作强制语言将其解释为无符号值:
var x int32 var y uint32 x = -1 y = uint32(x)
这按预期工作,y 取最大的无符号 int32 值。但是,如果我有一个像这样的 json 字符串:
注意:值 -20 序列化为字符串还是数字似乎并不重要
jsonStr := `{"RandomNumber: -20}
type DummyJson struct {
RandomNumber uint32
}
rd := &DummyJson{}
err := json.Unmarshal([]byte(jsonStr), &rd)
fmt.Println(err)
在这里,它抱怨值 -20 无法被解组到 randomnumber 字段中。我怎样才能说服go将有符号的值推入无符号的类型?
p.s:这样做的动机既漫长又复杂。因此,请假设这个问题背后有一个合理的理由。
正确答案
使用 unmarshaljson 方法创建自定义类型。
type dummyjson struct {
randomnumber custominttype
}
type custominttype uint32
func (ct *custominttype) unmarshaljson(b []byte) error {
var x int32
var y uint32
s := string(b)
if i, err := strconv.atoi(s); err == nil {
x = int32(i)
y = uint32(x)
*ct = custominttype(y)
} else {
return err
}
return nil
}
jsonStr := `{"RandomNumber": -20}`
var rd DummyJson
err := json.Unmarshal([]byte(jsonStr), &rd)
fmt.Println(rd.RandomNumber, err)
我确信可以优化转换,但不确定如何优化。
到这里,我们也就讲完了《将有符号值读入无符号类型》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注米云公众号,带你了解更多关于的知识点!
