函数是Go程序源代码的基本构造单位,一个函数的定义包括关键字func、函数名、参数列表、返回列表和函数体。函数命名遵循标识符的命名规则,首字母的大小写决定该函数在其他包的可见性;大写代表对其他函数可见,小写时只有相同的包可以访问,函数的参数和返回值都需要()包裹,如果只有一个返回值而且使用的是非命名的参数,则返回参数的()可以省略,函数体需要使用{}包裹。
Go函数实参到形参的参数传递永远是值拷贝,有时候函数调用后实参指向的值发生了变化,那是因为参数传递的是指针值的拷贝,实参是一个指针变量,传递给形参的是这个指针变量的副本二者指向同一个地址。
// 实参到形参的传递
func main() {
a := 10
chvalue(a)
fmt.Println(a)
chpointer(&a)
fmt.Println(a)
}
func chvalue(a int) int {
a++
return a
}
func chpointer(a *int) {
*a++
return
}
结果是 10 11
意思是第一个调用传输的是拷贝后的值,第二个调用传递的是a的地址值