Go學習 8 方法

2021-10-20 01:36:17 字數 2751 閱讀 3889

--

----

----

----

----接收者

|----

----

----

--接收者型別

||func

(t type)

methodname

(parameter list)||

----

----

----

--相當於給接受者t新增了函式methodname,類似於js中的物件導向,給類新增方法,只不過go沒有物件導向,所以這麼搞||

----

----

----

--這樣的話,呼叫methodname就需要t.

methodname

()來呼叫了

package main

import

("fmt"

)type employee struct

// 定義乙個方法

func

(e employee)

displaypersoninfo()

func

main()

// 使用方法

emp.

displaypersoninfo()

}

type employee struct

func

(e employee)

displaypersonname

(newname string

)func

(e *employee)

displaypersonage

(newage int

)func

main()

fmt.

println

(emp.name)

// sam

emp.

displaypersonname

("newsam"

) fmt.

println

(emp.name)

// sam

fmt.

println

(emp.age)

// 18

(&emp)

.displaypersonage(20

) fmt.

println

(emp.age)

// 20

(emp)

.displaypersonage(21

) fmt.

println

(emp.age)

// 21

}

對於複製結構體資料來說,也可以使用指標接收者

package main

import

("fmt"

)type address struct

type employee struct

func

(a address)

displayaddress()

func

main()

city:

"new york",}

,// 這裡要加逗號

}// 呼叫displayaddress,可以用如下兩種方式呼叫:

emp.

displayaddress()

// new york

emp.address.

displayaddress()

// new york

}

type rectangle struct

func

area

(r rectangle)

func

(r rectangle)

area()

func

main()

area

(r) r.

area()

p :=

&r // 這是指標,方法可以接收,函式不行

p.area()

//calling value receiver with a pointer

}

type rectangle struct

func

perimeter

(r *rectangle)

func

(r *rectangle)

perimeter()

func

main()

p :=

&r //pointer to r

perimeter

(p)// 函式引數只能是指標

p.perimeter()

// 方法接收者可以是指標

r.perimeter()

// 方法接收者也可以是值

}

舉例:

package main

func

(a int

)add

(b int

)func

main()

package main

var newint int

func

(a newint)

add(b int

)func

main()

Go學習 10 方法

go 語言中同時有函式和方法。乙個方法就是乙個包含了接受者的函式,接受者可以是命名型別或者結構體型別的乙個值或者是乙個指標。所有給定型別的方法屬於該型別的方法集 方法只是乙個函式,它帶有乙個特殊的接收器型別,它是在func關鍵字和方法名之間編寫的。接收器可以是struct型別或非struct型別。接...

8 方法引用

8 方法引用 呼叫特定方法的lambda表示式的一種快捷寫法,可以讓你重複使用現有 的方法定義,並像lambda表示式一樣傳遞他們。sku getskuprice 目標引用 方法名 具體實現 1 指向靜態方法的方法引用 string number integer parseint 2 指向任意型別例...

Go系列(二) 方法

方法宣告 package geometry import math type point struct type path point 函式 func distance p,q point float64 方法 p 方法的接收器 func p point distance q point float...