猿问

结构体没有被完全编组

我有一个结构体,我需要编组来使用 web 服务,但是在我的测试中,我的 Marshal 函数只编码了一个字段:


type DataRows []struct {

    mData interface{}

}


type DataColumns []struct {

    mColumnName      string

    mColumnType      int

    mColumnPrecision int

    mColumnScale     int

}

type DataTables []struct {

    mDataColumns DataColumns

    mDataRows    DataRows

    mIndex       int

}


type CFFDataSet struct {

    mDataTables DataTables

    mUser       string

    DBServer    int

}


func main() {

    ds := CFFDataSet{

        mDataTables: DataTables{{

            mDataColumns: DataColumns{{

                mColumnName:      "Test",

                mColumnType:      1,

                mColumnPrecision: 1,

                mColumnScale:     1,

            }},

            mDataRows: DataRows{{

                mData: "Test",

            }},

            mIndex: 0,

        }},

        mUser:    "Teste",

        DBServer: 2,

    }


    marchaled, _ := json.Marshal(ds)

    fmt.Println(string(marchaled))

}

回来了


$ go run getrest.go

{"DBServer":2}

有人可以给我一个提示,为什么这不起作用?


慕妹3146593
浏览 167回答 1
1回答

慕运维8079593

所有其他字段都未导出(如其他语言中的私有),解组器无法访问它们。这是由字段名称中的第一个字母的大小写指定的,需要大写。作为参考,这里有一个示例,在您的结构中使用与 json 的字段名称不同的字段名称;var jsonBlob = []byte(`[    {"Name": "Platypus", "Purchase": "Monotremata"},    {"Name": "Quoll",    "Purchase": "Dasyuromorphia"}]`)type Animal struct {    Name  string    Order string `json:"Purchase"`}var animals []Animalerr := json.Unmarshal(jsonBlob, &animals)if err != nil {    fmt.Println("error:", err)}fmt.Printf("%+v", animals)https://play.golang.org/p/iJqaXQY7Ch
随时随地看视频慕课网APP

相关分类

Go
我要回答