Golang入门指南:从零掌握变量、常量与基本数据类型

2025/09/14 Golang 共 3100 字,约 9 分钟

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提供了一个非常有用的计数器 iotaiotaconst 关键字出现时被重置为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)

布尔类型表示真或假,只有两个预定义常量:truefalse

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 / uint1616位整数-32768~32767 / 0~65535
int32 (rune) / uint3232位整数-21亿~21亿 / 0~42亿
int64 / uint6464位整数非常大
int / uint平台相关,通常是32位或64位取决于系统
uintptr用于存放一个指针 

实际应用:

  • byteuint8 的别名,常用于处理原始二进制数据。
  • runeint32 的别名,代表一个Unicode码点,常用于处理中文等字符。
var a int = 10
var b uint = 20
var c byte = 255 // 等同于 var c uint8 = 255

浮点型(Floating-Point Types)

Go有两种浮点数:float32float64。它们的精度不同,绝大多数情况下应使用 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"

文档信息

Search

    Table of Contents