Skip to content

1.3 语法基础 ​

变量与常量声明 ​

go
package main

import "fmt"

// 包级变量
var globalVar int = 10
var globalVar2 = 20  // 类型推断
var name, age = "go", 18  // 多变量声明

// 常量
const Pi = 3.14159
const (
    StatusOK = 200
    StatusNotFound = 404
    StatusServerError = 500
)

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

// iota 表达式
const (
    _ = iota          // 0 (跳过)
    KB = 1 << (10*iota)  // 1 << 10 = 1024
    MB                 // 1 << 20 = 1048576
    GB                 // 1 << 30
)

func main() {
    // 短变量声明 (最常用)
    x := 42
    name := "Go"
    active := true

    // 多变量声明
    var a, b int = 1, 2
    c, d := 3, 4

    // 交换值
    a, b = b, a

    // 空白标识符 (忽略返回值)
    _, val := getValue()

    fmt.Println(x, name, active, a, b, c, d, val)
}

func getValue() (string, int) {
    return "result", 100
}

基本数据类型 ​

go
package main

import (
    "fmt"
    "math"
    "unicode/utf8"
)

func main() {
    // 整数类型
    var i8 int8 = 127
    var i16 int16 = 32767
    var i32 int32 = 2147483647
    var i64 int64 = math.MaxInt64
    var i int = 100

    var u8 uint8 = 255
    var u32 uint32 = 4294967295
    var u64 uint64 = 18446744073709551615

    // 浮点类型
    var f32 float32 = 3.14
    var f64 float64 = 3.141592653589793

    // 布尔类型
    var isTrue bool = true
    var isFalse bool = false

    // 字符串类型
    var str string = "Hello, Go!"

    fmt.Println(len(str))                    // 12
    fmt.Println(utf8.RuneCountInString("你好 Go"))  // 4

    // 类型别名
    type (
        Integer int
        Text string
    )

    var num Integer = 42
    fmt.Println(num)
}

运算符 ​

go
package main

import "fmt"

func main() {
    // 算术运算符
    a, b := 17, 5
    fmt.Println(a + b)  // 22
    fmt.Println(a % b)  // 2

    // 自增自减
    a++
    b--

    // 关系运算符
    x, y := 10, 20
    fmt.Println(x == y)  // false
    fmt.Println(x < y)   // true

    // 逻辑运算符
    p, q := true, false
    fmt.Println(p && q)  // false
    fmt.Println(p || q)  // true
    fmt.Println(!p)      // false

    // 位运算符
    m, n := 12, 5
    fmt.Println(m & n)   // 4
    fmt.Println(m | n)   // 13
    fmt.Println(m ^ n)   // 9
    fmt.Println(m << 2)  // 48

    // 类型转换
    var f float64 = 3.9
    i := int(f)  // 3
    fmt.Println(i)
}

格式化输入输出 ​

go
package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    // Print 系列
    fmt.Print("Hello\n")
    fmt.Println("World")
    fmt.Printf("Name: %s, Age: %d\n", "Go", 13)

    // 常用动词:%v, %d, %f, %s, %t, %p, %T

    // Scan 输入
    var input string
    fmt.Print("Enter name: ")
    fmt.Scan(&input)

    // 读取整行
    reader := bufio.NewReader(os.Stdin)
    line, _ := reader.ReadString('\n')
    line = strings.TrimSpace(line)

    fmt.Println("Hello,", line)
}

注释规范 ​

go
// 单行注释

// 包注释
package main

// 函数注释
// FormatUser 格式化用户信息
// 参数:name - 姓名,age - 年龄
// 返回:格式化后的字符串
func FormatUser(name string, age int) string {
    return fmt.Sprintf("%s (%d)", name, age)
}

// 结构体注释
// Config 配置结构
type Config struct {
    // Name 应用名称
    Name string
    // Port 服务端口
    Port int
}

// 待办标记
// TODO: 优化性能
// FIXME: 修复 bug
// NOTE: 重要说明