Go物件導向三之結構體方法

2022-09-14 02:12:08 字數 1634 閱讀 7508

一:結構體方法定義

type student struct 

//stu可以看做student的副本,stu就代表student

func (stu student) say() string

二:簡單舉例

package main

import (

"fmt"

)type personal struct

func (p personal) say()

結果[ `go run struct1.go` | done ]

張三今年18

三:結構體方法使用細節

①:結構體型別是值型別,在方法呼叫中,遵守值型別的傳遞規則

②:如果希望在方法中的修改結構體變數,可以使用指標方法

package main

import (

"fmt"

)type circle struct

func (c *circle) area() float64

func main()

結果[ `go run struct1.go` | done ]

12 314

10

③:自定義型別也可以有方法,而不僅僅是結構體(struct),如:int,float64;

④:方法的訪問控制方法和函式一樣,不再闡述;

⑤:如果乙個結構體實現string()方法,fmt.println()預設呼叫string方法

package main

import (

"fmt"

)type moren struct

func (s moren) string() string

func main()

結果[ `go run struct1.go` | done ]

預設呼叫

四:構造體方法與普通函式的區別

①:呼叫方式

普通函式->函式名()

方法--->變數.方法名()

②:普通函式,接受者為值型別時,不能把指標型別傳遞給接受者,反之亦然;而構造體方法的接受者為值型別時,同樣可以使用指標傳遞資料,反之亦然。

五:方法傳參的本質

真正確定是值型別還是指標型別,由方法和那個型別繫結決定。

如(s moren)就是值型別,無論是值傳遞還是指標傳遞,本質還是值傳遞(go底層進行了優化處理),反之亦然。

六:工廠模式

當結構體是小寫字母開頭,但又要被其他包引用時,可以通過工廠模式來解決。

package bao

type students struct

//工廠模式的宣告方式

func gc(name string, age int) *students

}

其他包呼叫

package main

import (

"fmt"

"go_code/project01/bao"

)func main()

結果[ `go run struct1.go` | done ]

備註:同樣的道理可用在都是小寫字母開頭的字段和方法上。

Go 物件導向之結構體

說明 1.將一類事物的特性提取出來 比如貓類 形成乙個新的資料型別就是乙個結構體 2.通過這個結構體,可以建立多個變數 例項 物件 3.事物可以是貓類,也可以是其它的類.案例 package main import fmt 定義乙個結構體,類似於類 將cat 的各個字段 屬性,放入到結構體中 typ...

go 修改結構體方法 go結構體方法

golang中的方法是作用在特定型別的變數上,因此自定義型別,都可以有方法,而不僅僅是struct。定義格式 func var struct name funcname var0,var1.return type package main import fmt type test struct na...

Go 結構體,結構體指標和方法

結構體 講乙個或多個變數組合到一起形成新的型別,這個型別就是結構體,結構體是值型別 定義結構體和賦值 learn go main.go package main import fmt type people struct func main fmt.printf p peo 0x110040f0 賦...