--
----
----
----
----接收者
|----
----
----
--接收者型別
||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...