Go言语根本语法之筹划体及编制详解

娱乐 · 2026-09-04 19:45:38

筹划体圭表类型可以用来保管不合圭表类型的言语语法数据 ,也可以经由过程编制的根本编制来声明它的行动。本文将引见go言语中的筹制详筹划体和编制,和“延续”的划体完成编制 。

筹划体圭表类型

筹划体圭表类型(struct)在go言语中具有次要职位 ,及编解它是言语语法完成go言语面向对象编程的次要对象。go言语中没有类的根本定见 ,可独霸筹划体完成近似的筹制详下场 ,传统的划体OOP(Object-Oriented Programming)思惟中的延续在go中可以经由过程嵌进字段的编制完成。

筹划体的及编解声明与定义 :

// 独霸关头字 type 和 struct 定义名字为Person筹划体type Robot struct { 	name string	height int}

初始化及赋值:

// 经由过程var声明var r1 Robotr1.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 mainimport "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 mainimport "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言语根本语法之筹划体及编制详解的文章就引见到这了,更多相干Go筹划体及编制内容请搜刮完竣下载之前的文章或延续不雅不雅不雅不雅鉴赏上面的相干文章希看大年夜师往后多多支撑完竣下载!

文章推荐:

除夜智界看告白轻松赚米 ,每个告白0.5,有手机就可以玩!

深圳市政其他垃圾桶厂家生产图

铁血武林2奇遇攻略除夜全最新

地下城堡3再生者的还击活动怪物分布攻略

谢贤7月16日因肺炎弃世 家人遵绝笔低调离往

深圳市政其他垃圾桶厂家生产图

户外大型不锈钢异形花盆厂家定制

铁血武林2平平易近零氪门派推荐攻略

发家视频号存眷,天天都可以撸  ,团长对接

铁汉联盟手游加里奥连招身手分享

城市垃圾分类立法目的依据参考

三国杀五人身份局没人兴曲折皇后遭到毁伤在诸葛亮的回应时运营惴恐并且拼点赢了

热门浏览

标签列表