Go函数的使用

1、一般用法

以func关键字申明,传入参数名称写在前,参数类型写在后

package main

import "fmt"

func add(a, b int) int {
   return a + b
}
func main() {
   fmt.Print(add(1, 2))
}

返回可以申明返回值名称,也可以不申明,申明返回值时返回类型写在后,申明返回值,相当于定义了一个变量,来接返回值(一般不建议使用,毕竟函数体一大就不是很清晰能看到那里赋值了)

package main

import "fmt"

func add(a, b int) (c int) {
   c = a + b
   return
}
func main() {
   fmt.Print(add(1, 2))
}

返回可以返回多个值

package main

import "fmt"

func div(a, b int) (c int, d int) {
   c = a / b
   d = a % b
   return
}
func main() {
   fmt.Print(div(13, 2))
}

不接收某个返回值,用下划线_代替就行

package main

import "fmt"

func div(a, b int) (c int, d int) {
   c = a / b
   d = a % b
   return
}
func main() {
   a, b := div(13, 2)
   fmt.Println(a, b)
   c, _ := div(13, 2) //使用_接收表示不关系该值
   fmt.Println(c)
}

2、函数作为参数

package main

import "fmt"

func add(a, b int) int {
	return a + b
}
func sub(a, b int) int {
	return a - b
}
func call(f func(int, int) int, a, b int) int {
	return f(a, b) //传入加法|减法|乘法
}
func main() {
	fmt.Println(call(add, 3, 5))
	fmt.Println(call(sub, 3, 5))
	fmt.Println(call(func(i int, i2 int) int {
		return i * i2 //乘法
	}, 3, 5))
}

3、可变参数列表

package main

import "fmt"

func add(a ...int) {
   s := 0
   for i := range a {
      s += i
   }
   fmt.Println(s)

}
func main() {
   add(1, 2, 3)
   add(1, 2, 3, 4)
}

4、参数传递是值传递还是引用传递?

答案是:只有值传递一种方式

值传递:拷贝一份值到函数体内运算,运算后不影响外面的值,比如外面a=3,函数体中执行a++,则函数执行完后,a的值依旧是3

引用传递:引用了同一个地址,函数运算后影响外面的值,比如外面a=3,函数体中执行a++,则函数执行完后,a的值变成了4

package main

func f(a int) int {
   a = a + 5
   return a

}
func main() {
   var c int = 10
   print(c) //查看原始的c的值 10
   d := f(c)
   print(d) //查看计算后的返回结果 15
   print(c) //查看计算后c的值 10
   //所以函数传递是值传递
}

如果想改变C的值,可以通过传递指针来改变

package main

func f(a *int) int {
   *a = *a + 5
   return *a

}
func main() {
   var c int = 10
   print(c) //查看原始的c的值 10
   d := f(&c)
   print(d) //查看计算后的返回结果 15
   print(c) //查看计算后c的值 15
   //所以通过传递指针可以改变原始值,达到引用传递的效果
}
posted @ 2022-06-12 10:37  南风丶轻语  阅读(36)  评论(0编辑  收藏  举报