函数是一组语句,能够在程序中重复使用。函数不会在页面加载时主动执行。函数将通过调用函数来执行。
创立函数
要创立(通常称为申明)一个函数,请执行以下操作:
- 应用
func
关键字。 - 指定函数的名称,后跟括号
()
。 - 最初,在花括号
{}
内增加定义函数应执行的代码。
语法
func 函数名() { // 要执行的代码}
调用函数
函数不会立刻执行。它们被“保留以供当前应用”,并在调用时执行。
在上面的示例中,咱们创立了一个名为 "myMessage()" 的函数。开括号 {
示意函数代码的开始,闭括号 }
示意函数的完结。该函数输入 "I just got executed!"。要调用函数,只需写下函数的名称,前面跟着两个括号 ()
:
示例
package mainimport ( "fmt")func myMessage() { fmt.Println("I just got executed!")}func main() { myMessage() // 调用函数}
后果:
I just got executed!
一个函数能够被屡次调用。
示例
package mainimport ( "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 mainimport ( "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 mainimport ( "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 mainimport ( "fmt")func myFunction(x int, y int) int { return x + y}func main() { fmt.Println(myFunction(1, 2))}
后果:
3
命名返回值
在Go中,您能够为函数的返回值命名。
在这里,咱们将返回值命名为 result
(类型为int),并应用“袒露”的返回(即,咱们应用return语句而不指定变量名)返回值:
示例
package mainimport ( "fmt")func myFunction(x int, y int) (result int) { result = x + y return}func main() { fmt.Println(myFunction(1, 2))}
后果:
3
下面的示例也能够像这样写。在这里,return语句指定了变量名:
示例
package mainimport ( "fmt")func myFunction(x int, y int) (result int) { result = x + y return result}func main() { fmt.Println(myFunction(1, 2))}
将返回值存储在变量中
您也能够将返回值存储在变量中,像这样:
示例
package mainimport ( "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 mainimport ( "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 mainimport ( "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 mainimport ( "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 mainimport ( "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 mainimport ( "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 mainimport ( "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,简书,博客园,慕课,51CTO,helloworld,腾讯开发者社区,阿里开发者社区
看完如果感觉有帮忙,欢送点赞、珍藏和关注