写点什么

Go 函数

作者:小万哥
  • 2023-09-07
    广东
  • 本文字数:3200 字

    阅读完需:约 10 分钟

Go 函数

函数是一组语句,可以在程序中重复使用。函数不会在页面加载时自动执行。函数将通过调用函数来执行。

创建函数

要创建(通常称为声明)一个函数,请执行以下操作:


  • 使用 func 关键字。

  • 指定函数的名称,后跟括号 ()

  • 最后,在花括号 {} 内添加定义函数应执行的代码。


语法


func 函数名() {   // 要执行的代码}
复制代码

调用函数

函数不会立即执行。它们被“保存以供以后使用”,并在调用时执行。


在下面的示例中,我们创建了一个名为 "myMessage()" 的函数。开括号 { 表示函数代码的开始,闭括号 } 表示函数的结束。该函数输出 "I just got executed!"。要调用函数,只需写下函数的名称,后面跟着两个括号 ()


示例


package main
import ( "fmt")
func myMessage() { fmt.Println("I just got executed!")}
func main() { myMessage() // 调用函数}
复制代码


结果:


I just got executed!
复制代码


一个函数可以被多次调用。


示例


package main
import ( "fmt")
func myMessage() { fmt.Println("I just got executed!")}
func main() { myMessage() myMessage() myMessage()}
复制代码


结果:


I just got executed!I just got executed!I just got executed!
复制代码

Go 函数命名规则

  • 函数名必须以字母开头。

  • 函数名只能包含字母数字字符和下划线(A-z,0-9 和 _)。

  • 函数名区分大小写。

  • 函数名不能包含空格。

  • 如果函数名由多个单词组成,可以使用多词变量命名的技巧。

参数和参数值

信息可以作为参数传递给函数。参数在函数内部充当变量。


在函数名后面,括号内指定参数及其类型。您可以添加任意数量的参数,只需用逗号分隔即可:


语法


func 函数名(参数1 类型, 参数2 类型, 参数3 类型) {  // 要执行的代码}
复制代码

带参数的函数示例

下面的示例有一个带有一个参数 fname(类型为字符串)的函数。当调用 familyName() 函数时,我们还传递了一个名字(例如,Liam),并且这个名字在函数内部使用,输出多个不同的名字,但相同的姓氏:


示例


package main
import ( "fmt")
func familyName(fname string) { fmt.Println("Hello", fname, "Refsnes")}
func main() { familyName("Liam") familyName("Jenny") familyName("Anja")}
复制代码


结果:


Hello Liam RefsnesHello Jenny RefsnesHello Anja Refsnes
复制代码


注意:当将参数传递给函数时,它被称为参数。因此,从上面的示例中可以看出:fname 是参数,而 Liam、Jenny 和 Anja 是参数值。

多个参数

在函数内部,您可以添加任意数量的参数:


示例


package main
import ( "fmt")
func familyName(fname string, age int) { fmt.Println("Hello", age, "岁的", fname, "Refsnes")}
func main() { familyName("Liam", 3) familyName("Jenny", 14) familyName("Anja", 30)}
复制代码


结果:


Hello 3 岁的 Liam RefsnesHello 14 岁的 Jenny RefsnesHello 30 岁的 Anja Refsnes
复制代码


希望这些信息能帮助您理解 Go 语言中的函数、参数和参数值的使用方式。如果您有任何其他问题,请随时提出。

返回值

如果您想让函数返回一个值,您需要定义返回值的数据类型(如 int、string 等),并在函数内部使用 return 关键字:


语法


func 函数名(参数1 类型, 参数2 类型) 类型 {   // 要执行的代码   return 输出}
复制代码

函数返回示例

在下面的示例中,myFunction() 接收两个整数(x 和 y),并返回它们的加法(x + y)作为整数(int):


示例


package main
import ( "fmt")
func myFunction(x int, y int) int { return x + y}
func main() { fmt.Println(myFunction(1, 2))}
复制代码


结果:


3
复制代码

命名返回值

在 Go 中,您可以为函数的返回值命名。


在这里,我们将返回值命名为 result(类型为 int),并使用“裸露”的返回(即,我们使用 return 语句而不指定变量名)返回值:


示例


package main
import ( "fmt")
func myFunction(x int, y int) (result int) { result = x + y return}
func main() { fmt.Println(myFunction(1, 2))}
复制代码


结果:


3
复制代码


上面的示例也可以像这样写。在这里,return 语句指定了变量名:


示例


package main
import ( "fmt")
func myFunction(x int, y int) (result int) { result = x + y return result}
func main() { fmt.Println(myFunction(1, 2))}
复制代码

将返回值存储在变量中

您也可以将返回值存储在变量中,像这样:


示例


package main
import ( "fmt")
func myFunction(x int, y int) (result int) { result = x + y return}
func main() { total := myFunction(1, 2) fmt.Println(total)}
复制代码

多个返回值

Go 函数也可以返回多个值。


在这里,myFunction() 返回一个整数(result)和一个字符串(txt1):


示例


package main
import ( "fmt")
func myFunction(x int, y string) (result int, txt1 string) { result = x + x txt1 = y + " World!" return}
func main() { fmt.Println(myFunction(5, "Hello"))}
复制代码


结果:


10 Hello World!
复制代码


在这里,我们将两个返回值存储在两个变量(a 和 b)中:


示例


package main
import ( "fmt")
func myFunction(x int, y string) (result int, txt1 string) { result = x + x txt1 = y + " World!" return}
func main() { a, b := myFunction(5, "Hello") fmt.Println(a, b)}
复制代码


结果:


10 Hello World!
复制代码


如果由于某种原因不想使用其中一些返回的值,可以添加下划线(_)来省略这个值。


在这里,我们要省略第一个返回的值(result - 存储在变量 a 中):


示例


package main
import ( "fmt")
func myFunction(x int, y string) (result int, txt1 string) { result = x + x txt1 = y + " World!" return}
func main() { _, b := myFunction(5, "Hello") fmt.Println(b)}
复制代码


结果:


Hello World!
复制代码


在这里,我们要省略第二个返回的值(txt1 - 存储在变量 b 中):


示例


package main
import ( "fmt")
func myFunction(x int, y string) (result int, txt1 string) { result = x + x txt1 = y + " World!" return}
func main() { a, _ := myFunction(5, "Hello") fmt.Println(a)}
复制代码

递归函数

Go 接受递归函数。如果一个函数调用自己并达到一个停止条件,那么这个函数就是递归的。


在以下示例中,testcount() 是一个调用自己的函数。我们使用 x 变量作为数据,每次递归时都会增加 1(x + 1)。当 x 变量等于 11(x == 11)时,递归结束。


示例


package main
import ( "fmt")
func testcount(x int) int { if x == 11 { return 0 } fmt.Println(x) return testcount(x + 1)}
func main() { testcount(1)}
复制代码


结果:


12345678910
复制代码


递归是一个常见的数学和编程概念。这有利于意味着您可以循环遍历数据以达到一个结果。


开发人员应谨慎使用递归函数,因为很容易陷入编写永远不会终止的函数,或者使用过多的内存或处理器资源的函数。但是,当正确编写时,递归可以是一种非常有效和数学上优雅的编程方法。


在以下示例中,factorial_recursion() 是一个调用自己的函数。我们使用 x 变量作为数据,每次递归时都会减小 1(x - 1)。当条件不大于 0 时(即当它等于 0 时),递归结束。


示例


package main
import ( "fmt")
func factorial_recursion(x float64) (y float64) { if x > 0 { y = x * factorial_recursion(x - 1) }
else { y = 1 } return}
func main() { fmt.Println(factorial_recursion(4))}
复制代码


结果:


24
复制代码


希望这些信息对您有所帮助,帮助您理解 Go 语言中的返回值和递归函数的使用方式。如果您有任何其他问题,请随时提出。

最后

为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:


公众号搜索Let us Coding知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区


看完如果觉得有帮助,欢迎点赞、收藏关注

发布于: 刚刚阅读数: 4
用户头像

小万哥

关注

代码如人生 2023-02-09 加入

编程爱好者

评论

发布
暂无评论
Go 函数_Go_小万哥_InfoQ写作社区