Golang入门指南:从零掌握变量、常量与基本数据类型
Go语言(或称Golang)以其简洁的语法、高效的并发模型和出色的性能,近年来成为了云计算和后端开发领域的热门语言。对于初学者而言,扎实的基础是通往Go语言高手之路的第一步。本文将带你深入浅出地学习Go语言中最基础也是最重要的三个概念:变量、常量和基本数据类型。
一、变量(Variables)
变量是程序中用于存储数据的基本单元。你可以把它理解为一个命名的盒子,里面可以存放各种类型的数据,并且这个盒子里的内容是可以改变的。
1.1 变量的声明
在Go语言中,声明一个变量有多种方式,每种方式都有其适用的场景。
方式一:标准声明(显式指定类型)
使用 var
关键字,后接变量名和类型。
var name string
var age int
var isStudent bool
在这种方式下,变量会被自动初始化为其类型的“零值”:
- 数值类型(如
int
,float64
)的零值是0
- 布尔类型的零值是
false
- 字符串类型的零值是空字符串
""
方式二:类型推导声明(省略类型)
在声明变量时直接赋值,Go编译器可以根据初始值自动推导出变量的类型。
var name = "Alice" // 编译器推导出 name 为 string 类型
var age = 25 // 编译器推导出 age 为 int 类型
方式三:短变量声明(最常用)
在函数内部,可以使用更简短的 :=
语法来声明并初始化变量。
func main() {
name := "Bob" // 等价于 var name string = "Bob"
age := 30 // 等价于 var age int = 30
isStudent := false
fmt.Println(name, age, isStudent)
}
注意:短变量声明不能在函数外使用(即不能用于声明全局变量)。
方式四:批量声明
如果你需要一次性声明多个同类型或不同类型的变量,可以使用批量声明的语法,让代码更清晰。
var (
firstName string
lastName string
userId int
)
// 或者同时初始化
var (
firstName, lastName = "John", "Doe"
userId = 1001
)
1.2 变量的赋值与重新赋值
声明变量后,你可以使用 =
运算符为其赋予新的值。
func main() {
var count int // 声明,此时 count = 0
count = 10 // 赋值
fmt.Println("Count is:", count) // 输出: Count is: 10
count = count + 5 // 重新赋值
fmt.Println("Now count is:", count) // 输出: Now count is: 15
}
需要注意的是,变量一旦被声明为某种类型,就不能再被赋予其他类型的值(静态强类型语言的特点)。例如,一个 int
类型的变量不能被赋值为一个字符串。
var number int
number = 42 // 正确
number = "hello" // 错误!无法将字符串赋值给int类型变量
二、常量(Constants)
常量,顾名思义,是在程序编译阶段就确定下来的值,在程序运行期间其值不可改变。常量通常用于定义那些在程序逻辑中不会改变的值,如数学常数、配置参数等。
2.1 常量的定义
使用 const
关键字来定义常量。
const Pi = 3.14159
const MaxConnection = 100
const ApplicationName = "MyGoApp"
和变量一样,常量的类型也可以被省略,由编译器自动推导。
const Greeting = "Hello, World!" // 类型为 string
const Year = 2024 // 类型为 int
2.2 常量的批量声明与iota
你可以像变量一样批量声明常量。
const (
StatusOK = 200
StatusCreated = 201
StatusNotFound = 404
)
在批量声明常量时,Go提供了一个非常有用的计数器 iota
。iota
在 const
关键字出现时被重置为0,在每一个常量声明行被自动加1。
基础用法:
const (
Sunday = iota // 0
Monday // 1
Tuesday // 2
Wednesday // 3
Thursday // 4
Friday // 5
Saturday // 6
)
高级用法(表达式):
iota
支持参与表达式,后续的常量会重复这个表达式,仅iota递增。
const (
_ = iota // 忽略第一个值0
KB = 1 << (10 * iota) // 1 << (10 * 1) = 1024
MB // 1 << (10 * 2) = 1048576
GB // 1 << (10 * 3) = 1073741824
)
三、基本数据类型(Basic Data Types)
Go语言拥有丰富的基本数据类型,用于表示不同种类的数据。理解它们是编写有效程序的关键。
3.1 布尔类型(bool)
布尔类型表示真或假,只有两个预定义常量:true
和 false
。
var isActive bool = true
var canLogin = false
// 布尔值常用于条件判断
if isActive {
fmt.Println("用户处于活跃状态")
}
3.2 数值类型
Go的数值类型分为整型和浮点型。
整型(Integer Types)
Go提供了多种大小的有符号和无符号整数。
类型 | 描述 | 取值范围 |
---|---|---|
int8 / uint8 (byte) | 8位整数 | -128~127 / 0~255 |
int16 / uint16 | 16位整数 | -32768~32767 / 0~65535 |
int32 (rune) / uint32 | 32位整数 | -21亿~21亿 / 0~42亿 |
int64 / uint64 | 64位整数 | 非常大 |
int / uint | 平台相关,通常是32位或64位 | 取决于系统 |
uintptr | 用于存放一个指针 |
实际应用:
byte
是uint8
的别名,常用于处理原始二进制数据。rune
是int32
的别名,代表一个Unicode码点,常用于处理中文等字符。
var a int = 10
var b uint = 20
var c byte = 255 // 等同于 var c uint8 = 255
浮点型(Floating-Point Types)
Go有两种浮点数:float32
和 float64
。它们的精度不同,绝大多数情况下应使用 float64
,因为它精度更高,是默认的浮点类型。
var pi32 float32 = 3.1415926 // 精度较低
var pi64 float64 = 3.141592653589793 // 精度较高,推荐使用
temperature := 26.5 // 默认被推导为 float64 类型
3.3 字符串类型(string)
字符串是不可变的字节序列,用双引号 ""
或反引号 `
来创建。
- 双引号:用于创建可解析的字符串,支持转义字符(如
\n
换行)。 - 反引号:用于创建原生的字符串字面量,不支持任何转义,内容会原样输出(常用于多行字符串或正则表达式)。
// 双引号字符串
s1 := "Hello,\nWorld!"
fmt.Println(s1)
// 输出:
// Hello,
// World!
// 反引号字符串(多行字符串)
s2 := `这是一个
多行
字符串。\n这里的\n不会被转义。`
fmt.Println(s2)
// 输出:
// 这是一个
// 多行
// 字符串。\n这里的\n不会被转义。
字符串操作:
Go标准库 strings
包提供了丰富的字符串操作函数。
```go package main
import ( “fmt” “strings” )
func main() { message := “Hello, Go Programmer”
// 求长度
fmt.Println(len(message)) // 输出: 20
// 字符串拼接
greeting := "Hello"
name := "Alice"