首页后端开发其他后端知识Go结构体类型主要用做什么,如何进行声明和定义

Go结构体类型主要用做什么,如何进行声明和定义

时间2024-03-26 09:58:03发布访客分类其他后端知识浏览475
导读:相信很多人对“Go结构体类型主要用做什么,如何进行声明和定义”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助 结构体类型可以用来保存不同类型的数据,也可以通过方法的形式来声明它的行为。本文将...
相信很多人对“Go结构体类型主要用做什么,如何进行声明和定义”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助

 



结构体类型可以用来保存不同类型的数据,也可以通过方法的形式来声明它的行为。本文将介绍go语言中的结构体和方法,以及“继承”的实现方法。

结构体类型

结构体类型(struct)在go语言中具有重要地位,它是实现go语言面向对象编程的重要工具。go语言中没有类的概念,可以使用结构体实现类似的功能,传统的OOP(Object-Oriented Programming)思想中的继承在go中可以通过嵌入字段的方式实现。

结构体的声明与定义:

// 使用关键字 type 和 struct 定义名字为Person结构体
type Robot struct {

	name string
	height int
}

初始化及赋值:

// 通过var声明
var r1 Robot
r1.name = "Optimus Prime"

// 字面量直接赋值
r2 := Robot{
name: "Optimus Prime"}

r3 := Robot{
"Optimus Prime", 100}
     //如果不加字段名,值必须按定义顺序给出

// new 函数
r4 := new(Robot)
r4.name = "Optimus Prime"
//或者
r5 := &
Robot{
}

r5.name = r1.name

方法

go语言中的函数和方法是有区别的,方法必须有名字,必须隶属于某一个类型,这个类型通过方法声明中的接收者(receiver)声明定义。

接收者声明位于关键字func和方法名称之间的圆括号中,必须包含确切的名称和类型字面量。

  • 类型就是当前方法所属的类型
  • 名称用于当前方法中引用它所属类型的值
package main

import "fmt"

type Robot struct {

	name string
	height int
}


func (r Robot) String() string{
	
	return fmt.Sprintf("name: %s, height: %d",r.name, r.height)
}


func main() {

    r1 := Robot{
name: "Optimus Prime", height: 100}

	fmt.Println(r1)  // 结果: name: Optimus Prime, height: 100
}

从String()方法的接收者声明可以看出它隶属于Robot类型,接收者名称为r。

结构体内嵌:“继承”与“重写”

Go 语言中没有继承的概念,具体原因和理念可参考官网:Why is there no type inheritance?

go语言可以通过嵌入字段来实现类似继承的效果,来看下面的代码:

package main

import "fmt"

type Skills struct {

	speak string 
}


func (s Skills) Speak()  {

	fmt.Println(s.speak)	
}


type Robot struct {

	name string // 姓名
	height int // 身高
	Skills
}


func main() {

	skill := Skills{
speak: "hello !"}

	skill.Speak()
	
	robot := Robot{

		name: "Optimus Prime",
		Skills: skill,
	}

	robot.Speak()
}

嵌入字段的方法集合会被合并到被嵌入类型的方法集合中。上面代码中,robot.Speak() 会调用嵌入字段Skills的Speak()方法,类似于继承了Skills的Speak()方法。执行结果如下:

hello !
hello !

下面添加一个Robot类型的Speak()方法:

func (r Robot) Speak() {
	
	fmt.Printf("My name is %s, ",r.name)
	r.Skills.Speak()
}
    

那么再次执行,会执行哪个Speak()方法呢?答案是Robot类型的Speak()方法,嵌入字段Skills的Speak()方法被“屏蔽”了,也就是说,被嵌入类型的方法覆盖了嵌入字段的同名方法,这与方法重写类似。

执行结果:

hello !
My name is Optimus Prime, hello !

可以通过链式的选择表达式,选择到嵌入字段的字段或方法,r.Skills.Speak() 就调用了嵌入字段Skills的Speak()方法。



现在大家对于Go结构体类型主要用做什么,如何进行声明和定义的内容应该都清楚了吧,希望大家阅读完这篇文章能有所收获。最后,想要了解更多Go结构体类型主要用做什么,如何进行声明和定义的知识,欢迎关注网络,网络将为大家推送更多相关知识点的文章。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Go结构体类型主要用做什么,如何进行声明和定义
本文地址: https://pptw.com/jishu/653424.html
怎么能看懂的Golang异常处理recover panic? 怎样提高php脚本性能?这些技巧你知道吗?

游客 回复需填写必要信息