函數綁定方法
尚硅谷Golang課
函數綁定方法
方法:結構體的行為,自訂義的結構都可以有方法,方法是作用在指定類型上(綁定的)
方法就是跟一種類型綁定的函數,因為綁定數據類型了就可以偷雞,具體表現在省指針
定義方法時候寫的是func(a ABC) //後面怎樣調用都是值拷貝
定義方法時候寫的是func(a *ABC)//後面怎樣調用都是真實地址
要調用方法,只能透過那種類型的的數據變量 例如a1.ABC
package main
import (
"fmt"
)
type Person struct {
Name string
}
//給Person類型綁定一個方法
func (p Person) test() {
p.Name = "jack"
fmt.Println("test()=", p.Name)
}
//給Person類型添加一個speak方法,輸出xxx是好人
func (p Person) speak() {
fmt.Println(p.Name, "是一個好人")
}
//添加一個計算方法算+1...+100
func (p Person) count() {
res := 0
for i := 1; i <= 100; i++ {
res += i
}
fmt.Println(p.Name, "計算的結果是", res)
}
//添加一個計算方法算+1...+n
func (p Person) count2(n int) {
res := 0
for i := 1; i <= n; i++ {
res += i
}
fmt.Println(p.Name, "計算的結果是", res)
}
//添加一個方法計算2個值的和並返回
func (p Person) getSum(n1, n2 int) int {
return n1 + n2
}
//為了提高效率,通常把方法跟結構的指針綁定
type Circle struct {
radius float64
}
func (c *Circle) area() float64 {
c.radius = 10.0 //因為傳來的是指針,如果在函數裡改他就等於改真實地址了
return 3.14 * c.radius * c.radius //語法糖 本來應該是要寫(*c)來計算的
}
//給某方法實現方法String()
type Student struct {
Name string
Age int
}
func (stu *Student) String() string {
str := fmt.Sprintf("Name=%v Age=%v", stu.Name, stu.Age)
return str
}
//練習題
type MeUtils struct {
//123
}
func (mu MeUtils) Print(m int, n int) {
for i := 1; i <= m; i++ {
for j := 1; j <= n; j++ {
fmt.Print("*")
}
fmt.Println()
}
}
func main() {
var p Person
p.Name = "tom"
p.test() //調用方法
fmt.Println("main=", p.Name)
//test()//報錯的
//總的來說就是把test方法跟Person類型綁定,而這個test只能用Person類型調用
//傳的是形參 (函數裡的是一個副本)
//---------------------------------------------以下開始應用練習
p.speak()
p.count()
p.count2(1000)
res := p.getSum(10, 20)
fmt.Println(res)
//創建變量嘗試調用area
var c Circle
c.radius = 5.0
res2 := c.area() //語法糖 本來應該是要寫(&c).area()的
fmt.Println(res2)
//調用Student
stu1 := Student{
Name: "tom",
Age: 18,
}
//如果實現了*Student類型的String方法就會自動調用
fmt.Println(&stu1)
//練習題
var mu MeUtils
mu.Print(5, 10)
}
上次修改於 2021-08-01
此篇文章的評論功能已經停用。