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
	}

}
相关推荐
ZSYP-S20 分钟前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos23 分钟前
c++------------------函数
开发语言·c++
程序员_三木36 分钟前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊1 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
tianmu_sama1 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
黄公子学安全1 小时前
Java的基础概念(一)
java·开发语言·python
liwulin05061 小时前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc1 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Oneforlove_twoforjob1 小时前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言
羚羊角uou1 小时前
【C++】优先级队列以及仿函数
开发语言·c++