欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Go入门之struct

Go入门之struct

2025/2/24 21:32:09 来源:https://blog.csdn.net/2201_75595843/article/details/145781594  浏览:    关键词:Go入门之struct

类型别名

var b myFloat = 12.3fmt.Printf("%f,%T", b, b)

结构体为值类型

初始化

type Person struct {name stringage  intsex  string
}func main() {var p1 Personp1.name = "张三"p1.sex = "男"p1.age = 20fmt.Printf("%v,%T\n", p1, p1)fmt.Printf("%#v,%T\n", p1, p1)}

结构体首字母大写表示是公有的,小写表示是私有的

第二种

	var p2 = new(Person)fmt.Printf("%v,%T\n", p2, p2)

第三种

    var p3 = &Person{}fmt.Printf("%v,%T\n", p3, p3)

第四种

var p4 = Person{name: "哈哈",age:  20,sex:  "nan",}fmt.Printf("%v,%T\n", p4, p4)

第五种

var p5 = &Person{name: "哈哈",age:  20,sex:  "nan",}fmt.Printf("%v,%T\n", p5, p5)

第六种初始化可以不赋值,为默认值

结构体自定义方法

type Person struct {name stringage  intsex  string
}func (p Person) PrintInfo() {fmt.Printf("%v,%v", p.name, p.age)
}
func main() {var p1 = Person{name: "张三",age:  20,sex:  "男",}p1.PrintInfo()
}

自定义类型定义方法

type MyInt intfunc (m MyInt) PrintInfo() {fmt.Println("int")
}

不能给其他包的类型定义方法

匿名结构体

type student struct {stringint
}func main() {p := student{"张三",20,}fmt.Println(p)
}
type Address struct {Phone stringCity  string
}
type Person struct {Name  stringAge   intHobby []stringmap1  map[string]stringaddr  Address
}func main() {var p Personp.Name = "张三"p.Age = 20p.Hobby = make([]string, 3, 6)p.Hobby[0] = "写代码"p.Hobby[1] = "睡觉"p.map1 = make(map[string]string)p.map1["address"] = "北京"p.addr.City = "北京"p.addr.Phone = "12312"fmt.Println(p)
}

匿名字段在嵌套结构体中的应用,如果当前找不到就向匿名嵌套结构体中寻找

type Address struct {Phone stringCity  string
}
type Person struct {Name  stringAge   intHobby []stringmap1  map[string]stringAddress
}func main() {var p Personp.Name = "张三"p.Age = 20p.Hobby = make([]string, 3, 6)p.Hobby[0] = "写代码"p.Hobby[1] = "睡觉"p.map1 = make(map[string]string)p.map1["address"] = "北京"p.City = "北京"p.Phone = "12312"fmt.Println(p)
}

 通过结构体嵌套来继承结构体及其方法,当前没有方法,去嵌套结构体找

type Student struct {ID     intGender stringName   stringSno    string
}func main() {var s1 = Student{ID:     12,Gender: "男",Name:   "李四",Sno:    "123",}jsonByte, _ := json.Marshal(s1)jsonStr := string(jsonByte)fmt.Printf("%v", jsonStr)
}

结构体转换成json对象,变量必须为大写,表示公有字段

json对象转结构体

type Student struct {ID     intGender stringName   stringSno    string
}func main() {var str = `{"ID":12,"Gender":"男","Name":"李四","Sno":"123"}`var s1 Studenterr := json.Unmarshal([]byte(str), &s1)if err != nil {fmt.Println(err)}fmt.Printf("%#v\n", s1)
}

结构体标签:转换完自动变成该变量

type Student struct {ID     int    `json:"id"`Gender string `json:"gender"`Name   string `json:"name"`Sno    string `json:"sno"`
}

type Student struct {ID     int    `json:"id"`Gender string `json:"gender"`Name   string `json:"name"`
}
type Class struct {Title    stringStudents []Student
}func main() {c := Class{Title:    "001班",Students: make([]Student, 0),}for i := 0; i <= 10; i++ {s := Student{ID:     i,Gender: "男",Name:   fmt.Sprintf("std_%v", i),}c.Students = append(c.Students, s)}fmt.Println(c)strByte, err := json.Marshal(c)if err != nil {fmt.Println(err)} else {strJson := string(strByte)fmt.Println(strJson)}
}
	var str = `{"Title":"001班","Students":[{"id":0,"gender":"男","name":"std_0"},{"id":1,"gender":"男","name":"std_1"},{"id":2,"gender":"男","name":"std_2"},{"id":3,"gender":"男","name":"std_3"},{"id":4,"gender":"男","name":"std_4"},{"id":5,"gender":"男","name":"std_5"},{"id":6,"gender":"男","name":"std_6"},{"id":7,"gender":"男","name":"std_7"},{"id":8,"gender":"男","name":"std_8"},{"id":9,"gender":"男","name":"std_9"},{"id":10,"gender":"男","name":"std_10"}]}`var cc = &Class{}errr := json.Unmarshal([]byte(str), cc)if errr != nil {fmt.Println(errr)} else {fmt.Printf("%#v", cc)}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词