GO學習筆記 - 函數名前面是否有輸入參數肯定是不一樣的!!


在剛接觸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
}

運行結果截圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM