速戰速決 go - go 面向對象: 結構體(結構體標籤,結構體和 json 互相轉換)

速戰速決 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章