GO语言-结构体(struct)

结构体概念

是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。学过 C 或 C++ 的人都知道结构体,但在 Go 中,没有像 C++ 中的 class 类的概念,只有 struct 结构体的概念,所以也没有继承。

结构体的声明

type 结构体名 struct {
    属性名1   属性类型1
    属性名2   属性类型2
    ...
}

例:

type Lesson struct {
	name, target string
	spend        int
}

注:可以把相同类型的属性声明在同一行,这样可以使结构体变得更加紧凑
上面的结构体 Lesson 称为 命名的结构体(Named Structure)。我们创建了名为 Lesson 的新类型,而它可以用于创建 Lesson 类型的结构体变量。

声明结构体时也可以不用声明一个新类型,这样的结构体类型称为匿名结构体(Anonymous Structure)

var Lesson3 struct {
    name, target    string
    spend             int
}

初始化结构体

有俩种方式去初始化结构体

// 使用字段名创建结构体
	lesson1 := Lesson{
		name:   "我是HH啊!!!",
		target: "拿高薪",
		spend:  5,
	}
	// 不使用字段名创建结构体
	lesson2 := Lesson{"我是YY啊!!!", "增强自己", 5}

访问结构体的字段

点操作符 . 用于访问结构体的字段。有点类似java的点方法

fmt.Println(lession3.name)

输出的就是我是HH啊!!!,也就是上面的name属性

匿名字段

在创建结构体时,字段可以只有类型没有字段名,这种字段称为 匿名字段(Anonymous Field) 。

type Lesson4 struct {
	string
	int
}

func main() {
	lesson := Lesson4{"我叫HH", 50}
	fmt.Println("lesson ", lesson9)
	fmt.Println("lesson string: ", lesson9.string)
	fmt.Println("lesson int: ", lesson9.int)
}

上面的程序结构体定义了两个匿名字段,虽然这两个字段没有字段名,但匿名字段的名称默认就是它的类型。所以上面的结构体 Lesoon4 有两个名为 string 和 int 的字段。

嵌套结构体

结构体的字段也可能是另外一个结构体,这样的结构体称为 嵌套结构体(Nested Structs)

type Lesson struct {
	name, target string
	spend        int
}
type Author struct {
	name string
	wx   string
}
func main() {
lesson6 := Lesson5{
		name:  "我是HH啊!!!",
		spend: 50,
	}
	lesson6.author = Author{
		name: "小豪",
		wx:   "66666",
	}
	fmt.Println(lesson6)
}

哈哈,这里让我想起我写java接口的时候各种大套小的。

给结构体定义方法

type Lesson struct {
  name, target string
  spend        int
}

// ShowLessonInfo 定义一个与 Person 的绑定的方法
func (l Lesson) ShowLessonInfo() {
  fmt.Println("name:", l.name)
  fmt.Println("target:", l.target)
}

func main() {
  lesson13 := Lesson{
    name:   "我是HH啊!!!",
    target: "提升自己啊!",
  }
  lesson13.ShowPersonInfo()
}

上面的程序中定义了一个与结构体 Lesson 绑定的方法 ShowLessonInfo() ,其中 ShowLessonInfo 是方法名, (l Lesson) 表示将此方法与 Lesson 的实例绑定,这在 Go 语言中称为接收者,而 l 表示实例本身,相当于 Python 中的 self ,在方法内可以使用 实例本身.属性名称 来访问实例属性。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值