在剛接觸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
}
運行結果截圖:

