【Golang】案例为基浅谈Go的变量与常量_1(2),2024年最新Glide的缓存机制

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

首先Go语言的特殊性导致在编译的过程中如果出现你定义的变量、常量、函数等没有被使用的话,编译是无法通过的,所以了解作用范围是很有必要的。

了解作用域可以更好的定义你需要使用的内容,也可以解决一些编译过程中的错误。

根据定义的位置总结三种

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

所谓的函数可以暂时先理解成一块代码片段,比如我们案例中常用的main()就是函数

将内容定义在函数的{ }内,就可以称之为定义在函数体内。

3.1.局部变量

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

(扩展)局部变量不是一直存在的,它只在定义它的函数被调用后存在,函数调用结束后这个局部变量就会被销毁。

案例

package main

import “fmt”

func main() {

// 定义变量,以下这些定义在main()函数中的都可以称之为局部变量
a := 10
b := 20
c := a + b
// 输出局部变量
fmt.Println(“输出局部变量为:”, a, b, c)

}

3.2.全局变量

在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量。

全局变量声明必须以 var 关键字开头,如果想要在外部包中使用(也就是想要被别的包进行import引用),那么全局变量的首字母必须大写

案例

package main

import “fmt”

// 定义全局变量,必须有var关键字,并且在函数体外面
var a = 10
var b = “let’s go”

func main() {
// 在main()函数中调用a、b
fmt.Println(“输出全局变量为:”, a, b)
demo()
}

func demo() {
// 因为是全局使用,在要在这个源码中我们的方法都能调用到
// 因此我在sum()函数中也可以调用到b变量的值
fmt.Println(“调用sum()函数输出的全局变量为:”, b)
}

可以看到如上案例,无论是在main()函数中还是在我们的demo()函数中,我们都可以得到a、b的值进行输出

使用细节:关于全局与局部同名怎么办?

大家可能会思考一个问题,如果我有一个全局变量叫a,同时我又在函数中也定义了一个局部变量a,这两个变量的名字相同但是值不同,那么我们程序应该采用谁?

其实大部分时候遇到这种情况,程序当中遵循的一般都是就近原则,也就是说很多时候我们的程序是谁离得近,就用谁。

也就说出现如上情况我们会优先先采用离得近的局部变量

案例

package main

import “fmt”

var a = “这是全局变量”

func main() {

a := “这是局部变量”
fmt.Println(“在main中会采用的变量是:”, a)
demo()
}

func demo() {
fmt.Println("如果没有局部变量影响: ", a)
}

得到的结果是:

在main中会采用的变量是: 这是局部变量
如果没有局部变量影响: 这是全局变量

注意:虽然这种情况会出现,但是还是不要出现这种让人容易产生歧义的代码,规则虽然没有不允许但是代码规范上显然这样是不对的

3.3.形式参数

在定义函数时函数名后面括号中的变量叫做形式参数(简称形参)。形式参数只在函数调用时才会生效,函数调用结束后就会被销毁,在函数未被调用时,函数的形参并不占用实际的存储单元,也没有实际值。

形式参数某种意义上也是一个被声明的局部变量,所以我们在定义局部变量的时候不要出现局部变量与形式参数重名的情况为好。

案例

package main

import “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.关于常量

在我们开始介绍代码中的常量的时候,我们要先阐述一下什么叫做常量

实际上所谓的常量就是一个不会改变的值,用来存储一些我们自己事先规定好、不会改变的值

4.1.常量的使用

Go语言中的常量使用关键字const定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型数字型(整数型、浮点型和复数)和字符串型

由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式

语法

// 注意了 []表示 数据类型 可写,可不写
const 常量名 [数据类型] = 值

从之前的变量声明中我们可以知道,其实Go语言很多时候想要简化一些批量性的动作,因此在定义常量的时候也可以采用批量式的定义。

批量定义的语法

const (
常量名1 = 值1
常量名2 = 值2

)

所有常量的运算都可以在编译期完成,这样不仅可以减少运行时的工作,也方便其他代码的编译优化,当操作数是常量时,一些运行时的错误也可以在编译时被发现,例如整数除零、字符串索引越界、任何导致无效浮点数的操作等。

案例

// 单个定义常量
const pi= 3.14159

// 批量定义常量
const (
e = 2.7182818
pi = 3.1415926
)

4.2.常量使用的细节

其实在使用常量的过程中,我们除了采用批量定义的方式来定义常量,我们还可以用另一种方式在批量定义常量的同时,简化常量初始化(赋值)的过程。

简单来说,假设我要定义a、b、c、d四个常量。a、b的值都定义为10,c、d的值都定义为20,那么我们在初始化的时候就可以进行一些简化操作。

案例解析

package main

import “fmt”

const (
a = 10
b
c = 20
d
)

func main() {

fmt.Println(“输出定义的常量:”, a, b, c, d)
}

最终得到的输出结果为:

输出定义的常量: 10 10 20 20

4.3.iota常量生成器

常量声明可以使用 iota 常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。

简单来说呢,就是有点类似于计数器的存在,在定义第一个常量的时候会被归置为0,然后依此累加1

需求

我们从需求出发可能更好理解这个iota

假设我们要定义常量为周一到周天,那么周一为0,依次类推周天为6。

案例解析

package main

import “fmt”

// 定义周一到周天
const (
Monday = iota
Tuesday
Wednesday
Thursday
Friday

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

假设我们要定义常量为周一到周天,那么周一为0,依次类推周天为6。

案例解析

package main

import “fmt”

// 定义周一到周天
const (
Monday = iota
Tuesday
Wednesday
Thursday
Friday

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-b3gGzAji-1713435155409)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值