Golang中的函数参数
在Golang中,函数参数的种类和用法并不复杂,但是它们有着一些需要注意的地方,本文将详细介绍。
参数类型
Golang中的函数参数可以分为以下几类:
- 值类型参数(Value type parameter):传递的是值,类似于C语言中的传值。
- 指针类型参数(Pointer type parameter):传递的是指针,类似于C语言中的传地址。
- 引用类型参数(Reference type parameter):传递的是对象的引用,可以修改原始对象。
下面分别介绍这几种参数类型的使用方法。
值类型参数
值类型参数是Golang中函数参数的默认类型,直接传递值即可。例如:
func add(a int, b int) int {
return a + b
}
fmt.Println(add(1,2)) // Output: 3
在函数中修改值类型参数的值,不会影响原始值的值。例如:
func modify(a int) {
a = 2
}
var a int = 1
modify(a)
fmt.Println(a) // Output: 1
指针类型参数
指针类型参数使用指针传递参数,可以直接修改原始变量的值。例如:
func modify2(a *int) {
*a = 2
}
var a int = 1
modify2(&a)
fmt.Println(a) // Output: 2
引用类型参数
引用类型参数传递的是对象的引用,可以修改原始对象。例如:
type Person struct {
Name string
}
func modify3(p *Person) {
p.Name = "Lucy"
}
var person Person
person.Name = "Jack"
modify3(&person)
fmt.Println(person.Name) // Output: Lucy
参数传递方式
在调用函数时,Golang中的参数传递方式可以分为以下两种:
- 值传递(Value Passing):传递参数的值。
- 引用传递(Reference Passing):传递参数的指针。
默认情况下,参数是值传递。如果需要引用传递,需要传递参数的指针。例如:
func modify4(p *Person) {
p.Name = "Bob"
}
var person Person
person.Name = "Mary"
modify4(&person)
fmt.Println(person.Name) // Output: Bob
不定参数
在Golang中,不定参数使用...
表示。例如:
func sum(args ...int) int {
var s int
for _, arg := range args {
s += arg
}
return s
}
fmt.Println(sum(1,2,3)) // Output: 6
不定参数也可以和普通参数一起使用。例如:
func sum2(initial int, args ...int) int {
s := initial
for _, arg := range args {
s += arg
}
return s
}
fmt.Println(sum2(10,1,2,3)) // Output: 16
结论
Golang中函数参数的种类和用法并不复杂,但是需要开发者有良好的代码编写习惯,尽量避免出现不必要的参数复杂度。在函数调用中,开发者需要注意参数传递的方式以及参数的类型,避免出现不必要的错误。