Golang中struct結構標籤(Tag)的使用

hongmingover發表於2018-11-26

Golang中struct結構標籤(Tag)的使用

 

在看別人的一些程式碼時,宣告結構時有個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

相關文章