Struct 结构尚未完全封送

Struct 结构尚未完全封送,struct,go,Struct,Go,我有一个使用Web服务需要封送的结构,但在我的测试中,封送函数只编码一个字段: type DataRows []struct { mData interface{} } type DataColumns []struct { mColumnName string mColumnType int mColumnPrecision int mColumnScale int } type DataTables []struct {

我有一个使用Web服务需要封送的结构,但在我的测试中,封送函数只编码一个字段:

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}

有人能给我一个提示吗?为什么不工作?

您的所有其他字段都未报告(如其他语言中的private),解组程序无法访问它们。这是由字段名中第一个字母的大小写指定的,需要大写

作为参考,这里有一个示例,它在结构上使用了一个不同于json字段名的字段名

var jsonBlob = []byte(`[
    {"Name": "Platypus", "Purchase": "Monotremata"},
    {"Name": "Quoll",    "Purchase": "Dasyuromorphia"}
]`)
type Animal struct {
    Name  string
    Order string `json:"Purchase"`
}
var animals []Animal
err := json.Unmarshal(jsonBlob, &animals)
if err != nil {
    fmt.Println("error:", err)
}
fmt.Printf("%+v", animals)

但是我需要使用的Web服务,对象以m小写字母开头。我怎么能吃掉他呢?我只是把我从低到高,工作得很好。谢谢lot@PedoSouza另一种方法是使用json注释,如
json:“mTheActualNameCouldBeAnything”
@evanmcdonnal:在Go中,它们被称为json(结构域)标记,而不是注释。@JimB:您对重复项的选择很差。它不包括标签的解释。@peterSO:同意。这个问题经常被问到,我现在很难找到好的