成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

golang中有沒有類

golang中沒有類。golang不是一門純面向對象編程語言,它沒有class(類)的概念,也就沒有繼承的說法,但Go也可以模擬面向對象的編程方式。在Go中,可以將struct比作其它語言中的class;通過struct定義結構體,表征一類對象,例“type person struct {…}”。

golang中有沒有類

本教程操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

面向對象三大特征:封裝,繼承,多態。

Go不是一門純面向對象編程語言,它沒有class(類)的概念,也就沒有繼承的說法。但Go也可以模擬面向對象的編程方式,即可以將struct比作其它語言中的class。

對象

Go沒有class的概念,通過struct定義結構體,表征一類對象。

type person struct { 	Age  int 	Name string }
登錄后復制

對象是狀態與行為的有機體。例如下面的java代碼:

public class Person {      int age;      String name;      public int getAge() {         return age;     }      public void setAge(int age) {         this.age = age;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     } }
登錄后復制

不同于Java,Go的方法不需要跟類的數據綁定在一個class的定義里面,只需要定義在同一個包內。這一點可能初學Go的同學,會感覺很奇怪。

type person struct { 	Age  int 	Name string }  func (p *person) GetAge() int { 	return p.Age }  func (p *person) SetAge(age int)  { 	p.Age = age }  func (p *person) GetName() string { 	return p.Name }  func (p *person) SetName(name string) { 	p.Name = name }
登錄后復制

構造函數

Go沒有構造函數,對象的數據載體就是一個struct。Java支持構造函數,構造函數名字就跟類名字一樣,多個構造函數通過函數重載實現。

而Go構造函數則通過工廠函數進行模擬。實例如下:

type person struct { 	Age  int 	Name string }  /** 	構造函數1--通過名字初始化  */ func newPersonByName(name string) *person { 	return &person{ 		Name: name, 	} }  /** 	構造函數2--通過年齡初始化  */ func newPersonByAge(age int) *person { 	return &person{ 		Age: age, 	} }
登錄后復制

需要注意的是,person結構體的名稱首字母要小寫,避免外部直接越過模擬的構造函數

訪問權限

Java有四種訪問權限,如下所示:

java訪問控制符
public protected

friendly

(default)

private
同一個類 yes yes yes yes
同一個包 yes yes yes no
不同包子類 yes yes no no
不同包非子類 yes no no no

Go則做了簡化,可見性的最小粒度是包。也就是說,Go保留兩種,friendly和public。Go的變量名如果首字母是小寫,則代表包內可見;如果首字母是大寫,則代表任何地方都可見。

封裝

封裝,把抽象出來的結構體跟操作結構體內部數據的函數綁定在一起。外部程序只能根據導出的函數API(public方法)修改結構體的內部狀態。

封裝有兩個好處:

隱藏實現:我們只希望使用者直接使用API操作結構體內部狀態,而無需了解內部邏輯。就好像一座冰山,我們只看到它露出水面的那一部分。

保護數據:我們可以對數據的修改和訪問施加安全措施,調用setter方法的時候,我們可以對參數進行校驗;調用getter方法,我們可以增加訪問日志等等。

一個簡單的bean定義如下所示:

type person struct { 	Age  int 	Name string }  func NewPerson(age int, name string) *person{ 	return &person{age, name} }  func (p *person) SetAge(age int)  { 	p.Age = age }  func (p *person) SetName(name string) { 	p.Name = name }  func main() { 	p:= NewPerson(10, "Lily") 	p.SetName("Lucy") 	p.SetAge(18) }
登錄后復制

需要注意的是,Go的方法是一種特殊的函數,只是編譯器的一種語法糖,編譯器瞧瞧幫我們把對象的引用作為函數的第一個參數。例如,下面的代碼是等價的

func main() { 	p:= NewPerson(10, "Lily")  	p.SetName("Lily1") 	// 等價于下面的寫法 	// p是一個引用,函數引用 	setNameFunc := (*person).SetName 	setNameFunc(p, "Lily2") 	fmt.Println(p.Name) }
登錄后復制

繼承

繼承,子類繼承父類,則獲得父類的特征和行為。繼承的主要目的是為了重用代碼。Java實現代碼重用的兩大利器,就是繼承和組合。

Go沒有class的概念,談不上繼承。但Go可以通過匿名組合來模擬繼承。

如下所示,Cat通過匿名聚合了Animal結構體,就自動獲得了Animal的move()和Shout()方法:

type Animal struct { 	Name string }  func (Animal) move()  { 	fmt.Println("我會走") }  func (Animal) shout()  { 	fmt.Println("我會叫") }  type Cat struct { 	Animal // 匿名聚合 }  func main() { 	cat := &Cat{Animal{"貓"}}  	cat.move() 	cat.shout() }
登錄后復制

多態

多態,申明為基類的變量,可以在運行期指向不同的子類,并調用不同子類的方法。多態的目的是為了統一實現。

我們通過接口來實現多態。在java里,我們通過interface來定義接口,通過implements來實現接口。

interface Animal {      void move();      void shout(); }  class Dog implements Animal {      @Override     public void move() {         System.out.println("我會走");     }      @Override     public void shout() {         System.out.println("我會叫");     } }
登錄后復制

而Go則是通過鴨子類型推斷,只要某個對象長得想鴨子,叫起來像鴨子,那么它就是鴨子。也就是說,Go的接口是比較隱匿的,只要某個對象實現來接口申明的所有方法,那么就認為它屬于該接口。

type Animal interface {  	move() 	shout() }  type Cat struct { 	Animal // 匿名聚合 }  func (Cat)move()  { 	fmt.Println("貓會走") }  func (Cat)shout()  { 	fmt.Println("貓會叫") }  type Dog struct { 	Animal  // 匿名聚合 }   func (Dog)move()  { 	fmt.Println("狗會走") }  func (Dog)shout()  { 	fmt.Println("狗會叫") }  func main() { 	cat := Cat{} 	dog := Dog{}     // 申明接口數組  	animals := []Animal{cat, dog} 	for _,ele := range animals {         // 統一訪問 		ele.move() 		ele.shout() 	} }
登錄后復制

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
欧美激情一区二区三区在线| 日产精品一区二区| 轻点灬大JI巴太粗太长了| 人妻少妇伦在线麻豆M电影| 日本丰满少妇XXXX| 丝袜足控一区二区三区| 新妺妺窝人体色WWW| 亚洲国产精品成人久久久| 伊人色综合视频一区二区三区| 42岁女子20天断崖式衰老| 把腿张开老子CAO烂你NP皇宫| 高h乱好爽要尿了潮喷了| 国产亚洲精久久久久久无码77777| 精品无人码麻豆乱码1区2区| 男女后进式猛烈XX00动态图片| 人妻无码一区二区三区蜜桃视频| 挺进大幂幂的滋润花苞御女天下 | 国产精品成人观看视频国产奇米 | 国产交换配乱婬视频偷| 火柴人战争遗产破解版| 末发育娇小性色XXXXX视频| 播放灌醉水嫩大学生国内精品| 国产成人精品无码A区在线观看 | 亚洲AV无码专区在线电影成人| 亚洲无日韩码精品| ZOZOTOWN| 国产男男GAY做受ⅩXX高潮| 久久久国产精品ⅤA麻豆LL| 欧美性猛交一区二区三区精品| 调教小SAO货撅起打屁股作文 | 精品亚洲国产成人AV在线| 拧花蒂尿用力按凸起喷水尿视频| 色综合久久成人综合网五月| 亚洲国产在一区二区三区| 99久久99久久免费精品蜜桃| 国产精品VA尤物在线观看| 久久久久亚洲AV无码去区首| 日韩AⅤ无码AV一区二区三区| 亚洲AV日韩AV永久无码免下载 | 亚洲熟妇久久精品| 潮喷失禁大喷水AⅤ无码| 黑人巨根后入娇小女孩| 欧美性受XXXX白人性爽| 亚洲AVAV电影AV天堂18禁 | 亚洲AV纯肉无码精品动漫 | 一本之道加勒比在线观看| 草莓丝瓜榴莲绿巨人WWW| 狠狠精品久久久无码中文字幕| 欧美高清精品一区二区| 亚洲 无码 国产精品| 99精产国品一二三产区区别网站| 国产精品毛片完整版视频| 免费一对一真人视频APP| 香蕉久久一区二区不卡无毒影院| 377人体粉嫩噜噜噜| 国产亚洲成AV人片在线观黄桃| 欧美精品V国产精品V日韩精品| 小宝贝下面的小嘴流水了| AV在线亚洲AV 是全亚洲| 很嫩很紧直喷白浆在线| 日本夜爽爽一区二区三区| 亚洲欧洲日产V一个人免费观看视频WWW高清 | 天天躁日日躁狠狠躁婷婷高清 | 放荡大屁股少妇高潮喷水| 久久人妻无码一区二区三区AV| 日老太太毛茸茸B.内射| 一面膜上边一面膜下边日本| 国产精品边做奶水狂喷无码 | 差差差很疼视频30分钟无掩盖| 久久久国产成人一区二区| 凸凹人妻人人澡人人添| 985大学排名一览表| 精品人妻少妇敕草AV无码专区 | 国产成人精品日本亚洲专区不卡| 免费无遮挡禁18污污网站| 亚洲AV中文无码4区| 成人无码区免费A∨直播| 浪潮AV激情高潮国产精品| 亚洲AⅤ永久无码精品AA| 成人午夜精品久久久久久久| 老熟仑妇乱一区二区AV| 亚洲AV中文AⅤ无码AV浪潮| 高潮喷吹一区二区在线观看| 嫩草影院网站进入| 亚洲熟女乱色综合一区| 国产无人区码SUV| 日文文本乱码高清| 18日韩xxxx| 花色98堂新网名内容与理念| 为什么穿裙子方便打野| 被男人吃奶很爽的毛片| 妺妺窝人体色WWW在线下载 | 精品无码乱码AV| 午夜精品影视国产一区在线麻豆| 八戒八戒WWW资源高清| 免费国产VA在线观看中文字| 亚洲手机看片AV| 国语自产第1国语自产第10页| 特级做A爰片毛片免费69| 被滋润的娇妻疯狂呻吟| 欧美成人精品一区二区三区色欲| 一区二区三区午夜无码视频| 精品国产AⅤ无码一区二区蜜桃 | 国产午夜精华无码网站| 沈陽43歲熟女高潮視頻| 成人无码H动漫在线播放| 人妻精品久久久久中文字幕69 | 免费专区SM美脚践踏调教视频| 野花视频在线观看最新| 精品人妻久久久久久888| 亚洲AV无码专区在线电影APP| 国产精品亲子乱子伦XXXX裸 | 国产成人无码AV在线播放DVD| 人妻少妇乱子伦精品无码专区毛片 | 欧美精品免费观看二区| 13岁幼儿3OOO| 男人的天堂免费A级毛片无码| 在线观看激情无码成人AV| 久久久久久久久久久大尺度免费视| 亚洲国产婷婷六月丁香| 黑人与中国娇小美女AV在线| 亚洲AV无码专区春药在线观看| 国产香蕉97碰碰久久人人| 小SAO货边洗澡边CAO你| 国产精品亚洲А∨无码播放不卡| 婷婷蜜桃国产精品| 国产成人亚洲综合无码99| 天堂BT种子资源在线WWW| 国产成人无码专区| 无码一区二区三区久久精品| 国产乱子伦精品免费无码专区| 午夜视频体内射.COM.COM| 国产精品无码MV在线观看| 午夜香吻视频在线看免费| 国产一区二区三区在线电影| 亚洲AV无码国产一区二区三区不| 韩国乱码片免费看| 亚洲精品无码AV专区最新 | 日本XXX色视频| 饭桌上故意张开腿让公在线看| 十八女人毛片A级毛片水真多| 国产XXXX农村野外高潮HD发| 午夜天堂AV天堂久久久| 韩国无码AV片在线观看| 亚洲日本一线产区二线产区| 久久亚洲精品国产亚洲老地址| 尤物爽到高潮潮喷视频大全| 男女裸体下面进入的免费视频| e无遮挡粉嫩小泬久久久久久久| 日本适合十八岁以上的护肤品男 | 波多野结系列18部无码观看A| 搡老女人老妇女老熟妇| 国产精品无码无卡无需播放器| 亚洲AV成人在线播放| 久久精品人人爽人人爽| 最新系列国产专区|亚洲国产| 秋霞网一区二区三区| 国产ΑV在线ΑV天堂AⅤ国产| 亚洲AⅤ日韩AV电影在线观看| 精品无码日韩国产不卡AV| 中国熟妇毛多多裸交视频| 人妻人人添人妻人人爱| 国产成人AV一区二区三区不卡| 亚洲AV无码成人专区| 久久亚洲精品国产亚洲老地址| av一区二区三区| 天堂中文资源在线最新版下载| 含着她的花蒂啃咬高潮| 在线天天看片视频免费观看| 日本丶国产丶欧美色综合| 国产欧美日韩VA另类在线播放| 亚洲日产韩国一二三四区| 欧美激情一区二区三区| 丰满少妇A级毛片野外| 亚洲AV无码专区在线电影APP| 胯下娇喘的班主任| 成人午夜性A级毛片免费| 亚洲AVAV黄网站| 猫咪AV最新永久网址无码| 成人无码免费视频在线观看网址 | 邻居少妇很紧毛多水多| 办公室爆乳女秘在线观看| 亚州日本乱码一区二区三区| 烂货我捏烂你的奶| 成人久久免费网站| 亚洲国产精品一区二区成人片| 男j插女p无遮挡100%| 国产成人午夜在线视频A站 | 欧亚尺码专线欧洲B1B1| 国产清纯白嫩初高生在线观看| 中国高清WINDOWS视频软件| 色综合天天视频在线观看| 精品亚洲国产成人AV制服| JAPANESE日本护士HD| 亚洲AV色区一区二区三区| 妺妺窝人体色WWW美女| 国产精品VA无码一区二区| 真实国产老熟女粗口对白| 玩弄丰满少妇XXXXX性多毛| 两个奶头被吃到高潮什么感觉|