十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本篇內(nèi)容主要講解“go語言中結(jié)構(gòu)體方法如何定義”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“go語言中結(jié)構(gòu)體方法如何定義”吧!
站在用戶的角度思考問題,與客戶深入溝通,找到晉寧網(wǎng)站設(shè)計與晉寧網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋晉寧地區(qū)。
go語言中結(jié)構(gòu)體方法的定義方法:1、定義一個結(jié)構(gòu)體,語法“type point struct {....}”;2、將結(jié)構(gòu)體作為接收者來定義結(jié)構(gòu)體方法,語法“func (接收者變量 接收者類型) 方法名(參數(shù)列表)(返回值列表){//方法體}”。Go語言中,接收者的類型可以是任何類型,不僅僅是結(jié)構(gòu)體,也可以是struct類型外的任何類型。
Go語言同時有函數(shù)和方法,方法的本質(zhì)是函數(shù),但是方法和函數(shù)又具有不同點。
函數(shù)function是一段具有獨立功能的代碼,可以被重復多次調(diào)用,從而實現(xiàn)代碼復用。
方法method是一個類的行為功能,只有該類的對象才能調(diào)用。
Go語言的方法method是一種作用于特定類型變量的函數(shù)。這種特定類型的函數(shù)叫做Receiver
接收者的概念類似于傳動面向?qū)ο笳Z言中的this或者self關(guān)鍵字。
Go語言的接收者強調(diào)了方法具有作用對象,而函數(shù)沒有作用對象。
Go語言中,接收者的類型可以是任何類型,不僅僅是結(jié)構(gòu)體,也可以是struct類型外的任何類型。(如整形、字符串、slice、map、甚至函數(shù)等)
只要接收者不同,則方法名可以一樣。
有重寫方法 無重載方法(不支持重載方法,也就是說,不能定義名字相同但是不同參數(shù)的方法)
定義結(jié)構(gòu)體方法
接收者可以是struct類型或非struct類型,可以是指針類型和非指針類型。
接收者中的變量在命名時,官方建議使用接收者類型的第一個小寫字母。
// 定義方法的語法格式:
func (接收者變量 接收者類型) 方法名(參數(shù)列表) (返回值列表){
//方法體
}
// 定義結(jié)構(gòu)體
type point struct {
X int
Y int
}
// 定義結(jié)構(gòu)體方法
func (p point) print() {
fmt.Println(p.X, p.Y)
}
指針接收者
go函數(shù)會復制每一個實參變量,如果一個實參太大而我們希望避免復制整個實參,可以使用指針來傳遞變量的地址。
指針接收者在調(diào)用方法的時候,編譯器會對變量進行隱式轉(zhuǎn)換。
type point struct {
X int
Y int
}
func (p point) Print() {
fmt.Println(p.X, p.Y)
}
func (p *point) ScaleBy(factor int) {
p.X *= factor
p.Y *= factor
}
func main() {
p := point{1,1}
ptr := &p
p.Print() //1. 正確
ptr.Print() //2. 正確
p.ScaleBy(2) //3. 正確
ptr.ScaleBy(2) //4. 正確
point{1,1}.Print() //5. 正確
(&point{1,1}).Print() //6. 正確
(&point{1,1}).ScaleBy( 2) //7. 正確
point{1,1}.ScaleBy( 2) //8. 錯誤
}
nil是一個合法的接收者:就像一些函數(shù)允許nil指針作為實參,方法的接收者允許是nil指針
// 定義結(jié)構(gòu)體
type A struct {
Data int
}
// 定義結(jié)構(gòu)體方法
func (a *A) FunPtrA() {
fmt.Println("FunPtrA")
}
func main() {
// 聲明結(jié)構(gòu)體變量
var ptrA *A
// 將 nil 賦值給結(jié)構(gòu)體變量
ptrA = nil
// 調(diào)用結(jié)構(gòu)體方法
ptrA.FunPtrA() //FunPtrA
}
方法的繼承與重寫
// 聲明 human 結(jié)構(gòu)體
type human struct {
name, phone string
age int8
}
// student 繼承 human 結(jié)構(gòu)體 所以繼承 human 的方法
type student struct {
human
school string
}
// employee 繼承 human 結(jié)構(gòu)體 所以繼承 human 的方法
type employee struct {
human
company string
}
// human 定義 sayHi 方法
func (h human) sayHi() {
fmt.Printf("我是%s,年齡%d,聯(lián)系方式%s \n", h.name, h.age, h.phone)
}
// 方法的繼承
func testMethod11(){
// student 繼承 human 所以有 sayHi 方法, employee 同理
s1 := student{human{"s1","138001",13},"第一中學"}
e1 := employee{human{"e1","138002",30},"第一企業(yè)"}
s1.sayHi() //我是s1,年齡13,聯(lián)系方式138001
e1.sayHi() //我是e1,年齡30,聯(lián)系方式138002
}
// 方法的重寫 此為重寫 非重載
func (s student) sayHi(){
fmt.Printf("我是%s,年齡%d,我在%s上學,聯(lián)系方式%s \n", s.name, s.age, s.school,s.phone)
}
func testMethod12(){
s1 := student{human{"s1","138001",13},"第一中學"}
s1.sayHi() //我是s1,年齡13,我在第一中學上學,聯(lián)系方式138001
}
面向過程與面向?qū)ο?/strong>
//面向過程
func Add01(a, b int) int {
return a + b
}
//面向?qū)ο?,方法:給某個類型綁定一個函數(shù)
type long int
//tmp叫接收者,接收者就是傳遞的一個參數(shù)
func (tmp long) Add02(other long) long {
return tmp + other
}
func main() {
var result int
result = Add01(1, 2) //普通函數(shù)調(diào)用方式
fmt.Println("result = ", result)
//定義一個變量
var a long = 2
//調(diào)用方式格式: 變量名,函數(shù)(所需參數(shù))
r := a.Add02(2)
fmt.Println("r = ", r)
}
到此,相信大家對“go語言中結(jié)構(gòu)體方法如何定義”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!