在 Go 中编组多维数组

下面的代码,但简短的版本是我在结构中有一个多维数组(切片)。我试图创建一个可以转储任何结构的方法,它会写入文件,但内部数组是...好吧,我不确定说实话。以下是较大代码库的简洁版本,但需要说明重点。我对Go比较陌生,所以也许它是关于类型转换的东西,我只是不知道。uint8


package main


import (

    "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


烙印99
浏览 114回答 1
1回答

拉丁的传说

在Golang中是一个别名,并编码为base64编码的字符串(如您所见):[]byte[]uint8json.Marshall[]bytehttps://pkg.go.dev/encoding/json#Marshal我怀疑解决方案是编写自己的 JSON 编组程序来根据需要生成 JSON。自定义编组器的示例包含在包的文档中:https://pkg.go.dev/encoding/json#example-package-CustomMarshalJSON这里:&nbsp;https://play.golang.org/p/N2K8QfmPNnc在我的手机上繁琐地打字,所以很抱歉,这是黑客
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go