golang的函数与方法,还是有区别的
程序员文章站
2024-03-17 20:21:28
...
今天看grafana代理的时候,发现函数前面还有参数一样的东西,这和学的东西不一样啊,太让人不淡定了,只能百度一下了。
func (proxy *DataSourceProxy) HandleRequest() {
if err := proxy.validateRequest(); err != nil {
proxy.ctx.JsonApiErr(403, err.Error(), nil)
return
}
如下来自网络:
在刚接触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
}
运行结果截图:
参考:
http://www.mamicode.com/info-detail-1692881.html