Go语言第一篇-变量与常量:峡谷中的英雄与装备

本文作为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:布尔类型,值为truefalse
  • 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
	}

}
相关推荐
百流31 分钟前
scala文件编译相关理解
开发语言·学习·scala
Evand J2 小时前
matlab绘图——彩色螺旋图
开发语言·matlab·信息可视化
深度混淆2 小时前
C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合
开发语言·c#
雁于飞3 小时前
c语言贪吃蛇(极简版,基本能玩)
c语言·开发语言·笔记·学习·其他·课程设计·大作业
wenxin-4 小时前
NS3网络模拟器中如何利用Gnuplot工具像MATLAB一样绘制各类图形?
开发语言·matlab·画图·ns3·lr-wpan
数据小爬虫@5 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片6 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
王老师青少年编程7 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
一只小bit8 小时前
C++之初识模版
开发语言·c++