`

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高频面试题整理-面试题合集.zip

    面试者需要对goroutine的创建和管理、channel的使用、以及并发与并行的区别等有深入的理解。此外,对于并发问题的解决,如死锁、资源竞争等也是面试时经常出现的问题。 数据结构和算法同样是面试考察的重点。在...

    golang小知识总结.docx

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

    Golang开发实战学习(附源码),开发流程,入门实战,代码示例

    字符和字符串在Golang中有明确的区别:字符通常表示单个字符,而字符串则是字符的集合,可以包含多个字符。Golang提供了基本的运算符和赋值运算符,其中赋值运算符包括简单的“=”以及复合赋值运算符(如+=、-= 等)...

    GolangTraining-Golang教程

    在Golang教程的这部分内容中,将会介绍一些Go语言的高级特性,比如接口的使用、指针和值的区别,以及如何通过这些特性编写出更加高效、低延迟的代码。 对于任何想要学习Go语言的开发者来说,GolangTraining-Golang...

    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**:管理请求上下文,用于取消、超时和传递请求相关的信息。...

Global site tag (gtag.js) - Google Analytics