golang面試題:json包變量不加tag會怎麼樣?

問題

json包裏使用的時候,結構體裏的變量不加tag能不能正常轉成json裏的字段?golang

怎麼答

  • 若是變量首字母小寫,則爲private。不管如何不能轉,由於取不到反射信息面試

  • 若是變量首字母大寫,則爲publicjson

    • 不加tag,能夠正常轉爲json裏的字段,json內字段名跟結構體內字段原名一致
    • 加了tag,從structjson的時候,json的字段名就是tag裏的字段名,原字段名已經沒用。

舉例

經過一個例子加深理解。數組

package main
import (  "encoding/json"  "fmt" ) type J struct {  a string //小寫無tag  b string `json:"B"` //小寫+tag  C string //大寫無tag  D string `json:"DD"` //大寫+tag } func main() {  j := J {  a: "1",  b: "2",  C: "3",  D: "4",  }  fmt.Printf("轉爲json前j結構體的內容 = %+v\n", j)  jsonInfo, _ := json.Marshal(j)  fmt.Printf("轉爲json後的內容 = %+v\n", string(jsonInfo)) } 複製代碼

輸出markdown

轉爲json前j結構體的內容 = {a:1 b:2 C:3 D:4}
轉爲json後的內容 = {"C":"3","DD":"4"} 複製代碼

解釋

  • 結構體裏定義了四個字段,分別對應 小寫無tag小寫+tag大寫無tag大寫+tag
  • 轉爲json後首字母小寫的無論加不加tag都不能轉爲json裏的內容,而大寫的加了tag能夠取別名,不加tagjson內的字段跟結構體字段原名一致

文章推薦:

若是你想天天學習一個知識點?
相關文章
相關標籤/搜索