速戰速決 go https://github.com/webabcd/GoSample
作者 webabcd
速戰速決 go - go 面向對象: 結構體(結構體標籤,結構體和 json 互相轉換)
示例如下:
oop/struct4.go
// go 面向對象 - 結構體(結構體標籤,結構體和 json 互相轉換)
package oop
import (
"encoding/json"
"fmt"
)
func Struct4Sample() {
// 結構體轉 json
struct4_sample1()
// json 轉結構體
struct4_sample2()
}
// 結構體成員的後面加 `` 用於定義結構體標籤
// 結構體標籤的應用之一就是:通過反射實現結構體與 json 的互相轉換
type struct41 struct {
// 因爲要通過反射做結構體與 json 的互相轉換,所以成員小寫開頭的話是做不到的(因爲小寫開頭的不可導出,所以反射不出來)
id int
// 因爲要通過反射做結構體與 json 的互相轉換,所以成員小寫開頭的話是做不到的(因爲小寫開頭的不可導出,所以反射不出來)
name string `json:"my_name"`
// 如果用 encoding/json 庫,則默認的話,結構體的字段名稱會映射到 json 的同名字段
Age int
// 如果用 encoding/json 庫,則通過標籤,可以指定結構體的字段名稱與 json 的字段名稱的映射關係
Mobile string `json:"my_mobile"`
}
// 結構體轉 json
func struct4_sample1() {
a := struct41{
id: 1001,
name: "webabcd",
Age: 40,
Mobile: "12345678900",
}
jsonBytes, _ := json.Marshal(a)
jsonString := string(jsonBytes)
fmt.Println(jsonString) // {"Age":40,"my_mobile":"12345678900"}
}
// json 轉結構體
func struct4_sample2() {
a := `{"id":1001,"my_name":"webabcd","Age":40,"my_mobile":"12345678900"}`
var s struct41
err := json.Unmarshal([]byte(a), &s)
if err == nil {
fmt.Printf("%+v\n", s) // {id:0 name: Age:40 Mobile:12345678900}
}
}
速戰速決 go https://github.com/webabcd/GoSample
作者 webabcd