ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> ### 结构 struct ~~~ package main import "fmt" // Go提供的结构体就是把使用各种数据类型定义的不同变量组合起来的高级数据类型 type Person struct { Name string Age int } func main() { fmt.Println(Person{"A", 18}) fmt.Println(Person{Name: "B", Age: 19}) fmt.Println(Person{Name: "C"}) } ~~~ > ### 例子二 ~~~ package demo11 import ( "fmt" "encoding/json" ) type User struct { name string age int } func NewUser(name string, age int) *User { var user *User = &User{name, age} return user } type exam struct { number1 int number2 int number3 int number4 int } type student struct { grade int subject string *people } type people struct { name string age int } type message struct { Id int `json:"user_id",db:"user_id"` Title string `db:"user_title"` Content1 string content2 string //小写私有, 别的包是无法访问的 } func Demo11() { //new(User) 和 &User{} 本质上是一样的,都是返回结构体地址 var user1 *User = new(User) fmt.Printf("%p\n", user1) var user2 *User = &User{} fmt.Printf("%p\n", user2) var user3 User fmt.Printf("%v\n", user3) //结构体里的字段占用一段连续的内存空间 //%p 十六进制表示,前缀 0x var exam *exam = &exam{} fmt.Printf("%p\n", &exam.number1) fmt.Printf("%p\n", &exam.number2) fmt.Printf("%p\n", &exam.number3) fmt.Printf("%p\n", &exam.number4) //结构体没有构造函数, 可以自己实现 //构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值 var user4 *User = NewUser("张三", 25) fmt.Printf("%v\n", user4) //匿名字段默认采用类型名作为字段名 //结构体嵌套 var student1 student student1.people = &people{ name: "李四", age: 15, } fmt.Printf("%#v \n %#v \n", student1, student1.people) var student2 student //未初始化默认指向空的内存 student2.people = &people{} student2.name = "王五" student2.age = 16 fmt.Printf("%#v \n %#v \n", student2, student2.people) //tag是结构体的原信息, 可以在运行时通过反射的机制读取出来 msg1 := &message{ Id: 1, Title: "标题1", Content1: "内容1", content2: "内容2", } data, _ := json.Marshal(msg1) fmt.Println(string(data)) } ~~~