Go 语言函数
Go Go教程    2019-04-29 09:42:19    11    0    0
admin   Go Go教程

Go 语言函数

函数是基本的代码块,用于执行一个任务。

Go 语言最少有个 main() 函数。

你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。

函数声明告诉了编译器函数的名称,返回类型,和参数。

Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。


函数定义

Go 语言函数定义格式如下:

func function_name( [parameter list] ) [return_types] {
   函数体
}

函数定义解析:

  • func:函数由 func 开始声明
  • function_name:函数名称,函数名和参数列表一起构成了函数签名。
  • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
  • return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
  • 函数体:函数定义的代码集合。

实例

以下实例为 max() 函数的代码,该函数传入两个整型参数 num1 和 num2,并返回这两个参数的最大值:

实例

/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
   /* 声明局部变量 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 
}

函数调用

当创建函数时,你定义了函数需要做什么,通过调用该函数来执行指定任务。

调用函数,向函数传递参数,并返回值,例如:

实例

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var a int = 100
   var b int = 200
   var ret int

   /* 调用函数并返回最大值 */
   ret = max(a, b)

   fmt.Printf( "最大值是 : %d\n", ret )
}

/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
   /* 定义局部变量 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 
}

以上实例在 main() 函数中调用 max()函数,执行结果为:

最大值是 : 200

函数返回多个值

Go 函数可以返回多个值,例如:

实例

package main

import "fmt"

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Mahesh", "Kumar")
   fmt.Println(a, b)
}

以上实例执行结果为:

Kumar Mahesh

函数参数

函数如果使用参数,该变量可称为函数的形参。

形参就像定义在函数体内的局部变量。

调用函数,可以通过两种方式来传递参数:

传递类型描述
值传递值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

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


函数用法

函数用法描述
函数作为值函数定义后可作为值来使用
闭包闭包是匿名函数,可在动态编程中使用
方法方法就是一个包含了接受者的函数

 

-------------------------------------------

  1. 杨辉三角形:

    package main
    
    import "fmt"
    
    //行数
    const LINES int = 10
    
    // 杨辉三角
    func ShowYangHuiTriangle() {
        nums := []int{}
        for i := 0; i < LINES; i++ {
            //补空白
            for j := 0; j < (LINES - i); j++ {
                fmt.Print(" ")
            }
            for j := 0; j < (i + 1); j++ {
                var length = len(nums)
                var value int
                if j == 0 || j == i {
                    value = 1
                } else {
                    value = nums[length-i] + nums[length-i-1]
                }
                nums = append(nums, value)
                fmt.Print(value, " ")
            }
            fmt.Println("")
        }
    }
    
    func main() {
        ShowYangHuiTriangle()
    }

    执行输出结果为:

              1 
             1 1 
            1 2 1 
           1 3 3 1 
          1 4 6 4 1 
         1 5 10 10 5 1 
        1 6 15 20 15 6 1 
       1 7 21 35 35 21 7 1 
      1 8 28 56 70 56 28 8 1 
     1 9 36 84 126 126 84 36 9 1

  2.    Alien Rick

      765***492@qqq.com

    九九乘法表

    package main
    
    import (
        "fmt"
        "strconv"
    )
    
    func add(a, b int) int {
        return a + b
    }
    
    func multiplicationTable() {
        for i := 1; i <= 9; i++ {
            for j := 1; j <= i; j++ {
                var ret string
                if i*j < 10 && j != 1 {
                    ret = " " + strconv.Itoa(i*j)
                } else {
                    ret = strconv.Itoa(i * j)
                }
    
                fmt.Print(j, " * ", i, " = ", ret, "   ")
            }
            fmt.Print("\n")
        }
    }
    
    func main() {
        multiplicationTable()
    }

    执行输出为:

    1 * 1 = 1
    1 * 2 = 2   2 * 2 =  4
    1 * 3 = 3   2 * 3 =  6   3 * 3 =  9
    1 * 4 = 4   2 * 4 =  8   3 * 4 = 12   4 * 4 = 16
    1 * 5 = 5   2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25
    1 * 6 = 6   2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36
    1 * 7 = 7   2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49
    1 * 8 = 8   2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64
    1 * 9 = 9   2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72 9 * 9 = 81

  3.    那边有飞机

      992***308@qq.com

    菱形

    package main
    
    import "fmt"
    
    func main() {
        // 长
        x := 9
        // 宽
        y := 9
        // 行数
        row := 1
        for row <= y {
            // 计算每行得星星数
            count := 0
            if row <= (y/2 + 1) {
                count = (2 * row - 1)
            } else {
                count = 2 * (y - row) + 1 
            }
            row++
            text := ""
            // 算出显示星星的范围
            star_min := ((x - count) / 2) + 1
            star_max := ((x - count) / 2) + count
            for index := 1;index <= x;index++ {
                if index >= star_min && index <= star_max {
                    text += "*"
                } else {
                    text += " "
                }
            } 
            fmt.Println(text)
        }
    }

    计算结果:

        *    
       ***   
      *****  
     ******* 
    *********
     ******* 
      *****  
       ***   
        *  ​

上一篇: Go 语言变量作用域

下一篇: Go 语言循环语句

11
登录 后评论.
没有帐号? 现在注册.
0 评论
Table of content