为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中编组多维数组

在 Go 中编组多维数组

Go
烙印99 2022-10-04 19:41:08
下面的代码,但简短的版本是我在结构中有一个多维数组(切片)。我试图创建一个可以转储任何结构的方法,它会写入文件,但内部数组是...好吧,我不确定说实话。以下是较大代码库的简洁版本,但需要说明重点。我对Go比较陌生,所以也许它是关于类型转换的东西,我只是不知道。uint8package mainimport (    "encoding/json"    "fmt"    "io/ioutil")type MyStruct struct {    MyArray [][]uint8 `json:"arr"`    Name    string    `json:"name"`}func CreateMyStruct(name string, size uint16, fill uint8) *MyStruct {    var m [][]uint8    var i, j uint16    for i = 0; i < size; i++ {        sl := []uint8{}        for j = 0; j < size; j++ {            sl = append(sl, fill)        }        m = append(m, sl)    }    return &MyStruct{        MyArray: m,        Name:    name,    }}func main() {    myStruct := CreateMyStruct("bobby", 4, 1)    fmt.Printf("%+v\n", myStruct)    str, _ := json.Marshal(myStruct)    fmt.Printf("%+v\n", str)    ioutil.WriteFile("my.json", str, 0644)}输出为:$ go run test.go&{MyArray:[[1 1 1 1] [1 1 1 1] [1 1 1 1] [1 1 1 1]] Name:bobby}[123 34 97 114 114 34 58 91 34 65 81 69 66 65 81 61 61 34 44 34 65 81 69 66 65 81 61 61 34 44 34 65 81 69 66 65 81 61 61 34 44 34 65 81 69 66 65 81 61 61 34 93 44 34 110 97 109 101 34 58 34 98 111 98 98 121 34 125]$ cat my.json{"arr":["AQEBAQ==","AQEBAQ==","AQEBAQ==","AQEBAQ=="],"name":"bobby"}显然,我期待这样的东西:[[1,1,1,1]] // etc
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

在Golang中是一个别名,并编码为base64编码的字符串(如您所见):[]byte[]uint8json.Marshall[]byte

https://pkg.go.dev/encoding/json#Marshal

我怀疑解决方案是编写自己的 JSON 编组程序来根据需要生成 JSON。

自定义编组器的示例包含在包的文档中:

https://pkg.go.dev/encoding/json#example-package-CustomMarshalJSON

这里: https://play.golang.org/p/N2K8QfmPNnc

在我的手机上繁琐地打字,所以很抱歉,这是黑客


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号