Go語言基礎 method

2021-07-22 08:33:07 字數 1852 閱讀 2845

我們在c語言中,struct中宣告函式,而go中則不能再struct中宣告函式。而是採用另外一種形態存在,go中叫method。

method是附屬在乙個給定的型別上,語法和函式的宣告語法幾乎一樣,只是再func後面增加了乙個recevier(也就是method所依從的主體)

func

(r receivertype)

funcname

(parameters)

(results)

形象一點說,就是 receivertype 型別的所有字段,方法 funcname 都是可以使用的,可以認為 funcname 屬於 receivertype。

package main

import (

"fmt"

"math"

)type rectangle struct

type circle struct

func (r rectangle) area() float64

func (c circle) area() float64

func main()

r2 := rectangle

c1 := circle

c2 := circle

fmt.println("area of r1 is: ", r1

.area())

fmt.println("area of r2 is: ", r2

.area())

fmt.println("area of c1 is: ", c1.area())

fmt.println("area of c2 is: ", c2.area())

}

輸出:

area of r1 is:  24

area of r2 is: 36

area of c1 is: 314.1592653589793

area of c2 is: 1963.4954084936207

rect 和 circle 以及附屬在他們身上的 area() 方法關係如下圖所示:

格式:

func

(r *receivertype)

funcname

(parameters)

(results)

看例子:

package main

import

"fmt"

type person struct

func (p *person) setperson(name string, age int32)

func main()

輸出:

uu_dou

15

如果上例中的 receiver 不是指標,則輸出:

//name什麼都沒有

0//age 預設為0

對比前面乙個例子,不難發現不管 method 中的 receiver 是值傳遞,還是指標,都是通過. 符號訪問,因為 go 知道 receiver 是不是指標。

繼承:如果 struct 中的乙個匿名段實現了乙個 method,那麼包含這個匿名段的 struct 也能呼叫該 method。

重寫:如果 struct 中的乙個匿名段實現了乙個 method,包含這個匿名段的 struct 是可以重寫匿名欄位的方法的。

GO語言基礎之method

方法 method 1.go 中雖沒有 class,但依舊有 method 2.通過顯示說明 receiver 來實現與某個型別的組合 3.只能為同乙個包中的型別定義方法 4.receiver 可以是型別的值或者指標 5.不存在方法過載 6.可以使用值或指標來呼叫方法,編譯器會自動完成轉換 7.從某...

go語言學習筆記 方法 method

理解 go語言中的方法也是函式的一種,只不過在func和函式名之間增加了引數 型別接收器 接收器的型別可以是自定義的結構體或者非結構體型別,也可以是重定義的基本型別如int string或指標型別,支援在方法內部訪問該引數。語法 func param type methodname 下面我們用乙個例...

Go 語言基礎

go 語言內建的運算子有 1.算術運算子 2.關係運算子 3.邏輯運算子 4.位運算子 將其先轉換為二進位制數,在根據如下表規則 p q p q p q p q 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1如假定 a 60 b 13 其二進位制數轉換為 a 0011...