本文作为Go语言学习的第一篇内容,并没有写道Go语言环境的安装配置,以及vs code的安装与配置。安装的话全网都是,随便搜一篇就好了。
注意:先看第三部分内容的格式,在看第一二部分内容
目录
1.变量
1.1.英雄的背景:什么是变量
在王者荣耀的召唤师峡谷中,每一位英雄都有独特的技能、装备和作战策略。同样,在Go语言的编程世界里,变量就像那些英雄与装备,它们各司其职,共同构建出强大的程序阵容。今天,让我们穿上"代码战甲",手持"编译法杖",以王者的视角探索Go语言变量的奥秘,助你在编程战场上无往不利!
1.2.英雄诞生:变量的创建
在峡谷中,每位英雄的诞生都伴随着一个响亮的名字与特定的定位。在Go语言中,变量的创建也是如此:
go
var 峡谷英雄 召唤师职业 = 初始属性
注意:
在输出前一定要先Ctrl+s
将代码保存,修改一次保存一次
go
var luban7hao int = 174
# 接下来可以使用fmt.Println查看鲁班七号的初始攻击力
fmt.Println("鲁班七号的初始攻击力为:", luban7hao)
# 输出
> go run .\1.go
鲁班七号的初始攻击力为: 174
这里的"峡谷英雄"指的是变量名
;
而"召唤师职业"是变量类型
,好比英雄的定位(坦克、法师、射手等),而变量的常用类型则有:
bool
:布尔类型,值为true
或false
int
:整数类型,根据平台不同可能是32位或64位float32、float64
:浮点数类型,分别表示32位和64位string
:字符串类型,表示文本数据
"初始属性"则是变量的初始值
,如同新英雄降临峡谷时的基础战斗力。
除了这种写法,Go语言还提供了一种"闪现"式的变量创建方式,用于在函数内部定义:
go
峡谷英雄 := 初始属性
这种声明方式不仅简化了语法,还能让编译器自动识别"峡谷英雄"的职业(类型)
go
sunshangxiang := 168
fmt.Println("孙尚香的初始攻击力为:", sunshangxiang)
# 输出
> go run .\1.go
孙尚香的初始攻击力为: 168
而通过:=
方式定义变量的方法,我们怎么知道孙尚香的变量类型是什么呢?
我们通过reflect.TypeOf()
函数来获取变量sunshangxiang
的类型,然后使用fmt.Println
输出
go
fmt.Println("孙尚香的变量类型为:", reflect.TypeOf(sunshangxiang))
# 输出
> go run .\1.go
孙尚香的变量类型为: int
1.3.召唤师分类:导出与未导出
在王者荣耀中,召唤师分为RMB玩家的"V10大佬"(可共享皮肤)和一毛不氪的"普通玩家"(肝活动皮肤自己使用)。Go语言的变量也有类似的划分,依据变量名的首字母大小写:
go
Zhaohuanshi := "V10大佬"
zhaohuanshi := "普通玩家"
fmt.Println("一号召唤师是:", Zhaohuanshi)
fmt.Println("二号召唤师是:", zhaohuanshi)
# 输出
一号召唤师是: V10大佬
二号召唤师是: 普通玩家
变量名首字母小写
代表私有变量,只能在当前包中引用;
变量名首字母大写
代表公共变量,可被其他包引用、访问和修改等。
1.4.英雄信息:批量声明
在峡谷中,一位英雄可不止有初始攻击力,还有血量,防御等等内容,接下来这个变量可看到一位英雄的基本信息:
go
var (
name string = "虞姬"
attack int = 165
hp int = 2977
mana int = 440
)
fmt.Println("英雄名:", name)
fmt.Println("攻击力:", attack)
fmt.Println("血量值:", hp)
fmt.Println("法力值:", mana)
# 输出
> go run .\1.go
英雄名: 虞姬
攻击力: 165
血量值: 2977
法力值: 440
2.常量
2.1.永恒之力:定义常量
不同于英雄的属性一样会变化,常量
就像大装备的属性一样固定且不会发生变化,比如一件强大的装备:无尽战刃。
go
const (
w_name string = "无尽战刃"
w_attack int = 110
)
fmt.Println("这件装备的名称是:", w_name)
fmt.Println("这件装备增加的攻击力是:", w_attack)
# 输出
> go run .\1.go
这件装备的名称是: 无尽战刃
这件装备增加的攻击力是: 110
不管是游戏初期还是中期,这件装备的攻击力都是110,不会发生变化,这就是常量。
注意:常量不可使用:=
定义
2.2.永恒之力的继承:iota
还是拿我们的虞姬来举例吧,虞姬有一个技能叫做"楚歌起",基础伤害值是800,每升一级伤害增加160,一共有六个级别。
go
// 计算虞姬楚歌起技能的伤害值
const (
baseDamage = 800
levelUp = 160
maxLevel = 6
)
// 虞姬楚歌起技能的伤害值随等级提高的变化
damage := baseDamage
for level := 1; level <= maxLevel; level++ {
fmt.Printf("技能楚歌起的等级为: %d,伤害值为: %d\n", level, damage)
damage += levelUp
}
# 输出
> go run .\1.go
技能楚歌起的等级为: 1,伤害值为: 800
技能楚歌起的等级为: 2,伤害值为: 960
技能楚歌起的等级为: 3,伤害值为: 1120
技能楚歌起的等级为: 4,伤害值为: 1280
技能楚歌起的等级为: 5,伤害值为: 1440
技能楚歌起的等级为: 6,伤害值为: 1600
这段代码含义为:
首先,通过const关键字定义了三个常量:
- baseDamage:基础伤害值,为800。
- levelUp:每升一级增加的伤害值,为160。
- maxLevel:技能的最大等级,为6。
然后,初始化了一个变量damage
,赋值为baseDamage
,即800。这个变量用于存储当前等级下的技能伤害值。
接下来是一个for循环,从等级1
开始,到最大等级maxLevel
结束。在循环中:
- 使用
fmt.Printf
函数打印当前等级和对应的伤害值。 - 然后,将
damage
的值增加levelUp
,即每升一级,伤害值增加160。
\n
为换行;%d
是将一个整数插入到所在的位置,在fmt.Printf
中使用。
3.本文所有代码
go
package main
import (
"fmt"
"reflect"
)
// 虞姬的基本信息
var (
name string = "虞姬"
attack int = 165
hp int = 2977
mana int = 440
)
func main() {
// 鲁班七号
var luban7hao int = 174
// 孙尚香
sunshangxiang := 168
// 变量首字母大小写的区别
Zhaohuanshi := "V10大佬"
zhaohuanshi := "普通玩家"
// 定义一个常量:无尽战刃
const (
w_name string = "无尽战刃"
w_attack int = 110
)
// 计算虞姬楚歌起技能的伤害值
const (
baseDamage = 800
levelUp = 160
maxLevel = 6
)
fmt.Println("鲁班七号的初始攻击力为:", luban7hao)
fmt.Println("孙尚香的初始攻击力为:", sunshangxiang)
fmt.Println("孙尚香的变量类型为:", reflect.TypeOf(sunshangxiang))
fmt.Println("一号召唤师是:", Zhaohuanshi)
fmt.Println("二号召唤师是:", zhaohuanshi)
// 虞姬的基本信息
fmt.Println("英雄名:", name)
fmt.Println("攻击力:", attack)
fmt.Println("血量值:", hp)
fmt.Println("法力值:", mana)
// 无尽战刃
fmt.Println("这件装备的名称是:", w_name)
fmt.Println("这件装备增加的攻击力是:", w_attack)
// 虞姬楚歌起技能的伤害值随等级提高的变化
damage := baseDamage
for level := 1; level <= maxLevel; level++ {
fmt.Printf("技能楚歌起的等级为: %d,伤害值为: %d\n", level, damage)
damage += levelUp
}
}