📓推荐网站(不断完善中):个人博客
📌个人主页:个人主页
👉相关专栏:CSDN专栏、个人专栏
🏝立志赚钱,干活想躺,瞎分享的摸鱼工程师一枚
在上一篇文章中,博主对于Go语言中的一些基本语法与变量的初步定义做了初步介绍。
在这篇文章主要是对于变量的进一步应用,以及对于Go语言中常量的介绍。
那么我们就看以下内容!
文章目录
- 🍒前言
- @[toc]
- 1.变量交换
- 2.匿名变量
- 2.1.如何理解这个匿名变量的使用场景?
- 3.关于作用域
- 3.1.局部变量
- 3.2.全局变量
- 3.3.形式参数
- 4.关于常量
- 4.1.常量的使用
- 4.2.常量使用的细节
- 4.3.iota常量生成器
- 5.关于源码
- 🍊写在结尾
文章目录
- 🍒前言
- @[toc]
- 1.变量交换
- 2.匿名变量
- 2.1.如何理解这个匿名变量的使用场景?
- 3.关于作用域
- 3.1.局部变量
- 3.2.全局变量
- 3.3.形式参数
- 4.关于常量
- 4.1.常量的使用
- 4.2.常量使用的细节
- 4.3.iota常量生成器
- 5.关于源码
- 🍊写在结尾
变量交换a:=10b:=20
案例
package mainimport "fmt"func main() {// 定义变量a、b,并且分别赋值10、20a, b := 10, 20// 第一轮输出查看结果fmt.Println("原本a、b的结果为:", a, b)// 然后我们可以直接用 = 号来对a、b进行快速赋值,交换他们的位置a, b = b, a// 第二轮输出查看结果fmt.Println("新输出的a、b结果为:", a, b)}
=
匿名变量匿名变量抛弃值
关键标识
利用 _ 下划线,来标识匿名变量,也是我们所说的空白标识符
案例
package mainimport "fmt"func main() {// 定义变量_, a := 10, 7// 使用匿名变量的时候10就是抛弃值fmt.Println("输出结果:", a)
}
2.1.如何理解这个匿名变量的使用场景?
Dial()
案例
package mainimport ("fmt""net"
)
func main() {//conn, err := net.Dial("tcp", "127.0.0.1:8080")//如果不想接收err的值,那么可以使用_表示,这就是匿名变量conn, _ := net.Dial("tcp", "127.0.0.1:8080")fmt.Println(conn)
}
net.Dial()conn,errconn匿名变量
作用域变量、常量、函数
根据定义的位置总结三种
局部变量全局变量形式参数
main(){ }
3.1.局部变量
局部变量只在函数体内
(扩展)局部变量不是一直存在的,它只在定义它的函数被调用后存在,函数调用结束后这个局部变量就会被销毁。
案例
package mainimport "fmt"func main() {// 定义变量,以下这些定义在main()函数中的都可以称之为局部变量a := 10b := 20c := a + b// 输出局部变量fmt.Println("输出局部变量为:", a, b, c)}
3.2.全局变量
全局变量一个源文件中定义,就可以在所有源文件中使用必须以 var 关键字开头首字母必须大写
案例
package mainimport "fmt"// 定义全局变量,必须有var关键字,并且在函数体外面
var a = 10
var b = "let's go"func main() {// 在main()函数中调用a、bfmt.Println("输出全局变量为:", a, b)demo()
}func demo() {// 因为是全局使用,在要在这个源码中我们的方法都能调用到// 因此我在sum()函数中也可以调用到b变量的值fmt.Println("调用sum()函数输出的全局变量为:", b)
}
main()demo()a、b
使用细节:关于全局与局部同名怎么办?
aa就近原则局部变量
案例
package mainimport "fmt"var a = "这是全局变量"func main() {a := "这是局部变量"fmt.Println("在main中会采用的变量是:", a)demo()
}func demo() {fmt.Println("如果没有局部变量影响: ", a)
}
得到的结果是:
在main中会采用的变量是: 这是局部变量
如果没有局部变量影响: 这是全局变量
注意:虽然这种情况会出现,但是还是不要出现这种让人容易产生歧义的代码,规则虽然没有不允许但是代码规范上显然这样是不对的
3.3.形式参数
形式参数并不占用实际的存储单元
案例
package mainimport "fmt"// 定义了全局变量
var a = "这是全局变量"func main() {// 这里是局部变量a := "这是main的局部变量a"b := "这是main的局部变量b"fmt.Println("输出变量的值为: ", a, b)// 在调用test()函数的时候传递局部变量a、b的值test(a, b)
}// 在函数中定义形参a、b,那么当test()函数被调用的时候
// 形参就可以直接被当作局部变量来使用,值则是由调用者的传递内容来决定的
func test(a, b string) {// 输出结果fmt.Println("这是由main传过来的内容:", a, b)
}
得到的输出结果为:
输出变量的值为: 这是main的局部变量a 这是main的局部变量b
这是由main传过来的内容: 这是main的局部变量a 这是main的局部变量b
局部变量全局变量形式参数
常量常量事先规定好、不会改变
4.1.常量的使用
const布尔型数字型字符串型
语法
// 注意了 []表示 数据类型 可写,可不写
const 常量名 [数据类型] = 值
从之前的变量声明中我们可以知道,其实Go语言很多时候想要简化一些批量性的动作,因此在定义常量的时候也可以采用批量式的定义。
批量定义的语法
const (常量名1 = 值1常量名2 = 值2...
)
所有常量的运算都可以在编译期完成,这样不仅可以减少运行时的工作,也方便其他代码的编译优化,当操作数是常量时,一些运行时的错误也可以在编译时被发现,例如整数除零、字符串索引越界、任何导致无效浮点数的操作等。
案例
// 单个定义常量
const pi= 3.14159// 批量定义常量
const (e = 2.7182818pi = 3.1415926
)
4.2.常量使用的细节
批量定义常量a、b、c、d
案例解析
package mainimport "fmt"const (a = 10bc = 20d
)func main() {fmt.Println("输出定义的常量:", a, b, c, d)
}
最终得到的输出结果为:
输出定义的常量: 10 10 20 20
4.3.iota常量生成器
计数器0
需求
iota
案例解析
package mainimport "fmt"// 定义周一到周天
const (Monday = iotaTuesdayWednesdayThursdayFridaySaturdaySunday //6
)func main() {fmt.Println("输出日期的值为:", Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
}
输出的结果为:
输出日期的值为: 0 1 2 3 4 5 6
iotaMonday = iota+1
Github
star🌟
案例 + 注释 + 讲解
本章节内容主要是讲述了一些关于变量的进一步细节运用,以及关于常量的知识,这两部分的内容在未来我们实际开发代码当中还是比较经常用到的,所以还是要好好的去梳理和理解一下。
以上为个人分享,如有错误请指出