Go中局部全局变量的区分
2024-09-16 02:05:44
这是可能也许是容易混淆滴,先上1个例子:
package main
import "fmt"
var nickname = "大虾"
func main() {
show() //大虾
change() //小虾
show() //大虾
fmt.Print(nickname) //大虾
} func show() { print(nickname) } func change() {
nickname := "小虾"
print(nickname)
}
上面会输出:
大虾大虾小虾大虾
我们稍微改动下:
package main
import "fmt"
var nickname = "大虾"
func main() {
show() //大虾
change() //小虾
show() //这里不再是 大虾 而是 虾
fmt.Println(nickname) //这里不再是 大虾 而是 虾
} func show() { print(nickname) } func change() {
nickname = "小虾" // 注意这里不再是 nickname := "小虾"
print(nickname)
}
上面会输出:
大虾小虾小虾小虾
可见声明的全局变量var nickname 在函数change里面重载更新了,再次输出时已经是被更新后的值。
我们再看一个函数变量域
package main
var nickname string func main() {
nickname = "大虾"
print(nickname) //大虾
change()
println(nickname) //大虾
} func change() {
nickname := "小虾"
print(nickname) //小虾
show() //大虾 上面只是nickname := 只是初始化声明变量。仅在函数内有效,全局变量nickname未变
} func show() {
print(nickname)
}
上面会输出:
大虾小虾大虾大虾
通过上面几个例子,我想大家也应该有深入的理解啦。
最新文章
- 微信小程序入门正确姿势(一)
- Windows 7 添加MBR文件启动
- Android 依赖注入 ButterKnife 基本使用
- 【HDOJ】 七百题留念
- Javascript学习4 - 对象和数组
- TRIZ系列-创新原理-28-替代机械系统原理
- java中的==、equals()、hashCode()源码分析
- 蓝桥杯-算法训练--ALGO-8 操作格子
- Luogu3613 睡觉困难综合征
- grant 权限 on 数据库对象 to 用户
- windows.onload和body的onload属性的区别
- 【AI】微软人工智能学习笔记(二)
- Zookeeper C++编程实战之主备切换
- JS 01 变量_数据类型_分支循环_数组
- LeetCode Anagrams My solution
- Mac 下安装Java
- MapReduce调度器
- 使用Eclipse搭建JavaWeb开发环境的几个基本问题
- telnet命令的使用
- 20145229吴姗珊《java程序设计》第2次实验报告