Golang学习之路(五):Golang的函数

x33g5p2x  于2021-11-19 转载在 Go  
字(2.1k)|赞(0)|评价(0)|浏览(568)

一、函数

1. 语法

  1. func 函数名( [参数] ) [返回值类型] {
  2. 函数体
  3. }

2. 值传递

默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。

1)求a和b两个参数值之和:

  1. package main
  2. import "fmt"
  3. func main() {
  4. result :=sum(1, 2)
  5. fmt.Println("a+b之和为:",result)
  6. }
  7. func sum(a, b int) int {
  8. return a+b
  9. }

输出结果

  1. a+b之和为: 3

2)Golang的函数返回值可以为多个:

  1. package main
  2. import "fmt"
  3. func main() {
  4. res1,res2 :=fuc(1, 2)
  5. fmt.Println(res1,res2)
  6. }
  7. func fuc(a, b int) (int,int) {
  8. return a+b,a-b
  9. }

输出结果

  1. 3 -1

3)也可以无返回值:

  1. package main
  2. import "fmt"
  3. func main() {
  4. fuc(1, 2)
  5. }
  6. func fuc(a, b int) {
  7. fmt.Println("传入的值为:",a,b)
  8. }

输出结果

  1. 传入的参数为: 1 2

3. 引用(指针)传递

引用传递是将参数的内存地址传递到函数中,如果在函数中对该参数值进行了修改,那外层的该参数值也会被修改。

举例说明

现在定义一个函数接受一个参数a,在打印a的值后将a赋值为3

下面是值传递的写法:

  1. package main
  2. import "fmt"
  3. func main() {
  4. a :=1
  5. fuc(a)
  6. fmt.Println("值未被修改,还是为:",a)
  7. }
  8. func fuc(a int) {
  9. fmt.Println("传入的值为:",a)
  10. a=3
  11. }

输出结果

  1. 传入的值为: 1
  2. 值未被修改,还是为: 1

下面是引用传递的写法:

  1. package main
  2. import "fmt"
  3. func main() {
  4. a :=1
  5. fuc(&a)
  6. fmt.Println("值被修改了,由1变为了:",a)
  7. }
  8. func fuc(a *int) {
  9. fmt.Println("传入的值为:",*a)
  10. *a=3
  11. }

输出结果

  1. 传入的值为: 1
  2. 值被修改了,由1变为了 3

二、函数用法

1. Golang中没有class

要知道的是,Golang中并没有Python、Java中的类(class)。Golang一切的一切都是函数,如果要实现一个class的话,可以这样写:

  1. package main
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. // Test 等于声明一个类
  7. type Test struct {
  8. name string
  9. age int
  10. }
  11. func (tes *Test) print() string{
  12. return "我的名字是:"+tes.name+",我的年龄为:"+strconv.Itoa(tes.age)
  13. }
  14. func main() {
  15. obj := &Test{"曲鸟",18} //初始化并赋值
  16. b := obj.print()
  17. fmt.Println(b)
  18. }

输出结果

  1. 我的名字是:曲鸟,我的年龄为:18

类中函数带参数的写法:

  1. func (tes *Test) sum(a,b int) string{//求a+b的和
  2. return "a+b="+strconv.Itoa(a+b)
  3. }
  4. func main() {
  5. obj := &Test{"曲鸟",18}
  6. b := obj.sum(3,3)
  7. fmt.Println(b)
  8. }

2. 闭包

闭包可以理解为“定义在一个函数内部的函数“,闭包是一座用于连接函数内部和函数外部的桥梁

对于上面的第一个例子(输出结果如下):

  1. 我的名字是:曲鸟,我的年龄为:18

使用闭包可以这样写:

  1. package main
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. func add(name string, age int) func() string {
  7. return func() string { //相当于下面main中的obj
  8. return "我的名字是:" + name + ",我的年龄为:" + strconv.Itoa(age)
  9. }
  10. }
  11. func main() {
  12. obj := add("曲鸟", 18)
  13. fmt.Println(obj())
  14. }

3. Golang中函数传递函数

Golang可以将函数作为变量的值

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func add9(a int) int {//
  6. return a+9
  7. }
  8. func main(){
  9. a := func(x int) int { //将该函数赋值给a
  10. return add9(6)
  11. }
  12. fmt.Println("a+9的值为:",a(9))
  13. }

输出结果

  1. a+9的值为: 15

相关文章

最新文章

更多