结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
type 结构体名称 struct{
field type
field type
}
例子:
type Dog struct {
Name string
Age int
Color string
}
注:在创建一个结构体变量后,如果没有给字段赋值,都应该对应一个零值(默认值),布尔类型为false,数值类型为0,字符串为"",指针、slice和map的零值时nil,即没有分配空间。
var dog Dog
package main
import (
"fmt"
)
type Dog struct {
Name string
Age int
Color string
}
func main() {
dog := Dog{"来福", 3, "白色"}
fmt.Printf("dog=%v\n", dog)
}
输出结果:
dog={来福 3 白色}
package main
import (
"fmt"
)
type Dog struct {
Name string
Age int
Color string
}
func main() {
dog := new(Dog)
// dog是一个指针,因此标准的给字段赋值应该是(*dog).Name = "来福" (*dog).Age = 3 (*dog).Color = "白色"
// go设计者为了程序员使用方便,底层会对dog.Name = "来福"进行处理,会给dog加上取值运算(*dog).Name = "来福"
dog.Name = "来福" // 等价于(*dog).Name = "来福"
dog.Age = 3 // 等价于(*dog).Age = 3
dog.Color = "白色" // 等价于(*dog).Color = "白色"
fmt.Printf("dog=%v\n", *dog)
}
输出结果:
dog={来福 3 白色}
package main
import (
"fmt"
)
type Dog struct {
Name string
Age int
Color string
}
func main() {
dog := &Dog{"来福", 3, "白色"}
fmt.Printf("dog=%v\n", *dog)
}
输出结果:
dog={来福 3 白色}
说明:
package main
import (
"fmt"
)
type Point struct {
x, y int
}
type Rect struct {
LeftUp, RightDown Point
}
func main() {
rect := Rect{Point{10, 20}, Point{30, 40}}
fmt.Printf("rect.LeftUp.x地址=%v\n,rect.LeftUp.y地址=%v\n,rect.RightDown.x地址=%v\n,rect.RightDown.y地址=%v\n",
&rect.LeftUp.x, &rect.LeftUp.y, &rect.RightDown.x, &rect.RightDown.y)
}
输出结果:
rect.LeftUp.x地址=0xc0000124e0
,rect.LeftUp.y地址=0xc0000124e8
,rect.RightDown.x地址=0xc0000124f0
,rect.RightDown.y地址=0xc0000124f8
package main
import (
"fmt"
)
type A struct {
Num int
Num2 int
}
type B struct {
Num int
Num2 int
}
func main() {
var a A
var b B
a = A(b) // 可以转换,但是有要求,就是结构体字段要完全一样(包括:名字,类型,个数,顺序)
fmt.Println("a=", a, "b=", b)
}
输出结果:
a= {0 0} b= {0 0}
package main
import (
"fmt"
)
type integer int
func main() {
var i integer
var j int
j = int(i)
fmt.Println("i=", i, "j=", j)
}
输出结果:
i= 0 j= 0
package main
import (
"encoding/json"
"fmt"
)
type Dog struct {
Name string `json:"name"` // `json:"name"`就是struct tag
Age int `json:"age"`
Color string `json:"color"`
}
func main() {
dog := Dog{"来福", 3, "白色"}
// 将dog变量序列化为json字符串
// json.Marshal函数中使用反射
jsonStr, err := json.Marshal(dog)
if err != nil {
fmt.Println("json转换错误")
}
fmt.Println("dog=", string(jsonStr))
}
输出结果:
dog= {"name":"来福","age":3,"color":"白色"}
原文:https://www.cnblogs.com/adong2021/p/14806024.html