iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Go语言中的函数怎么调用
  • 737
分享到

Go语言中的函数怎么调用

2023-07-02 17:07:23 737人浏览 薄情痞子
摘要

本篇内容介绍了“Go语言中的函数怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.函数的声明定义//func关键字//getStud

本篇内容介绍了“Go语言中的函数怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.函数的声明定义

//func关键字//getStudent函数名//(id int, classId int) 参数列表//(name string,age int) 返回值列表func getStudent(id int, classId int)(name string,age int) {   //函数体  if id==1&&classId==1{      name = "BigOrange"     age = 26   }  //返回值    return name, age // 支持多重返回值}

有意思的是Go语言的返回值可以有多个,并且放在了参数列表后面,而C#等都是在函数名之前,也没有关键字。

2.函数的调用

import "fmt"//调用fmt包中的Println方法。fmt.Println("Name:", std.Name, "Age:",std.Age)

3.函数编写的原则

很好奇为什么没有public private等关键字,那函数怎么才能定义为公用和私有呢?

Go语言有这样的规则:小写字母开头的函数只在本包内可见,大写字母开头的函数才

能被其他包使用。这个规则也适用于类型和变量的可见性。

4.不定参数问题

不定参数是指函数传入的参数个数为不定数量。

func myfunc(args ...int) {     for _, arg := range args {     fmt.Println(arg)  }}

函数myfunc()接受不定数量的参数,这些参数的类型全部是int

※形如...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。

它是一个语法糖(syntactic sugar),即这种语法对语言的功能并没有影响,但是更方便程序员使用。

从内部实现机理上来说,类型...type本质上是一个数组切片,也就是[]type,这也是为

什么上面的参数args可以用for循环来获得每个传入的参数。

不定参数的传递

myfunc3(args ...int)

对应上面的这个函数,传递参数可以为下面两种

// 按原样传递myfunc3(args...)// 传递片段,实际上任意的int slice都可以传进去myfunc3(args[1:]...)

任意类型的不定参数

可以看到 fmt.Println()方法接受了不定参数,但它是 ...interface{}

Go语言中的函数怎么调用

用interface{}传递任意类型数据是Go语言的惯例用法。

5.多返回值

Go语言函数可以返回多个返回值

如果调用方调用了一个具有多返回值的方法,但是却不想关心其中的某个返回值,可以简单

地用一个下划线“_”来跳过这个返回值

6.匿名函数

Go语言支持随时在代码里定义匿名函数。

匿名函数由一个不带函数名的函数声明和函数体组成

func(a, b int, z float64) bool {     return a*b <int(z)}

匿名函数可以直接赋值给一个变量或者直接执行:(有点像js哈)

f := func(x, y int) int {     return x + y}
func(ch chan int) {    ch <- ACK} (reply_chan) // 花括号后直接跟参数列表表示函数调用

7.闭包

package mainimport (   "fmt")func main() {   var j int = 5   a := func()(func()) {      var i int = 10      return func() {         fmt.Printf("i, j: %d, %d\n", i, j)      }   }()   a()   j *= 2   a()}

结果:

i, j: 10, 5
i, j: 10, 10

分析:

1---"...func()(func()) {....."

表明此匿名函数返回值的类型是func(), 即此匿名函数返回一个函数指针(此处引用一下c 的概念);

2---"...returnfunc() {

fmt.Printf("i, j: %d, %d\n", i, j)

}..."

表明返回的函数指针指向一个打印i, j: %d, %d\n的函数;

3---"...a := func()(func()) {

...

}()..."

末尾的括号表明匿名函数被调用,并将返回的函数指针赋给变量a ;

综合来看:

"...a := func()(func()) {var i int = 10return func() {fmt.Printf("i, j: %d, %d\n", i, j)}}()..."

此代码片段的意思"等价于"

a := func() {fmt.Printf("i, j: %d, %d\n", i, j)}

至于为何要用匿名函数如此的转一圈,是因为要引用闭包的概念,此概念省略不表,多写点代码试试就能体会了。

补充:传值和传引用

Go语言中的函数怎么调用

1.type 定义一个类型,有两种方式

  • ①配合struct,创建一个新的结构,类似C#里面的Class

  • ②配合既存的类型(int64...),创建一个新的类型,类似c++里面的typedef

2.Struct的如果不进行赋值,会使用0值进行初始化。

3.type使用既存类型定义新结构,和既存类型不是同一个类型,不能进行转换,例如

package maintype Integer int64func main() {    var srcInt Integer     srcInt = int64(1000)}

结果:

Go语言中的函数怎么调用

4.方法和函数的区别

方法能给用户定义的类型添加新的行为。方法实际上也是函数,只是在声明时,在关键字func 和方法名之间增加了一个参数

例如:

这是函数,它的调用就是直接在使用的时候 传入参数获取返回值就行

func getStudentName(student Student)(name string) {    //返回值    return student.Name }

这是方法

package mainimport (    "fmt")type Student struct{       Name string    Age int}//Student类的方法 使用值接收者实现了一个方法func (student Student) getStudentName()(string){    return student.Name}//Student类的方法 使用指针接收者实现了一个方法func (student *Student) changeStudentName(name string){    student.Name = name    fmt.Println("方法执行之后name",student.Name)}//Student类的方法 使用指针接收者实现了一个方法func (student Student) changeStudentNameByValue(name string){    student.Name = name    fmt.Println("方法执行之后name",student.Name)}func main() {    bigOrange:=Student{        Name:"BigOrange",Age:18,    }    bigApple:=Student{        Name:"BigApple",Age:20,    }    //使用函数获取学生名称    name1 := getStudentName(bigOrange)    name2 := getStudentName(bigApple)        fmt.Println("========通过传地址ChangeName之后==========")    fmt.Println("方法执行之前name",name1)    bigOrange.changeStudentName("BigBanana")    name1 = bigOrange.getStudentName()    fmt.Println("方法返回之后Name",name1)    fmt.Println("========通过传值ChangeName之后===========")    fmt.Println("方法执行之前name",name2)    bigApple.changeStudentNameByValue("BigPear")    name2 = bigApple.getStudentName()    fmt.Println("方法返回之后Name",name2)}

结果:

========通过传地址ChangeName之后==========
方法执行之前name BigOrange
方法执行之后name BigBanana
方法返回之后Name BigBanana
========通过传值ChangeName之后===========
方法执行之前name BigApple
方法执行之后name BigPear
方法返回之后Name BigApple

上面的例子中

分别使用了函数和方法进行获取学生姓名

分别使用了传值和传地址的方式对学生名称进行修正

综上

  • ① Go语言中的方法,相比于函数,多了一个接收者参数

  • ② Go 语言里有两种类型的接收者:值接收者和指针接收者

方法如果使用 值接收者,那么调用者可以是值接收者类型、也可以是它的指针类型,请看下面的例子(补充上例):

fmt.Println("========使用指针来调用值类型声明的接收者方法===========")bigGrape := &Student{ Name:"bigGrape",Age:22} //取地址!!!!name3 := bigGrape.getStudentName();fmt.Println("========通过传值ChangeName之后===========")fmt.Println("方法执行之前name",name3)bigGrape.changeStudentNameByValue("BigXXXX")name3 = bigGrape.getStudentName()fmt.Println("方法返回之后Name",name3)

结果:

========使用指针来调用值类型声明的接收者方法===========
name bigGrape
========通过传值ChangeName之后===========
方法执行之前name bigGrape
方法执行之后name BigXXXX
方法返回之后Name bigGrape

如上代码 使用了&获取地址,所以bigGrape是一个student类型的指针。下面的代码和上例一样,直接使用了【变量.方法】的方式调用方法,结果也和值类型调用的一样。

为什么?

【Go 在代码背后的执行动作】

name4:=(*bigGrape).getStudentName()

Go 编译器为了支持这种方法调用背后做的事情。【指针被解引用为值】,这样就符合了值接收者的要求。再强调一次,getStudentName 操作的是一个副本,只不过这次操作的是从bigGrape指针指向的值的副本。

同理还记得上面的,这句代码吗?对bigOrange这个变量修改了名称

bigOrange.changeStudentName("BigBanana")

bigOrange和bigApple明显是值类型,但是 changeStudentName 接收者是一个指针类型,为什么能调用,也是基于Go代码背后的执行动作,将值类型取了地址。

(&bigOrange).changeStudentName("BigOrange")

所以对于Go语言调用方法的类型,使用值或者指针都是可以的,不用拘泥于类型。

“Go语言中的函数怎么调用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Go语言中的函数怎么调用

本文链接: https://www.lsjlt.com/news/343359.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中的函数怎么调用
    本篇内容介绍了“Go语言中的函数怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.函数的声明定义//func关键字//getStud...
    99+
    2023-07-02
  • go语言怎么调用函数
    本文小编为大家详细介绍“go语言怎么调用函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言怎么调用函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在go语言中,定义了函数之后,我们可以通过“函数名()...
    99+
    2023-07-04
  • GO语言中回调函数的使用
    目录0.前言1.使用2.几个例子2.1 异步访问URL2.2 Sort.Slice函数2.3 简易计算器0.前言 回调函数是一种在编程中常见的技术,通常在异步编程中使用。简单来说,回...
    99+
    2023-03-06
    GO语言回调函数 GO 回调
  • go语言中函数的定义是什么及怎么调用
    本文小编为大家详细介绍“go语言中函数的定义是什么及怎么调用”,内容详细,步骤清晰,细节处理妥当,希望这篇“go语言中函数的定义是什么及怎么调用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在go语言中,函数是组...
    99+
    2023-07-04
  • GO语言中的回调函数如何使用
    这篇文章主要介绍了GO语言中的回调函数如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇GO语言中的回调函数如何使用文章都会有所收获,下面我们一起来看看吧。0.前言回调函数是一种在编程中常见的技术,通常在异...
    99+
    2023-07-05
  • 深入理解Go语言中的函数调用
    函数是编程语言中十分重要的一个概念,它可以帮助我们将一段代码封装起来,以便在程序中反复调用。在Go语言中,函数的调用方式具有一些特殊之处,本文将深入探讨Go语言中的函数调用,并通过具体...
    99+
    2024-04-02
  • c语言中fun函数怎么调用
    调用 c 语言中的 fun 函数涉及以下步骤:声明 fun 函数:告知编译器函数名称、参数和返回值类型。定义 fun 函数:提供函数的实现,包括函数头和函数体。调用 fun 函数:使用函...
    99+
    2024-05-10
    c语言
  • go语言调用函数方法是什么
    在go语言中,定义了函数之后,我们可以通过“函数名()”的方式调用函数,语法“返回值变量列表 = 函数名(参数列表)”。当“()”中包含多个参数时,参数变量以逗号分隔,尾部无须以分号结尾;“返回值变量列表”中,多个返回值使用逗号分隔。本教程...
    99+
    2023-05-14
    Golang go语言 Go
  • c语言中seek函数怎么调用
    在C语言中,seek函数用于设置文件指针的位置。其调用方式如下:```c#include int fseek(FILE *strea...
    99+
    2023-09-14
    c语言
  • c语言函数怎么调用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • c语言中的回调函数怎么使用
    这篇文章主要讲解了“c语言中的回调函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言中的回调函数怎么使用”吧!一、通过这节课程你能掌握以下知识...
    99+
    2024-04-02
  • go语言怎么调用c语言
    Go语言可以通过使用cgo工具以及一些特定的语法来调用C语言代码。 以下是调用C语言的Go代码示例: 创建一个名为 `callc....
    99+
    2023-10-27
    go语言 c语言
  • Go语言函数方法调用详解
    标题:Go语言函数方法调用详解 Go语言作为一种快速、简单、高效的编程语言,其函数方法调用是其中一个重要的特性。本文将详细介绍Go语言中函数方法的调用方式,并提供具体的代码示例,帮助读...
    99+
    2024-04-02
  • 怎么在PHP中调用C语言函数
    怎么在PHP中调用C语言函数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。// 创建一个 FFI 对象,加载 libc 并...
    99+
    2023-06-14
  • go语言中的输入函数怎么使用
    这篇“go语言中的输入函数怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言中的输入函数怎么使用”文章吧。go语...
    99+
    2023-07-04
  • Go语言中如何正确调用函数方法
    标题:Go语言中如何正确调用函数方法 Go语言作为一种越来越受欢迎的编程语言,其简洁易懂的语法和强大的并发特性使其成为许多开发者的首选。在Go语言中,函数是一种重要的基本概念,而正确地...
    99+
    2024-04-02
  • 如何在Go语言中定义和调用函数
    在Go语言中定义和调用函数 Go语言是一种快速、简洁且安全的编程语言,它的函数是一等公民,因此在Go语言中定义和调用函数非常简单和灵活。本文将介绍如何在Go语言中定义和调用函数,并提供...
    99+
    2024-03-10
    go语言 调用函数 定义函数
  • Go语言函数的延迟调用(DeferredCode)详解
    目录基本功能示例一:延迟调用执行顺序示例二:多defer使用方法实例三:defer与局部变量、返回值的关系先解释一下这篇Blog延期的原因,本来已经准备好了全部内容,但是当我重新回顾...
    99+
    2024-04-02
  • c语言sin函数怎么调用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • c语言调用函数怎么写
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作