一 结构体基础
Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。
# go自定义类型 例如:
//类型定义 打印出是 NewInt 类型 type NewInt int //类型别名 这个 仅仅是别名而已, 编译完成时不会有MyInt这个类型 type MyInt = int
结构体实例化
只有当结构体实例化时,才会真正地分配内存。也就是必须实例化后才能使用结构体的字段。
结构体本身也是一种类型,我们可以像声明内置类型一样使用
var
关键字声明结构体类型。
代码示例
type person struct {
name string
city string
age int8
}
func main() {
var p1 person
p1.name = "沙赫纳扎"
p1.city = "北京"
p1.age = 18
fmt.Printf("p1=%v\n", p1)
fmt.Println("p1=%#v\n", p1)
}
二 结构体 json 反引号
//父对象
type Human struct {
Name string `json:"english_name"` //把struct编码成json字符串时,Name字段的key是english_name,而不是Name
Age int `json:"-"` //把struct编码成json字符串时,会忽略Age这个字段
Weight float64 //`json:",string"` //编码成字符串,这个string选项只适用字符串,浮点型和整型数据
}
//子对象
type Student struct {
Human
Speciality string
Hobby []string
Score float64 `json:"total,omitempty"` //如果这个字段是空值,则不编码到JSON里面,否则用total为名字编码
Secret []byte `json:",omitempty"` //如果这个字段是空值,则不编码到JSON里面,否则用Secret为名字编码
//是一个经过base64编码的字符串
}
版权声明:本文为CSDN博主「aa1215018028」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aa1215018028/article/details/82768636
三 延申阅读
go语言的类没有public、protected、private的的声明。golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。
type Book struct {
Title string
Author string
intro string
}
// 类方法声明-传递值对象
func (b Book) B1() {
b.Title = "Book001"
b.Author = "ErWan"
}
// 类方法声明-传递指针对象
func (b *Book) B2() {
b.Title = "Book002"
b.Author = "Tinywan"
}