Skip to content

基本语法

变量声明

方式一:使用 var 关键字

go
var name string = "Go语言"
var age int = 20
var isTrue bool = true

方式二:短变量声明(仅在函数内)

go
name := "Go语言"
age := 20
isTrue := true

提示

短变量声明 := 只能在函数内部使用,函数外部必须使用 var 关键字。

方式三:批量声明

go
var (
    name   string  = "Go语言"
    age    int     = 20
    isTrue bool    = true
)

变量零值

如果声明变量但不赋值,Go会赋予零值:

go
var i int       // 0
var f float64   // 0.0
var s string    // ""(空字符串)
var b bool      // false

常量

基本常量

go
const PI = 3.14159
const NAME string = "Go"

批量声明常量

go
const (
    StatusOK    = 200
    StatusError = 500
)

iota 常量生成器

go
const (
    Sunday = iota    // 0
    Monday           // 1
    Tuesday          // 2
    Wednesday        // 3
    Thursday         // 4
    Friday           // 5
    Saturday         // 6
)

// 位运算示例
const (
    Read   = 1 << iota  // 1
    Write               // 2
    Execute             // 4
)

数据类型

基本数据类型

类型描述零值
bool布尔类型false
string字符串类型""
int整型(根据系统32或64位)0
int88位整型0
int1616位整型0
int3232位整型0
int6464位整型0
uint无符号整型0
float3232位浮点型0.0
float6464位浮点型0.0
byte字节类型(uint8别名)0
runeUnicode字符(int32别名)0

完整示例

go
package main

import "fmt"

func main() {
    // 布尔类型
    isTrue := true
    
    // 字符串类型
    str := "Hello, Go!"
    
    // 整型
    num := 100
    
    // 浮点型
    pi := 3.14159
    
    // 字节类型
    b := byte('A')
    
    // Unicode字符
    r := rune('')
    
    fmt.Printf("布尔值: %t\n", isTrue)
    fmt.Printf("字符串: %s\n", str)
    fmt.Printf("整数: %d\n", num)
    fmt.Printf("浮点数: %f\n", pi)
    fmt.Printf("字节: %c\n", b)
    fmt.Printf("Unicode: %c\n", r)
}

类型转换

Go不支持隐式类型转换,必须显式转换:

go
var i int = 100
var f float64 = float64(i)  // int -> float64
var u uint = uint(i)        // int -> uint

// 字符串转换
import "strconv"

numStr := strconv.Itoa(123)       // int -> string
num, _ := strconv.Atoi("123")     // string -> int
f, _ := strconv.ParseFloat("3.14", 64)  // string -> float64

变量作用域

go
package main

import "fmt"

var globalVar = "全局变量"  // 包级别变量

func main() {
    localVar := "局部变量"  // 函数级别变量
    
    if true {
        blockVar := "块级变量"  // 块级别变量
        fmt.Println(globalVar, localVar, blockVar)
    }
    
    // fmt.Println(blockVar)  // 错误:超出作用域
}