成功最有效的方法就是向有经验的人学习!

函数、全局变量和局部变量

函数

函数基础

函数定义

函数是组织好的、可重复使用的、用于执行指定任务的代码块。
本文介绍了 Go 语言中函数的相关内容。

package main

import "fmt"

func main() {
    // 1、无参数、无返回值
    fmt.Println(xxx) // 0x4a7a80
    //go语言执行:执行入口在main方法
    xxx()
}

// 1、定义函数(无参数、无返回值)
/*
func : 定义函数的关键字(go25个关键字)
xxx  : 函数的名字(类似定义的全局变量)
*/
func xxx() {
    fmt.Println("hello world")
}

函数返回值

Go 语言中通过 return 关键字向外输出返回值。
函数多返回值,Go 语言中函数支持多返回值,函数如果有多个返回值时必须用()将所有返回值包裹起来

package main

import "fmt"

func main() {
    // 2、函数参数和返回值
    val := add(1, 1, "zhangsan") // val接收的是函数的返回值
    fmt.Println("函数执行结果:", val)
}

// 2、两数相加:函数参数和返回值
/*
func : 定义函数的关键字(go25个关键字)
add  : 函数的名字(类似定义的全局变量)
参数:x,y int
    - x y : 函数参数
    - int : 指定两个参数的类型(比如int、str)在调用函数时一定要使用相同的类型
返回值:(int)
    - 定义这个函数,执行结束后会返回一个int类型的数据
*/
func add(x, y int, c string) int {
    // x, y int 相同数据类型可以一起定义:“x,y int”  应该是 “x int ,y int” ?
    // , c string 不同数据类型需要分开定义
    fmt.Println("运行了add函数")
    return x + y
}

函数变量作用域

全局变量

全局变量是定义在函数外部的变量,它在程序整个运行周期内都有效。
在函数中可以访问到全局变量

package main

import "fmt"

// go语言执行顺序
/*
首先执行 定义全局变量
然后执行 init方法
最后执行 main方法,调用我们写的逻辑
*/

// 1、全局变量
// 在函数外部直接定义的变量是全局变量(特点:可以在其他函数中使用)
var num int = 64

func main() {
    fmt.Println("main", num) // 这里打印的是全局的num
}

局部变量

局部变量是函数内部定义的变量, 函数内定义的变量无法在该函数外使用
例如下面的示例代码 main 函数中无法使用 testLocalVar 函数中定义的变量 x

package main

import "fmt"

// go语言执行顺序
/*
首先执行 定义全局变量
然后执行 init方法
最后执行 main方法,调用我们写的逻辑
*/

// 1、全局变量
// 在函数外部直接定义的变量是全局变量(特点:可以在其他函数中使用)
var num int = 64

func main() {
    TestFunc()
    fmt.Println("main", num) // 这里打印的是全局的num
    //fmt.Println(num2)  // 局部变量在函数内部生效,不能在其他函数调用
}

func TestFunc() {
    fmt.Println(num) // 全局变量可以在其他函数中使用
    // 2、局部变量(在函数内部定义的变量,不能在其他函数中访问)
    var num2 int = 1000
    fmt.Println(num2)
}

for 循环语句中定义的变量

我们之前讲过的 for 循环语句中定义的变量,也是只在 for 语句块中生效

package main

import "fmt"

// go语言执行顺序
/*
首先执行 定义全局变量
然后执行 init方法
最后执行 main方法,调用我们写的逻辑
*/

// 1、全局变量
// 在函数外部直接定义的变量是全局变量(特点:可以在其他函数中使用)
var num int = 64

func main() {
    TestFunc()
    fmt.Println("main", num) // 这里打印的是全局的num
    //fmt.Println(num2)  // 局部变量在函数内部生效,不能在其他函数调用
}

func TestFunc() {
    // 3、for循环中定义的变量
    for i := 1; i < 10; i++ {
        fmt.Println(i)
    }
    //fmt.Println(i)  // 在for后面定义的变量是自己这个代码块的,在外部不能使用

    fmt.Println("test", num) // 全局变量可以在其他函数中使用
    num = 3000

    // 局部作用域优先级更高,局部和全局定义了相同的变量名,局部在函数内部生效的,全局的被覆盖了
    num := 7 // := 类似var 声明一个新的变量(在内存中开启新空间)     = 是赋值
    fmt.Println("test", num)
    num = 444 // 函数内部如果修改,只修改的是自己,不影响全局的num
    fmt.Println("test", num)
}
赞(0) 打赏
未经允许不得转载:陈桂林博客 » 函数、全局变量和局部变量
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册