square-gopher.PNG
函数中的参数
定义函数可以没有任何参数就像 main 函数
func main(){ }
定义函数的参数时和其他语言没有什么不同, 指定参数名称和参数类型
- func sayMessage(msg string){
- // body
- }
如果参数类型一致我们可以省略 greeting 后面指定类型
- func sayGreeting(greeting, name string){
- fmt.Println(greeting, name)
- }
我们可以尝试在 sayGreeting 内部修改 name 这个变量, 因为函数作用域这些修改 name 不会影响到函数外面的 name 值, 这是大家的尝试.
- func sayGreeting(greeting, name string){
- fmt.Println(greeting, name)
- name ="matthew"
- fmt.Println(name)
- }
- greeting := "hello"
- name := "zidea"
- sayGreeting(greeting,name)
- fmt.Println(name)
从结果来看
- hello zidea
- matthew
- zidea
外面的 name 值依旧是 zidea 没有发生变化
我们可以将传递变量引用修改为将变量的地址作为参数传给函数
- func sayGreeting(greeting, name *string){
- fmt.Println(*greeting, *name)
- *name ="matthew"
- fmt.Println(*name)
- }
- hello zidea
- matthew
- matthew
- func main(){
- fmt.Println(eval(3,4, "*"))
- greeting := "hello"
- name := "zidea"
- fmt.Println(greeting, name)
- }
我们也可以通过 (...) 来实现函数动态地传入多个参数, 这和 es6 语法很相似.
you-look-familiar.jpg
- func sum(values ...int){
- fmt.Println(values)
- result := 0
- for _, v := range values{
- result += v
- }
- fmt.Println("The sum is", result)
- }
来源: http://www.jianshu.com/p/8998ecb0099d