亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go 語言中的 Struct Tag 的用法詳解

 更新時間:2025年05月23日 11:18:49   作者:Asus.Blogs  
在 Go 語言中,結(jié)構(gòu)體字段標簽(Struct Tag) 是一種用于給字段添加元信息(metadata)的機制,常用于序列化(如 JSON、XML)、ORM 映射、驗證等場景,本文給大家介紹Go 語言中的 Struct Tag 的用法,感興趣的朋友一起看看吧

在 Go 語言中,struct 是一種復(fù)合數(shù)據(jù)類型,用于將多個不同類型的數(shù)據(jù)組合成一個單一的數(shù)據(jù)單元。通過使用 struct,可以定義復(fù)雜的數(shù)據(jù)結(jié)構(gòu),便于組織和管理數(shù)據(jù)。struct 是 Go 語言中非常重要的一個概念,廣泛應(yīng)用于數(shù)據(jù)建模、對象表示、數(shù)據(jù)傳輸?shù)葓鼍啊?/p>

在 Go 語言中,結(jié)構(gòu)體字段標簽(Struct Tag) 是一種用于給字段添加元信息(metadata)的機制,常用于序列化(如 JSON、XML)、ORM 映射、驗證等場景。你在開發(fā) Web 應(yīng)用或處理數(shù)據(jù)交互時,一定會經(jīng)??吹筋愃葡旅娴膶懛ǎ?/p>

type User struct {
	Username string `json:"username"`
	Token    string `json:"token"`
}

其中的 json:"token" 就是字段標簽,它并不影響 Go 語言本身的語法邏輯,但它在使用反射(reflect)時非常有用,特別是當(dāng)你用標準庫如 encoding/json 時。

一、結(jié)構(gòu)體標簽的基本語法

結(jié)構(gòu)體標簽是一對反引號 ` 包起來的字符串,里面是一個鍵值對的形式:

FieldName FieldType `key:"value"`
//可以寫多個鍵值對:
FieldName FieldType `json:"token" xml:"token" validate:"required"`

這些標簽是給其他包(通常是庫)解析使用的,不影響 Go 編譯器的行為。

二、json:"token"的具體含義

當(dāng)你用 encoding/json 包將結(jié)構(gòu)體編碼為 JSON 時,這個標簽的作用是:
? 指定序列化后的字段名
默認情況下,Go 會使用結(jié)構(gòu)體字段名作為 JSON 的字段名。但注意:
Go 結(jié)構(gòu)體的字段是大寫開頭(導(dǎo)出);
JSON 通常用小寫字段名(如 “token”);
為了統(tǒng)一后端返回格式并滿足前端規(guī)范,我們可以顯式指定字段名:

type User struct {
	Token string `json:"token"`
}

生成的json:

{
  "token": "abc123"
}

? 反序列化時也生效
當(dāng)你將 JSON 反序列化成結(jié)構(gòu)體時,Go 會根據(jù)標簽來找對應(yīng)字段。例如上面的json格式能成功映射到:

var user User
json.Unmarshal(data, &user)
// user.Token == "abc123"

三、常見的標簽格式變體

type User struct {
	Token string `json:"token"`           // 顯式指定字段名為 token
	Age   int    `json:"-"`               // 忽略該字段,不進行序列化
	Email string `json:"email,omitempty"` // 若為空則忽略該字段
}

json:“-”: 表示這個字段永遠不會被編碼或解碼,即不導(dǎo)出。
json:“email,omitempty”: 表示只有字段不為默認值時,才會被編碼到 JSON(比如字符串為 “”,數(shù)字為 0 就會忽略)。

四、使用示例

package main
import (
	"encoding/json"
	"fmt"
)
type User struct {
	Username string `json:"username"`
	Token    string `json:"token"`
	Age      int    `json:"-"` // 不導(dǎo)出
}
func main() {
	user := User{
		Username: "Alice",
		Token:    "abc123",
		Age:      30,
	}
	data, _ := json.Marshal(user)
	fmt.Println(string(data))
}
//{"username":"Alice","token":"abc123"}

五、使用建議

  • 字段必須導(dǎo)出(首字母大寫),否則即使有 tag,json 包也不會訪問它。
  • 推薦統(tǒng)一使用小寫 JSON 字段名:json:“username”,更符合前端 JSON 風(fēng)格。
  • 如有嵌套結(jié)構(gòu)體,注意為子結(jié)構(gòu)體也添加 json 標簽。!!!~~~~~~~~!!! 務(wù)必都為添加 json 標簽的結(jié)構(gòu)體?。。?!不然前端解析不了?。?!

疑問? 如果json tag為"-" ,為什么不把結(jié)構(gòu)體首字母小寫呢 不是一個效果嗎?

?json:"-"的用途
json:“-” 是明確告訴 encoding/json:“這個字段你不要處理,序列化/反序列化時忽略它”。這在結(jié)構(gòu)體對外暴露字段但不希望被 JSON 處理時非常有用,比如:

type User struct {
	Username string `json:"username"`
	Password string `json:"-"` // 不想被輸出!
}

你仍然可以在后端處理 Password 字段,但它不會出現(xiàn)在 JSON 輸出中。這是安全和結(jié)構(gòu)清晰性方面的明確表達。
? 總結(jié):選擇建議

目的用法推薦
字段僅用于內(nèi)部邏輯,不想暴露出去小寫字段
字段對程序可見,但不想在 JSON 中出現(xiàn)json:"-"
需要 JSON 中出現(xiàn)但字段名不同json:"your_name"
希望字段在為空時不出現(xiàn)json:"your_name,omitempty"

簡單例子:

type RespMsg struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}
type LoginData struct {
	Token    string `json:"token"`
	Username string `json:"username"`
	Location string `json:"location"`
}
rsp := RespMsg{
	Code: 200,
	Msg:  "success",
	Data: LoginData{
		Token:    userToken,
		Username: username,
		Location: "/static/view/home.html",
	},
}

這樣返回的 JSON 就是:

{
  "code": 200,
  "msg": "success",
  "data": {
    "token": "...",
    "username": "...",
    "location": "..."
  }
}

前端用 resp.data.token、resp.data.username 就不會有大小寫錯位的問題。

到此這篇關(guān)于Go 語言中的 Struct Tag 的用法詳解的文章就介紹到這了,更多相關(guān)Go Struct Tag 用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言Swagger實現(xiàn)為項目生成 API 文檔

    Go語言Swagger實現(xiàn)為項目生成 API 文檔

    Swagger 是一個基于 OpenAPI 規(guī)范設(shè)計的工具,用于為 RESTful API 生成交互式文檔,下面小編就來介紹一下如何在 Go 項目中集成 Swagger,特別是結(jié)合 Gin 框架生成 API 文檔
    2025-03-03
  • go語言使用Casbin實現(xiàn)角色的權(quán)限控制

    go語言使用Casbin實現(xiàn)角色的權(quán)限控制

    Casbin是用于Golang項目的功能強大且高效的開源訪問控制庫。本文主要介紹了go語言使用Casbin實現(xiàn)角色的權(quán)限控制,感興趣的可以了解下
    2021-06-06
  • Go語言基礎(chǔ)枚舉的用法及示例詳解

    Go語言基礎(chǔ)枚舉的用法及示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)枚舉的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • golang(gin)的全局統(tǒng)一異常處理方式,并統(tǒng)一返回json

    golang(gin)的全局統(tǒng)一異常處理方式,并統(tǒng)一返回json

    這篇文章主要介紹了golang(gin)的全局統(tǒng)一異常處理方式,并統(tǒng)一返回json,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Golang Copier入門到入坑探究

    Golang Copier入門到入坑探究

    這篇文章主要為大家介紹了Golang Copier入門到入坑探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Golang實現(xiàn)yaml配置文件的解析

    Golang實現(xiàn)yaml配置文件的解析

    這篇文章主要介紹了Golang實現(xiàn)yaml配置文件的解析,文中通過圖文結(jié)合的方式講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • Go語言如何在Web服務(wù)中實現(xiàn)優(yōu)雅關(guān)機

    Go語言如何在Web服務(wù)中實現(xiàn)優(yōu)雅關(guān)機

    在這篇文章中,我們將通過一個簡單的例子來演示如何在 Go 語言中使用 Gin 框架實現(xiàn)優(yōu)雅關(guān)機,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • gorm update傳入struct對象,零值字段不更新的解決方案

    gorm update傳入struct對象,零值字段不更新的解決方案

    這篇文章主要介紹了gorm update傳入struct對象,零值字段不更新的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 深入解析Go語言中crypto/subtle加密庫

    深入解析Go語言中crypto/subtle加密庫

    本文主要介紹了深入解析Go語言中crypto/subtle加密庫,詳細介紹crypto/subtle加密庫主要函數(shù)的用途、工作原理及實際應(yīng)用,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 詳解Go?將在下個版本支持新型排序算法pdqsort

    詳解Go?將在下個版本支持新型排序算法pdqsort

    這篇文章主要介紹了Go?將在下個版本支持新型排序算法:pdqsort,而就Go支持pdqsort算法,在HN上引起了不少的討論,有人表示,我們研究排序算法這么久了,很驚訝我們還能想出能產(chǎn)生實際改進的優(yōu)化方案。對此,你怎么看,快快上手體驗一下吧
    2022-04-04

最新評論