2015-10-16 37 views
-2

我有一個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} 

有人可以給我一個提示,爲什麼不工作?

+0

@JimB:你選擇一個重複的是窮人。它不包含對標籤的解釋。 – peterSO

+0

@peterSO:同意。這得到如此頻繁的詢問,我現在很難找到好的 – JimB

回答

1

所有其他字段都是未導出的(就像其他語言中的私人字樣),解組器無法訪問它們。這是由字段名稱中的第一個字母的情況指定的,需要爲大寫。

作爲參考,下面是一個使用結構中的字段名稱與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) 

https://play.golang.org/p/iJqaXQY7Ch

+1

但我所需要的web服務消耗,對象以m小寫開頭。我如何消耗他? –

+0

我只是將m更換爲上部並正常工作。非常感謝 –

+1

@PedoSouza另一種處理方式是使用json註釋,比如'json:「mTheActualNameCouldBeAnything」' – evanmcdonnal