函数是程序中为了执行特定任务而存在的一组语句。在较高的级别上,函数接受输入并返回输出。
函数允许您将常用的代码块提取到单个组件中。
最受欢迎的Go函数是 主要(),每个独立的Go程序都使用。
声明以 功能 关键字,后跟您想要函数具有的名称,一对括号(),然后是一个包含函数代码的块。
以下示例具有一个名为 简单功能。它不带参数,也不返回值。
package main
import "fmt"
// 简单功能 prints a message
func 简单功能() {
fmt.Println("Hello World")
}
func 主要() {
SimpleFunction()
}
编译并执行上述代码后,将产生以下结果-
Hello World
信息可以通过参数传递给函数。一个参数就像一个变量。
在函数名称后的括号内指定参数。您可以根据需要添加任意数量的参数,只需用逗号分隔即可。
以下示例具有一个带有两个int类型参数的函数。当。。。的时候 加() 函数被调用时,我们传递两个整数值(例如20,30)。
package main
import "fmt"
// Function accepting arguments
func add(x int, y int) {
total := 0
total = x + y
fmt.Println(total)
}
func 主要() {
// Passing arguments
add(20, 30)
}
编译并执行上述代码后,将产生以下结果-
50
如果名称以大写字母开头的函数将被导出到其他包。如果函数名称以小写字母开头,则不会导出到其他软件包,但是您可以在同一软件包中调用此函数。
在此示例中, 加() 函数接受两个整数的输入,并返回名称为的整数 总.
请注意,当将返回值声明为函数签名的一部分时,需要return语句。
package main
import "fmt"
// Function with int as return type
func add(x int, y int) int {
total := 0
total = x + y
return 总
}
func 主要() {
// Accepting return value in varaible
sum := add(20, 30)
fmt.Println(sum)
}
输入和返回值的类型必须与函数签名匹配。如果我们将修改上述程序并在参数中传递一些字符串值,则程序将引发异常“无法在添加的参数中使用“测试”(类型字符串)作为int类型”。
高朗允许您命名函数的返回值。我们还可以通过定义变量来命名返回值,这里是一个变量 总 函数声明中为函数返回的值定义了整数类型。
package main
import "fmt"
func rectangle(l int, b int) (area int) {
var parameter int
parameter = 2 * (l + b)
fmt.Println("Parameter: ", parameter)
area = l * b
return // Return statement without specify variable name
}
func 主要() {
fmt.Println("Area: ", rectangle(20, 30))
}
编译并执行上述代码后,将产生以下结果-
C:\Golang>go run main.go
Parameter: 100
Area: 600
由于已声明该函数返回int类型的值,因此执行流中的最后一个逻辑语句必须是返回已声明类型的值的return语句。
高朗中的函数可以返回多个值,这在许多实际情况下都是很有帮助的功能。
本示例声明一个具有两个返回值的函数,然后从主函数调用它。
package main
import "fmt"
func rectangle(l int, b int) (area int, parameter int) {
parameter = 2 * (l + b)
area = l * b
return // Return statement without specify variable name
}
func 主要() {
var a, p int
a, p = rectangle(20, 30)
fmt.Println("Area:", a)
fmt.Println("Parameter:", p)
}
将变量的地址传递给函数,以及通过使用函数内部的解引用来修改变量的值。
package main
import "fmt"
func update(a *int, t *string) {
*a = *a + 5 // defrencing pointer address
*t = *t + " Doe" // defrencing pointer address
return
}
func 主要() {
var age = 20
var text = "John"
fmt.Println("Before:", text, age)
update(&age, &text)
fmt.Println("After :", text, age)
}
运行上面的程序时,您应该看到以下输出:
C:\Golang>go run main.go
Before: John 20
After : John Doe 25
匿名函数是在没有任何命名标识符的情况下声明的函数。就像标准函数一样,匿名函数可以接受输入和返回输出。
将函数分配给变量。
package main
import "fmt"
var (
area = 功能(l int, b int) int {
return l * b
}
)
func 主要() {
fmt.Println(area(20, 30))
}
将参数传递给匿名函数。
package main
import "fmt"
func 主要() {
func(l int, b int) {
fmt.Println(l * b)
}(20, 30)
}
定义为接受参数并返回值的函数。
package main
import "fmt"
func 主要() {
fmt.Printf(
"100 (°F) = %.2f (°C)\n",
func(f float64) float64 {
return (f - 32.0) * (5.0 / 9.0)
}(100),
)
}
匿名函数可用于包含不需要命名的功能,并且可能用于短期使用。 闭包是匿名函数的一种特殊情况。闭包是匿名函数,可访问在函数主体外部定义的变量。
匿名函数访问在外部定义的变量。
package main
import "fmt"
func 主要() {
l := 20
b := 30
func() {
var area int
area = l * b
fmt.Println(area)
}()
}
函数体内每次循环的匿名函数访问变量。
package main
import "fmt"
func 主要() {
for i := 10.0; i < 100; i += 10.0 {
rad := 功能() float64 {
return i * 39.370
}()
fmt.Printf("%.2f Meter = %.2f Inch\n", i, rad)
}
}
高阶函数是接收函数作为参数或返回函数作为输出的函数。
高阶函数是可以通过将其他函数用作参数或通过返回它们来对其他函数进行操作的函数。
package main
import "fmt"
func 和 (x, y int) int {
return x + y
}
func 部分总和(x int) 功能(int) int {
return 功能(y int) int {
return 和 (x, y)
}
}
func 主要() {
partial := 部分总和(3)
fmt.Println(partial(7))
}
运行上面的程序时,您应该看到以下输出:
C:\Golang>go run main.go
10
在上面的程序中 部分总和 函数返回一个 和 该函数接受两个int参数并返回一个int参数。
package main
import "fmt"
func 平方和(x int) 功能(int) 功能(int) int {
return 功能(y int) 功能(int) int {
return 功能(z int) int {
return x*x + y*y + z*z
}
}
}
func 主要() {
// 5*5 + 6*6 + 7*7
fmt.Println(squareSum(5)(6)(7))
}
运行上面的程序时,您应该看到以下输出:
C:\Golang>go run main.go
110
在上面的程序中 平方和 函数签名,指定函数返回两个函数和一个整数值。
高朗还支持定义我们自己的函数类型。
上面程序的修改版本,其功能类型如下:
package main
import "fmt"
type First 功能(int) int
type Second 功能(int) First
func 平方和(x int) Second {
return 功能(y int) First {
return 功能(z int) int {
return x*x + y*y + z*z
}
}
}
func 主要() {
// 5*5 + 6*6 + 7*7
fmt.Println(squareSum(5)(6)(7))
}