今天看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
相关推荐
### Golang中的函数与方法详解 #### 一、引言 在编程领域,不同语言对“函数”和“方法”的定义可能有所不同。在C/C++、Python和Java等语言中,“函数”和“方法”通常被视为同一概念的不同叫法。然而,在Golang中...
方法与函数的主要区别在于,方法是附属于某个类型的,它有一个特殊的参数称为接收者。接收者可以是结构体、接口或其他自定义类型,甚至可以是基本类型。方法定义的语法如下: ```go func (接收者类型 接收者名称) ...
在Golang中,函数和方法是两种不同的概念,尽管它们在其他编程语言中可能看起来相似。函数是独立的代码块,可以接收参数并返回值,而方法是与特定类型关联的函数,通常用于扩展该类型的功能。理解这两种概念对于编写...
本文总结了Go语言的多个小知识点,涵盖了new()与make()的区别、变量声明和赋值、结构体的比较、结构体嵌套、nil赋值、init函数、类型选择和数组、切片操作符等方面。 1. new()与make()的区别:new()函数用于分配...
在探讨Golang晋级开发高手精编100题的相关知识点之前,有必要先对Go语言(Golang)做一个基础介绍。Go语言是一种静态类型、编译型的编程语言,由Google开发,设计目的是为了提高编写简单、可靠和高效软件的便利性。...
本节详细介绍了`new`函数的用法及其与`make`函数的区别。 #### 九、结构体与接口 **9.1 结构体** 结构体是一种自定义的数据类型,它可以包含不同类型的字段。这部分内容详细介绍了如何定义和使用结构体,并通过实例...
Go-ZSocket库的使用,首先需要对Golang语言有一定的了解,包括其语法特性、内存管理和并发模型。同时,开发者还需要理解套接字(Sockets)的基本概念,如流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM),...
#### 二、int与uint的区别 为了更直观地理解int和uint的区别,我们可以看下面这段示例代码: ```go package main import ( "fmt" ) func main() { a := byte(255) // 11111111 这是byte的极限 b := uint8(255)...
- **切片与数组**:理解切片与数组的区别,切片的动态扩展机制,以及切片操作的安全性。 - **Map**:熟悉map的使用,包括创建、遍历、删除元素,以及并发安全问题。 3. **并发编程** - **Goroutine**:了解...
### Golang中make和new的区别详解 #### 前言 在Go语言中,`new`和`make`是两个非常重要的关键字,主要用于创建新的数据结构。然而,这两个关键字之间存在明显的区别,对于初学者来说很容易混淆。本文将详细介绍`...
在Golang中,值类型和指针类型是两种基本的变量类型,它们有着显著的区别,尤其是在函数调用和方法接收者方面。值类型包括整型(int)、浮点型(float)、布尔型(bool)和字符串(string)等,它们的变量直接存储在...
Go 语言,也被称为 Golang,是由 Google 开发的一种现代化的、高效的编程语言。自 2010 年发布以来,它在全球编程语言排名中的位置显著提升,这表明其在开发界的受欢迎程度日益增长。Go 语言因其简洁的语法、强大的...
并发调度章节是另一个核心内容,讨论了Golang中goroutine的实现机制,以及它与传统的coroutine之间的区别。作者通过对比其他语言的实现,来深入挖掘goroutine的工作原理。这部分内容不仅为读者提供了理论知识,还...
- **并行与并发的区别**:理解这两个术语的含义及其在Go中的体现。 - **Go的12准则**:遵循这些规则可以编写出高效且易于维护的Go代码。 5. **Go语言实战** - **微服务开发**:如何利用Go构建高性能、可扩展的...
go中的struct类型理解为类,可以定义方法,和函数定义有些许区别;struct类型是值类型。 struct定义 type User struct { Name string Age int32 mess string } var user User var user1 *User = &User{} var ...
- **内存分配**:栈与堆的区别,以及Go中的逃逸分析。 4. **Go标准库** - **net/http**:用于网络编程,理解如何编写Web服务器和客户端。 - **context**:管理请求上下文,用于取消、超时和传递请求相关的信息。...
Go 语言,又被称为 Golang,是由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 于2007年设计并开发的一种静态类型的编译式编程语言...无论你是初学者还是有一定经验的开发者,这都将是一份有价值的参考资料。
断言是Golang中用来判断接口变量实际存储的类型的方法。它通常采用以下形式: ```go value, ok := i.(T) ``` 这里,`i`是一个接口变量,`T`是我们想要断言的类型,`value`是断言后得到的值,`ok`是一个布尔值,...
`regexp`包中有一些函数允许用户检查字符串是否符合正则表达式模式,如`MatchString`函数可以检查整个字符串是否与正则表达式模式匹配。 除了使用`regexp`包提供的函数外,还可以使用`Regexp`对象的方法,如`Find...