`

golang的函数与方法,还是有区别的

 
阅读更多

今天看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函数以及函数和方法的区别.docx

    ### Golang中的函数与方法详解 #### 一、引言 在编程领域,不同语言对“函数”和“方法”的定义可能有所不同。在C/C++、Python和Java等语言中,“函数”和“方法”通常被视为同一概念的不同叫法。然而,在Golang中...

    golang 函数以及函数和方法的区别.docx

    方法与函数的主要区别在于,方法是附属于某个类型的,它有一个特殊的参数称为接收者。接收者可以是结构体、接口或其他自定义类型,甚至可以是基本类型。方法定义的语法如下: ```go func (接收者类型 接收者名称) ...

    golang 函数以及函数和方法的详解及区别

    在Golang中,函数和方法是两种不同的概念,尽管它们在其他编程语言中可能看起来相似。函数是独立的代码块,可以接收参数并返回值,而方法是与特定类型关联的函数,通常用于扩展该类型的功能。理解这两种概念对于编写...

    golang小知识总结.docx

    本文总结了Go语言的多个小知识点,涵盖了new()与make()的区别、变量声明和赋值、结构体的比较、结构体嵌套、nil赋值、init函数、类型选择和数组、切片操作符等方面。 1. new()与make()的区别:new()函数用于分配...

    Golang晋级开发高手精编100题

    在探讨Golang晋级开发高手精编100题的相关知识点之前,有必要先对Go语言(Golang)做一个基础介绍。Go语言是一种静态类型、编译型的编程语言,由Google开发,设计目的是为了提高编写简单、可靠和高效软件的便利性。...

    golang book

    本节详细介绍了`new`函数的用法及其与`make`函数的区别。 #### 九、结构体与接口 **9.1 结构体** 结构体是一种自定义的数据类型,它可以包含不同类型的字段。这部分内容详细介绍了如何定义和使用结构体,并通过实例...

    Go-ZSocket是LinuxZero-copysockets的一个Golang封装库

    Go-ZSocket库的使用,首先需要对Golang语言有一定的了解,包括其语法特性、内存管理和并发模型。同时,开发者还需要理解套接字(Sockets)的基本概念,如流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM),...

    Golang中的int类型和uint类型到底有多大?

    #### 二、int与uint的区别 为了更直观地理解int和uint的区别,我们可以看下面这段示例代码: ```go package main import ( "fmt" ) func main() { a := byte(255) // 11111111 这是byte的极限 b := uint8(255)...

    golang面试必备(面试题)

    - **切片与数组**:理解切片与数组的区别,切片的动态扩展机制,以及切片操作的安全性。 - **Map**:熟悉map的使用,包括创建、遍历、删除元素,以及并发安全问题。 3. **并发编程** - **Goroutine**:了解...

    golang中make和new的区别示例详解

    ### Golang中make和new的区别详解 #### 前言 在Go语言中,`new`和`make`是两个非常重要的关键字,主要用于创建新的数据结构。然而,这两个关键字之间存在明显的区别,对于初学者来说很容易混淆。本文将详细介绍`...

    golang中值类型/指针类型的变量区别总结

    在Golang中,值类型和指针类型是两种基本的变量类型,它们有着显著的区别,尤其是在函数调用和方法接收者方面。值类型包括整型(int)、浮点型(float)、布尔型(bool)和字符串(string)等,它们的变量直接存储在...

    golang培训.docx

    Go 语言,也被称为 Golang,是由 Google 开发的一种现代化的、高效的编程语言。自 2010 年发布以来,它在全球编程语言排名中的位置显著提升,这表明其在开发界的受欢迎程度日益增长。Go 语言因其简洁的语法、强大的...

    golang源码剖析

    并发调度章节是另一个核心内容,讨论了Golang中goroutine的实现机制,以及它与传统的coroutine之间的区别。作者通过对比其他语言的实现,来深入挖掘goroutine的工作原理。这部分内容不仅为读者提供了理论知识,还...

    大厂Golang开发工程师面试题集锦.rar

    - **并行与并发的区别**:理解这两个术语的含义及其在Go中的体现。 - **Go的12准则**:遵循这些规则可以编写出高效且易于维护的Go代码。 5. **Go语言实战** - **微服务开发**:如何利用Go构建高性能、可扩展的...

    golang中struct和interface的基础使用教程

    go中的struct类型理解为类,可以定义方法,和函数定义有些许区别;struct类型是值类型。 struct定义 type User struct { Name string Age int32 mess string } var user User var user1 *User = &User{} var ...

    Golang大厂面试题及知识图谱

    - **内存分配**:栈与堆的区别,以及Go中的逃逸分析。 4. **Go标准库** - **net/http**:用于网络编程,理解如何编写Web服务器和客户端。 - **context**:管理请求上下文,用于取消、超时和传递请求相关的信息。...

    学习 Go 语言(Golang)最佳中文教程

    Go 语言,又被称为 Golang,是由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 于2007年设计并开发的一种静态类型的编译式编程语言...无论你是初学者还是有一定经验的开发者,这都将是一份有价值的参考资料。

    golang之反射和断言的具体使用

    断言是Golang中用来判断接口变量实际存储的类型的方法。它通常采用以下形式: ```go value, ok := i.(T) ``` 这里,`i`是一个接口变量,`T`是我们想要断言的类型,`value`是断言后得到的值,`ok`是一个布尔值,...

    浅析golang 正则表达式

    `regexp`包中有一些函数允许用户检查字符串是否符合正则表达式模式,如`MatchString`函数可以检查整个字符串是否与正则表达式模式匹配。 除了使用`regexp`包提供的函数外,还可以使用`Regexp`对象的方法,如`Find...

Global site tag (gtag.js) - Google Analytics