package main import "fmt" //结构体 type Point struct { x int y int } //结构体 type Rect struct { leftUp, rightDown Point } //结构体 type Rect2 struct { leftUp, rightDown *Point } func main() { r1 := Rect{Point{1,2}, Point{3,4}} //r1有四个int, 在内存中是连续分布 //打印地址 fmt.Printf("r1.leftUp.x 地址=%p r1.leftUp.y 地址=%p r1.rightDown.x 地址=%p r1.rightDown.y 地址=%p \n", &r1.leftUp.x, &r1.leftUp.y, &r1.rightDown.x, &r1.rightDown.y) //r2有两个 *Point类型,这个两个*Point类型的本身地址也是连续的, //但是他们指向的地址不一定是连续 r2 := Rect2{&Point{10,20}, &Point{30,40}} //打印地址 fmt.Printf("r2.leftUp 本身地址=%p r2.rightDown 本身地址=%p \n", &r2.leftUp, &r2.rightDown) //他们指向的地址不一定是连续..., 这个要看系统在运行时是如何分配 fmt.Printf("r2.leftUp 指向地址=%p r2.rightDown 指向地址=%p \n", r2.leftUp, r2.rightDown) }
package main import "fmt" import "encoding/json" type A struct { Num int } type B struct { Num int } func main() { var a A var b B a = A(b) //可以转换,但是有要求,就是结构体的的字段要完全一样(包括:名字、个数和类型!) fmt.Println(a, b) }
package main import "fmt" import "encoding/json" type Monster struct { Name string `json:"name"` //`json:"name"` 就是 struct tag Age int `json:"age"` Skill string `json:"skill"` } func main() { //1. 创建一个Monster变量 monster := Monster{"牛魔王", 500, "芭蕉扇~"} //2. 将monster变量序列化为 json格式字串 //json.Marshal 函数中使用反射,这个讲解反射时,会详细介绍 //如果字段变成小写,json包就不能访问到字段的值,大写的话很多程序员不习惯,所以使用tag jsonStr, err := json.Marshal(monster) if err != nil { fmt.Println("json 处理错误 ", err) } fmt.Println("jsonStr", string(jsonStr)) //jsonStr {"name":"牛魔王","age":500,"skill":"芭蕉扇~"} }
原文地址:https://www.cnblogs.com/yzg-14/p/12231782.html
时间: 2024-10-29 08:00:57