Go语言函数和变量作用域

函数

函数定义

定义格式:

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

 例:

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

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

函数调用

函数调用和C语言大差不差。

例:

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
}

结果展示:

最大值是 : 200

返回多个值

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)
}

结果展示:Runoob Google

 函数参数

和C语言大差不差,基本使用方法是一样的。

默认情况下,Go使用的时值传递的方式,引用传递就是C语言中的传递地址信息。

函数用法

  1. Go语言函数作为实参
    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    func main() {
    	/* 声明函数变量 */
    	getSquareRoot := func(x float64) float64 {
    		return math.Sqrt(x)
    	}
    
    	/* 使用函数 */
    	fmt.Println(getSquareRoot(9))
    
    }
    

    在上述代码中,用了定义的函数中初始化一个变量,该函数使用了内置函数返回值作为参数。结果为3。

  2. 闭包。(之后详细解释)

  3. 方法

    func (variable_name variable_data_type) function_name() [return_type]{
       /* 函数体*/
    }
    

    Go语言中的方法其实就是一个特殊函数, 只不过Go语言中的方法一般用于函数和结构体绑定在一起, 让结构体除了能够保存数据外还能具备某些行为。 方法和函数异同,方法和函数可以以不同的形式实现相同的效果。

    package main
     
    import "fmt"
     
    type person struct {
    	name string
    	age  int
    }
     
    // 定义一个方法
    func (p person) say() {
    	fmt.Println("say方法")
    }
     
    // 定义一个函数
    func say(p person) {
    	fmt.Println("say函数")
    }
    func main() {
    	p := person{"lnj", 33}
    	p.say() // say方法
    	say(p)  // say函数
     
    }

变量作用域 

  • 函数内定义的变量称为局部变量
  • 函数外定义的变量称为全局变量
  • 函数定义中的变量称为形式参数

局部变量

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。

全局变量

在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。

形式参数

形式参数会作为函数的局部变量来使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值