登录
首页 >  Golang >  Go问答

将有符号值读入无符号类型

来源:stackoverflow

时间:2024-04-30 09:06:37 184浏览 收藏

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)

我确信可以优化转换,但不确定如何优化。

到这里,我们也就讲完了《将有符号值读入无符号类型》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>