函数
函数的声明
在Go语言中,函数的声明方式有以下几种:
普通函数声明
普通函数声明是最基本的函数声明方式,它的语法如下:
func 函数名(参数列表) 返回值类型 {// 函数体
}
其中,参数列表可以是零个或多个参数,每个参数由参数名和参数类型组成,多个参数之间用逗号分隔;返回值类型可以是零个或多个类型,多个类型之间用逗号分隔。
举个例子,以下是一个计算两个整数之和的函数:
//声明
func add(x int, y int) int {return x + y
}
//调用
result := add(3, 5)
这个函数的参数列表有两个参数:x和y,它们都是int类型;返回值类型是int型。
匿名函数声明
匿名函数是没有函数名的函数,它的语法如下:
func(参数列表) 返回值类型 {// 函数体
}
与普通函数不同的是,在匿名函数声明中,函数名被省略了,而函数体直接写在了声明语句中。
举个例子,以下是一个将字符串转为大写的匿名函数:
upper := func(s string) string {return strings.ToUpper(s)
}
//调用
println(upper("nihao"))
这个匿名函数只有一个参数s,它的返回值类型是string型。
方法声明
在Go语言中,方法就是与特定类型相关联的函数。方法声明的语法如下:
func (接收器类型) 方法名(参数列表) 返回值类型 {// 函数体
}
其中,接收器类型指定了该方法与哪种类型相关联。在调用该方法时,会自动将该类型的一个变量作为第一个参数传入方法中。
举个例子,以下是一个计算点之间距离的方法:
type Point struct {X, Y float64
}func (p Point) Distance(q Point) float64 {return math.Hypot(q.X-p.X, q.Y-p.Y)
}
func main() {p := Point{X: 0.0, Y: 0.0}q := Point{X: 3.0, Y: 4.0}println(p.Distance(q)) //+5.000000e+000
}
这个方法的接收器类型是Point,它的参数列表有一个Point类型的参数q,返回值类型是float64型。
函数变量声明
在Go语言中,函数也可以被看作一种类型,因此可以定义函数变量。函数变量的声明方式如下:
var 变量名 func(参数列表) 返回值类型 = 函数名
其中,变量名为函数变量的变量名,参数列表和返回值类型与函数名相同。
举个例子,以下是一个将字符串转为小写的函数变量:
lower := strings.ToLower
println(lower("NiHao")) //nihao
这个函数变量的参数列表只有一个string类型的参数s,返回值类型也是string型。
可变参数
可变参数是指函数接受不定数量的参数。我们可以使用"…"语法来声明可变参数。下面是一个简单的例子:
func sum(nums ...int) int {total := 0for _, num := range nums {total += num}return total
}func main() {result := sum(1, 2, 3, 4, 5)fmt.Println(result) // 15
}
在上面的例子中,sum
函数接受一个不定数量的整数参数,并将它们相加返回总和。在main
函数中调用sum
函数时,我们传递了5个整数参数,但是sum
函数可以接受任意数量的参数。除了整数类型,可变参数也可以接受其他类型的参数,例如字符串、结构体等。需要注意的是,可变参数在函数内部被当作切片(slice)处理。因此,在函数内部可以像操作切片一样使用可变参数。