這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
在看別人的一些代碼時,聲明結構時有個json:name是做什麼用的?
想知道原因得瞭解下:
在golang中,命名都是推薦都是用駝峰方式,並且在首字母大小寫有特殊的文法含義:包外無法引用。但是由經常需要和其它的系統進行資料互動,例如轉成json格式,儲存到Redis等等。這個時候如果直接用屬性名稱來作為索引值會不符合項目要求。
於是就有了tag,也就是有了json:name或者orm:"size(1000)"也或者json:name orm:"size(1000)"這樣的聲明。
在我們把結構轉成json時 就會以tag裡面的名字出現。
下面這是我在用beego架構的orm聲明的一個結構體
// 評論type Comment struct { Id int64 `json:"id"` Tid int64 `json:"tid"` NickName string `json:"nickName"` Content string `json:"content" orm:"size(1000)"` Created time.Time `json:"created" orm:"index"`}
當我們在控制器中寫api時就可以直接取了
func (this *ApiCommentController) All() { tid := this.Input().Get("tid") // 擷取評論 comments, err := models.GetAllComment(tid) if err != nil { beego.Error(err) } this.Data["json"] = map[string]interface{}{ "code": 0, "message": "擷取成功", "date": comments, } this.ServeJSON() return}
這時提供者返回的資料就是以tag裡面的命名的key
返回的json
[擷取授權]