go 学习 第十章 Go语言函数

1.   Go 语言函数体定义格式如下

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

实例:

func max(num1, num2 int) int {
   /* 声明局部变量 */
   var result int

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

函数调用和其他语言没有区别,带过。

注意:go函数可以 返回多个值

示例:

package main

import "fmt"

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

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

2.  函数参数的调用

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

     a. 值传递 :同java 没有区别。相当于复制一份给函数,对变量本身没有影响。

     b. 应用传递: 将参数的实际地址传递到函数中,函数对参数的修改,将影响到参数。

     示例:

     

package main

import "fmt"

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

   fmt.Printf("交换前,a 的值 : %d\n", a )
   fmt.Printf("交换前,b 的值 : %d\n", b )

   /* 调用 swap() 函数
   * &a 指向 a 指针,a 变量的地址
   * &b 指向 b 指针,b 变量的地址
   */
   swap(&a, &b)

   fmt.Printf("交换后,a 的值 : %d\n", a )
   fmt.Printf("交换后,b 的值 : %d\n", b )
}

func swap(x *int, y *int) {
   var temp int
   temp = *x    /* 保存 x 地址上的值 */
   *x = *y      /* 将 y 值赋给 x */
   *y = temp    /* 将 temp 值赋给 y */
}

3.  函数的用法

  a. 函数作为另一个函数的实参

  b. 闭包 :闭包是匿名函数,可以在动态编程中使用。

    Go语言支持匿名函数,可以作为闭包。匿名函数是一个“ 内联” 语句或表达式。

    匿名函数的优越性在于可以直接使用函数内的变量,不必申明。

   以下实例中,我们创建了getSequence()函数,返回另外一个函数。该函数的作用是在闭包中

 递增i变量,代码如下:

package main

import "fmt"

func getSequence() func() int {
   i:=0
   return func() int {
      i+=1
     return i  
   }
}

func main(){
   /* nextNumber 为一个函数,函数 i 为 0 */
   nextNumber := getSequence()  

   /* 调用 nextNumber 函数,i 变量自增 1 并返回 */
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   
   /* 创建新的函数 nextNumber1,并查看结果 */
   nextNumber1 := getSequence()  
   fmt.Println(nextNumber1())
   fmt.Println(nextNumber1())
}

  C.     Go 语言函数方法

  go 语言中同时有函数和方法,一个方法就是一个包含了接收者的函数,接收者可以是 命名类型

或者结构体类型的一个值或者 一个指针。所有给定类型的方法属于该类型的方法集。

func (variable_name variable_data_type) function_name [return type] {

   // 函数体
}
// 下面定义一个结构体类型和该类型的一个方法:
package main

import (
   "fmt"  
)

/* 定义结构体 */
type Circle struct {
  radius float64
}

func main() {
  var c1 Circle
  c1.radius = 10.00
  fmt.Println("圆的面积 = ", c1.getArea())
}

//该 method 属于 Circle 类型对象中的方法
func (c Circle) getArea() float64 {
  //c.radius 即为 Circle 类型对象中的属性
  return 3.14 * c.radius * c.radius
}

 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值