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

综合 · 2026-09-04 16:24:14

筹划体圭表类型可以用来保管不合圭表类型的言语语法数据,也可以经由过程编制的根本编制来声明它的行动 。本文将引见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筹划体及编制内容请搜刮完竣下载之前的文章或延续不雅不雅不雅不雅鉴赏上面的相干文章希看大年夜师往后多多支撑完竣下载 !

文章推荐:

小红卷APP消费省钱副业获利,官方聘请码123456 直***花板级别

相约防城港 走进“边海关”——“铸牢中华民族共同体意识·媒体相约防城港”活动在广西防城港启动

贵港玉林百色中国移动爱“心”行动——困境先心病儿童救助计划筛查11月开始

快讯丨贵港市大力发展设施农业全面推进乡村振兴新闻发布会在南宁举行

信商圈 ,免费发告白 ,流量除夜 ,精准粉 ,项目合作,首码宣布

超燃 !“健智体育杯”第八届广西万村篮球赛总决赛暨广西社区运动会打响

快讯丨贵港市2024年武思江京屋防洪堤防洪抢险总结表扬大会召开 朱会东出席大会并讲话

广西“清凉一夏 奔赴山海”暑期文化旅游消费季暨文化旅游消费大夜市(贵港主场)活动启动

鱼儿微信半主动不雅不雅不雅不雅鉴赏,单号保底3米放置 ,满0.3元提现秒到微信多号多撸

关于接受覃宏等同志辞去政协第六届贵港市委员会委员和常务委员职务的决定

关于接受梁铧文等六名同志请辞政协第六届贵港市委员会委员职务的决定

快讯丨朱会东主持召开落实《进一步全面深化改革加快新时代贵港现代化建设的实施意见》部署会暨六届市委全面深化改革委员会第十次会议

热门浏览

标签列表