国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

在政府網(wǎng)站建設(shè)工作會(huì)上的講話百度推廣的方式有哪些

在政府網(wǎng)站建設(shè)工作會(huì)上的講話,百度推廣的方式有哪些,閔行做網(wǎng)站的公司,手機(jī)網(wǎng)站 怎么開發(fā)go貌似都沒(méi)有聽(tīng)說(shuō)過(guò)繼承,當(dāng)然這個(gè)繼承不像c中通過(guò)class類的方式去繼承,還是通過(guò)struct的方式,所以go嚴(yán)格來(lái)說(shuō)不是面向?qū)ο缶幊痰恼Z(yǔ)言,c和java才是,不過(guò)還是可以基于自身的一些的特性實(shí)現(xiàn)面向?qū)ο蟮墓δ?amp;#xff0c;面向…

go貌似都沒(méi)有聽(tīng)說(shuō)過(guò)繼承,當(dāng)然這個(gè)繼承不像c++中通過(guò)class類的方式去繼承,還是通過(guò)struct的方式,所以go嚴(yán)格來(lái)說(shuō)不是面向?qū)ο缶幊痰恼Z(yǔ)言,c++和java才是,不過(guò)還是可以基于自身的一些的特性實(shí)現(xiàn)面向?qū)ο蟮墓δ?#xff0c;面向?qū)ο笕筇匦?#xff1a;封裝、繼承、多態(tài)

封裝

屬性

go是接住結(jié)構(gòu)體struct實(shí)現(xiàn)類的聲明,比如要定義個(gè)學(xué)生類,學(xué)生類和animal類是面向?qū)ο笫纠榻B中重點(diǎn),可以通過(guò)如下方式實(shí)現(xiàn):

type Student struct {id uintname stringmale boolscore float64
}

結(jié)構(gòu)體名或者說(shuō)類名為 Student,并且包含了 idname、male、score 四個(gè)屬性,Go 語(yǔ)言中也不支持構(gòu)造函數(shù)、析構(gòu)函數(shù),取而代之地,可以通過(guò)定義形如 NewXXX 這樣的全局函數(shù)(首字母大寫)作為類的初始化函數(shù)

func NewStudent(id uint, name string, male bool, score float64) *Student {return &Student{id, name, male, score}
}

在這個(gè)函數(shù)中,我們通過(guò)傳入的屬性字段對(duì) Student 類進(jìn)行初始化并返回一個(gè)指向該類的指針

在 Go 語(yǔ)言中,未進(jìn)行顯式初始化的變量都會(huì)被初始化為該類型的零值,例如 bool 類型的零值為 false,int 類型的零值為 0,string 類型的零值為空字符串,float 類型的零值為 0.0。接著就可以調(diào)用了
在這里插入圖片描述

package main
import ("fmt"student2 "student/stu"
)
func main() {student := student2.NewStudent(1, "zhiyu",false, 100)fmt.Println(student)
}

成員函數(shù)

getXXX方法

要為 Go 類定義成員方法,需要在 func 和方法名之間聲明方法所屬的類型(有的地方將其稱之為接收者聲明),以 Student 類為例,要為其定義獲取 name 值的方法,可以這么做:

func (s Student) GetName() string {return s.name
}

這樣就可以使用GetName方法獲取name屬性,通過(guò)在函數(shù)簽名中增加接收者聲明的方式定義了函數(shù)所歸屬的類型,這個(gè)時(shí)候,函數(shù)就不再是普通的函數(shù),而是類的成員方法了

setXXX方法

getName是一個(gè)只讀方法,setName是一個(gè)可寫的方法,所以需要使用指針的方式進(jìn)行傳參,在類的成員方法中,可以通過(guò)聲明的類型變量來(lái)訪問(wèn)類的屬性和其他方法

func (s *Student) SetName(name string) {s.name = name
}

可以把接收者類型為指針的成員方法叫做指針?lè)椒?/code>,把接收者類型為非指針的成員方法叫做值方法,二者的區(qū)別在于值方法傳入的結(jié)構(gòu)體變量是值類型(類型本身為指針類型除外),因此傳入函數(shù)內(nèi)部的是外部傳入結(jié)構(gòu)體實(shí)例的值拷貝,修改不會(huì)作用到外部傳入的結(jié)構(gòu)體實(shí)例.

另外,需要聲明的是,在 Go 語(yǔ)言中,當(dāng)我們將成員方法 SetName 所屬的類型聲明為指針類型時(shí),嚴(yán)格來(lái)說(shuō),該方法并不屬于 Student 類,而是屬于指向 Student 的指針類型,所以,歸屬于 Student 的成員方法只是 Student 類型下所有可用成員方法的子集,歸屬于 *Student 的成員方法才是 Student 類完整可用方法的集合。

在調(diào)用值方法和指針?lè)椒〞r(shí),需要記住以下兩條準(zhǔn)則:

  1. 值方法可以通過(guò)指針和值類型實(shí)例調(diào)用,指針類型實(shí)例調(diào)用值方法時(shí)會(huì)自動(dòng)解引用;
  2. 指針?lè)椒ㄖ荒芡ㄟ^(guò)指針類型實(shí)例調(diào)用,但有一個(gè)例外,如果某個(gè)值是可尋址的(或者說(shuō)左值),那么編譯器會(huì)在值類型實(shí)例調(diào)用指針?lè)椒〞r(shí)自動(dòng)插入取地址符,使得在此情形下看起來(lái)像指針?lè)椒ㄒ部梢酝ㄟ^(guò)值來(lái)調(diào)用

左值和右值

結(jié)合上面的兩條準(zhǔn)則使用示例說(shuō)明如下:

package mainimport "fmt"
type Student struct {id    uintname  stringscore float64
}func NewStudent(id uint, name string, score float64) *Student {return &Student{id: id, name: name, score: score}
}func NewStudentV2(id uint, name string, score float64) Student {return Student{id: id, name: name, score: score}
}func (s Student) GetName() string {return s.name
}func (s *Student) SetName(name string) {s.name = name
}func main() {s := NewStudent(1, "zhiyu", 100)s.SetName("zhiyu-1")       // ok 正常調(diào)用指針?lè)椒?/span>fmt.Println(s.GetName()) // ok 指針調(diào)用值方法自動(dòng)解引用: (*s).GetName()s2 := NewStudentV2(2, "zhiyu", 90)s2.SetName("zhiyu-2")       // ok s2 是可尋址的左值,所以實(shí)際調(diào)用: (&s2).SetName("zhiyu-2")fmt.Println(s2.GetName()) // ok 正常調(diào)用值方法NewStudent(3, "zhiyu", 80).SetName("zhiyu-3")   // ok 正常調(diào)用指針?lè)椒?/span>NewStudentV2(4, "zhiyu", 99).SetName("zhiyu-4") // err 值類型調(diào)用指針?lè)椒?/span>
}

之所以可以直接在 s2 值實(shí)例上調(diào)用 SetName 指針?lè)椒?#xff0c;是因?yàn)?s2 是可尋址的,Go 語(yǔ)言底層會(huì)自動(dòng)將 s2 轉(zhuǎn)化為對(duì)應(yīng)的指針類型 &s2,所以真正調(diào)用的代碼是 (&s2).SetName("zhiyu-2"),而通過(guò) NewStudentV2(…)返回實(shí)例調(diào)用 SetName 時(shí),則會(huì)報(bào)錯(cuò),因?yàn)?NewStudentV2(…) 是一個(gè)不可以尋址的右值。

所謂左值就是可以出現(xiàn)在賦值等號(hào)左邊的值,而右值只能出現(xiàn)在賦值等號(hào)右邊,比如函數(shù)返回值、字面量、常量值等。左值可尋址,右值不可尋址。

總結(jié)下來(lái),就是一個(gè)自定義數(shù)據(jù)類型的方法集合中僅會(huì)包含它的所有「值方法」,而該類型對(duì)應(yīng)的指針類型包含的方法集合才囊括了該類型的所有方法,包括所有「值方法」和「指針?lè)椒ā?#xff0c;指針?lè)椒梢孕薷乃鶎兕愋偷膶傩灾?#xff0c;而值方法則不能。

值方法|指針?lè)椒?/h3>

有如下情形的考量時(shí),需要將類方法定義為指針?lè)椒?#xff1a;

  • 數(shù)據(jù)一致性:方法需要修改傳入的類型實(shí)例本身;
  • 方法執(zhí)行效率:如果是值方法,在方法調(diào)用時(shí)一定會(huì)產(chǎn)生值拷貝,而大對(duì)象拷貝代價(jià)很大。

通常我們都會(huì)選擇定義指針?lè)椒?/p>

繼承

Go 雖然沒(méi)有直接提供繼承相關(guān)的語(yǔ)法實(shí)現(xiàn),但是通過(guò)組合的方式間接實(shí)現(xiàn)類似功能,所謂組合,就是將一個(gè)類型嵌入到另一個(gè)類型,從而構(gòu)建新的類型結(jié)構(gòu)。使用了Student類介紹封裝,接著使用Animal示例繼承
在這里插入圖片描述

package anitype Animal struct {Name string
}func (a Animal) Call() string {return "動(dòng)物叫聲"
}func (a Animal) FavorFood() string {return "愛(ài)吃的食物..."
}func (a Animal) GetName() string {return a.Name
}

所有的動(dòng)物都有以上的三種方法,現(xiàn)在Dog實(shí)現(xiàn)繼承Animal,新增一個(gè)dog.go,一般會(huì)給自家的愛(ài)狗起一個(gè)別名

package anitype Dog struct {AnimalAlias string
}func (d Dog) GetAliasName() string {return d.Alias
}

main.go中如下所示

package mainimport ("animal/ani""fmt"
)func main() {animal := ani.Animal{"旺財(cái)"}dog := ani.Dog{animal, "旺旺"}fmt.Println(dog.GetName())fmt.Println(dog.Call())fmt.Println(dog.GetAliasName())
}

在這里插入圖片描述
這就實(shí)現(xiàn)了繼承的功能。注意在初始化子類時(shí)的順序和struct中的定義順序是一致的
在這里插入圖片描述

多態(tài)

所謂多態(tài)就是一個(gè)函數(shù)的多種形態(tài),比如在子類中定義同名函數(shù)來(lái)覆蓋父類方法,專業(yè)屬于稱之為方法重寫。每個(gè)動(dòng)物的喜歡吃的食物和叫聲不同,這里實(shí)現(xiàn)下Dog重寫方法,在dog.go

package anitype Dog struct {AnimalAlias string
}func (d Dog) GetAliasName() string {return d.Alias
}func (d Dog) FavorFood() string {return "大棒骨"
}func (d Dog) Call() string {return "旺旺"
}

重寫go build,并在terminal中在animal根目錄下
在這里插入圖片描述
當(dāng)然子類也可以直接調(diào)用父類Animal中的方法

fmt.Print(dog.Animal.Call())
fmt.Println(dog.Call())
fmt.Print(dog.Animal.FavorFood())
fmt.Println(dog.FavorFood())
http://aloenet.com.cn/news/31176.html

相關(guān)文章:

  • 有什么網(wǎng)站用名字做圖片大全鄭州網(wǎng)絡(luò)公司排名
  • 北京網(wǎng)站公司免費(fèi)推廣網(wǎng)站有哪些
  • 怎么把視頻做成網(wǎng)頁(yè)鏈接搜索引擎優(yōu)化是做什么的
  • 上海網(wǎng)站推廣 優(yōu)幫云4001688688人工服務(wù)
  • 南昌網(wǎng)站建設(shè)網(wǎng)站推廣買外鏈有用嗎
  • 網(wǎng)站建設(shè)與web前端區(qū)別電商運(yùn)營(yíng)的基本內(nèi)容
  • 邢臺(tái)有什么網(wǎng)站營(yíng)銷推廣的平臺(tái)
  • 武進(jìn)網(wǎng)站建設(shè)價(jià)位免費(fèi)投放廣告的平臺(tái)
  • 網(wǎng)絡(luò)營(yíng)銷自己做網(wǎng)站百度怎么發(fā)廣告
  • 內(nèi)容企業(yè)推廣河南seo網(wǎng)站多少錢
  • wordpress chastityseo是什么工作內(nèi)容
  • 企業(yè)網(wǎng)站推廣策略百度快速提交入口
  • 手機(jī)怎么做黑網(wǎng)站互聯(lián)網(wǎng)營(yíng)銷培訓(xùn)班
  • 營(yíng)銷網(wǎng)站建設(shè)是什么網(wǎng)站設(shè)計(jì)的流程
  • 新博念 足球網(wǎng)站開發(fā)天津疫情最新情況
  • 成都網(wǎng)站建設(shè)定制開發(fā)系統(tǒng)淘寶關(guān)鍵詞搜索量查詢工具
  • 玉溪哪有網(wǎng)站建設(shè)服務(wù)公司想要推廣頁(yè)
  • 網(wǎng)頁(yè)設(shè)計(jì)英文青島關(guān)鍵詞優(yōu)化平臺(tái)
  • 拓普網(wǎng)站建設(shè)seo點(diǎn)擊優(yōu)化
  • 如果你會(huì)建網(wǎng)站外貿(mào)新手怎樣用谷歌找客戶
  • 網(wǎng)站推廣適合哪種公司做明星百度指數(shù)排名
  • 網(wǎng)站標(biāo)題堆砌關(guān)鍵詞國(guó)際足聯(lián)世界排名
  • 免費(fèi)建立個(gè)人網(wǎng)站促銷策略的四種方式
  • 企業(yè)管理咨詢公司招聘成都自動(dòng)seo
  • 廈門網(wǎng)站建設(shè)多少錢軟文編輯器
  • 廈門服裝企業(yè)網(wǎng)站推廣最新小組排名
  • 做網(wǎng)站重要標(biāo)簽成都seo優(yōu)化排名推廣
  • .net網(wǎng)站開發(fā)文檔教育培訓(xùn)網(wǎng)站模板
  • 國(guó)家高新技術(shù)企業(yè)證書圖片北京seo分析
  • 程序員做博彩類的網(wǎng)站犯法嗎青島網(wǎng)站建設(shè)運(yùn)營(yíng)推廣