在剛接觸GO語言時候,我相信你也會有這種困惑,為什么有的函數名前面有輸入參數,而一些卻沒有,它們是否有差別?確實有差別,沒有輸入參數,是一般的函數;有輸入參數,是結構的方法,輸入參數叫做“方法接收者”!GO語言沒有類,方法都定義在結構上了!!
官方教程:
函 數:https://tour.go-zh.org/basics/4
結構體方法:https://tour.go-zh.org/methods/1
實例代碼:
main.go : 引入了“sunylat/demo”包,調用ShowStructFunc() 演示調用結構體函數。
package main import( "sunylat/demo" ) func main() { //演示結構函數 demo.ShowStructFunc() }
demo/structFunc.go : 調用mydata包ShowStructFunc()
package demo import ( "sunylat/mydata" "fmt" ) func ShowStructFunc() { //聲明結構函數輸入的變量 var ( idIn string nameIn string ) //給結構函數輸入的變量賦值 idIn = "this is id" nameIn = "this is name" //得到結構 ts := &mydata.TestStruct{} //調用結構函數1 idOut, nameOut := ts.StructFunc(idIn, nameIn) fmt.Println("StructFunc 函數輸出\n id : " + idOut + "\n name : " + nameOut) //----------------------------------------------------------------------- fmt.Println("-----------------------------------------------------------------------") //調用結構函數2 ts2:=ts.StructFunc2(idIn, nameIn) fmt.Println("StructFunc2 函數輸出\n id : " + ts2.Id + "\n name : " + ts2.Name) //----------------------------------------------------------------------- fmt.Println("-----------------------------------------------------------------------") //調用普通函數 outPut:=mydata.OrdinaryFunc("this is ","OrdinaryFunc()") fmt.Println("OrdinaryFunc 函數輸出\n "+outPut) }
mydata/export.go : 定義了兩個結構方法,返回值不一樣 ;定義了一個普通函數,用於區別結構方法和普通函數。
package mydata //自定義的結構,首字母大寫可以被導出,包括里面的字段首字母大寫才被輸出 type TestStruct struct { Id string Name string } //這是一個結構函數,返回兩個值,輸入為方法接收者 func (ts *TestStruct) StructFunc (idIn,nameIn string) (idOut,nameOut string){ ts.Id=idIn; ts.Name=nameIn; return ts.Id,ts.Name } //這是另外一個結構函數,返回結構,輸入為方法接收者 func (ts *TestStruct) StructFunc2 (idIn,nameIn string) TestStruct{ ts.Id=idIn; ts.Name=nameIn; return *ts } //這是普通函數,函數名前面沒有方法接收者 func OrdinaryFunc (input1,input2 string) (outPut string){ temp:=input1+input2 return temp }
運行結果截圖: