不同結構轉換

不同結構轉轉後換

因為斷言只能用在相同結構的轉換,而相似結構的轉換則要用不同方式去進行.


type UserDetail struct {
	Name     string `json:"name"`
	Email    string `json:"email"`
	BirthDay string
	Addr     string
	Phone    string
	Age      int `json:"age"`
	Order    []order
}

type UserDetail2 struct {
	Name     string
	Email    string
	BirthDay string
	Addr     string
	Phone    string
	Age      int
	Order    []order
}
type UserBrief struct {
	Name  string `json:"name"`
	Email string `json:"email"`
	Age   int    
	Order []order
}

type order struct {
	ID   string
	Name string
}

func main() {
	user1 := UserDetail{Name: "anna", Age: 20, Addr: "star", Phone: "123456789", Email: "test@test.com",
		Order: []order{{ID: "01", Name: "name1"}, {ID: "02", Name: "name2"}},
	}
	fmt.Printf("Type:%T V(%v) Name:%s \n", user1, user1, user1.Name)
	user2 := UserDetail2(user1) //使用斷言 T(v) 相同結構struct(忽略struct tag)
	fmt.Printf("Type:%T V(%v) Name:%s \n", user2, user2, user2.Name)

	//user3 := UserBrief(user1) // 不能使用斷言 因為結構不同 會報錯 cannot convert user1 (variable of type UserDetail) to UserBriefcompiler

}

方法一

方法二

方法三 : 使用SandardJson

但使用這方法要注意效能問題,也有其他easyJson,fastJson可替換.

參考

Last updated