婉拒了哈

📓推荐网站(不断完善中):个人博客

📌个人主页:个人主页

👉相关专栏:CSDN专栏、个人专栏

🏝立志赚钱,干活想躺,瞎分享的摸鱼工程师一枚

在上一篇文章中,博主对于Go语言中的一些基本语法与变量的初步定义做了初步介绍。

在这篇文章主要是对于变量的进一步应用,以及对于Go语言中常量的介绍。

那么我们就看以下内容!

文章目录

  • 🍒前言
    • @[toc]
  • 1.变量交换
  • 2.匿名变量
    • 2.1.如何理解这个匿名变量的使用场景?
  • 3.关于作用域
    • 3.1.局部变量
    • 3.2.全局变量
    • 3.3.形式参数
  • 4.关于常量
    • 4.1.常量的使用
    • 4.2.常量使用的细节
    • 4.3.iota常量生成器
  • 5.关于源码
  • 🍊写在结尾

img%2F01-1

变量交换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🌟
案例 + 注释 + 讲解

本章节内容主要是讲述了一些关于变量的进一步细节运用,以及关于常量的知识,这两部分的内容在未来我们实际开发代码当中还是比较经常用到的,所以还是要好好的去梳理和理解一下。

以上为个人分享,如有错误请指出