golang go语音 之 结构体

一 结构体基础

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"
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值