go語言學習之指示器——方法做用的目標

 

接收器——方法做用的目標

接收器的格式以下:函數

func (接收器變量 接收器類型) 方法名(參數列表) (返回參數) {
    函數體
}性能

對各部分的說明:this

  • 接收器變量:接收器中的參數變量名在命名時,官方建議使用接收器類型名的第一個小寫字母,而不是 self、this 之類的命名。例如,Socket 類型的接收器變量應該命名爲 s,Connector 類型的接收器變量應該命名爲 c 等。
  • 接收器類型:接收器類型和參數相似,能夠是指針類型和非指針類型。
  • 方法名、參數列表、返回參數:格式與函數定義一致。


接收器根據接收器的類型能夠分爲指針接收器、非指針接收器。兩種接收器在使用時會產生不一樣的效果。根據效果的不一樣,兩種接收器會被用於不一樣性能和功能要求的代碼中spa

 

 

// 指示器
package main 

import "fmt"

type Point struct {
    x int
    y int
}

func (p *Point) X() int{
    return p.x
}

func (p *Point) Y() int {
    return p.y
}

func (p *Point) setX(x int) {
     p.x = x
}

func (p *Point) setY(y int)  {
     p.y = y
}

func (p Point) X1() int{
    return p.x
}

func (p Point) Y1() int {
    return p.y
}

func (p Point) setX1(x int) {
     p.x = x
}

func (p Point) setY1(y int)  {
     p.y = y
}


func main(){
    // 指針指示器
    // 指針類型的接收器由一個結構體的指針組成,更接近於面向對象中的 this 或者 self。
    // 因爲指針的特性,調用方法時,修改接收器指針的任意成員變量,在方法結束後,修改都是有效的。
    point := new(Point)
    point.setX(10)
    point.setY(15)
    fmt.Println(point)
    
    // 非指針指示器
    // 當方法做用於非指針接收器時,Go 語言會在代碼運行時將接收器的值複製一份。
    // 在非指針接收器的方法中能夠獲取接收器的成員值,但修改後無效。
    point1 := Point{1,2};
    point1.setX1(10)
    point1.setY1(100)
    fmt.Println(point1)
}
相關文章
相關標籤/搜索