Go 语言入门指南:基础语法和常用特性解析

31 阅读3分钟

Go 语言入门指南

Go(又称为Golang)是一种开源的编程语言,由Google开发,于2009年首次公开发布。它旨在提供简洁、高效、可靠的软件开发解决方案。Golang是一种静态强类型、编译型语言,Golang具有很强的表达能力,得益于其并发机制,用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化。 Go 代码编译成机器码不仅非常迅速,还具有方便的垃圾收集机制和强大的运行时反射机制。


1. 基本语法

1.1. Hello, World


package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

解析

  • package main:定义程序的包名,main 是 Go 程序的入口包。
  • import "fmt" :引入标准库 fmt,用于格式化输出。
  • func main() :主函数,程序从这里开始执行。

1.2. 变量与常量


var a int = 10       // 显式声明
b := 20              // 简短声明(只能在函数内部使用)
const Pi = 3.14159   // 常量

要点

  • := 是 Go 特有的简短声明方式。
  • 常量使用 const 声明,值在编译时确定。

1.3. 数据类型

  • 基本类型

    • 整数类型:int, int8, int16, int32, int64
    • 浮点数类型:float32, float64
    • 布尔类型:bool
    • 字符串:string
  • 复合类型

    • 数组:[3]int(固定长度)
    • 切片:[]int(动态长度)
    • 映射:map[string]int(键值对)
    • 结构体:struct

var arr = [3]int{1, 2, 3}       // 数组
var slice = []int{4, 5, 6}      // 切片
var m = map[string]int{"a": 1}  // 映射
type Person struct { Name string; Age int }

1.4. 条件和循环


if a > 10 {
    fmt.Println("a is greater than 10")
} else if a == 10 {
    fmt.Println("a is 10")
} else {
    fmt.Println("a is less than 10")
}

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

// Go 中没有 while,但 for 可以实现相同效果:
i := 0
for i < 5 {
    fmt.Println(i)
    i++
}

2. 常用特性

2.1. 函数

func add(a int, b int) int {
    return a + b
}

func swap(x, y string) (string, string) {
    return y, x
}

特点

  • 参数类型可以简化写法,如 (a, b int)
  • 支持多返回值。

2.2. 指针

func updateValue(val *int) {
    *val = 42
}

var x = 10
updateValue(&x)
fmt.Println(x) // 输出 42

要点

  • 使用 & 获取地址,* 解引用。
  • Go 的指针避免了直接指针运算的复杂性,提升了安全性。

2.3. 并发

Go 的并发模型基于 goroutinechannel

go func() {
    fmt.Println("Hello from goroutine")
}()

ch := make(chan int) // 创建一个通道
go func() {
    ch <- 42 // 发送数据到通道
}()
fmt.Println(<-ch) // 接收数据

解析

  • go:启动一个新的协程。
  • 通道(channel) :用于 goroutine 间通信。

2.4. 错误处理

Go 使用显式的错误处理机制:

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("cannot divide by zero")
    }
    return a / b, nil
}

result, err := divide(10, 2)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Result:", result)
}

3. Go 的优势

  1. 静态类型,快速编译:类型系统强大,但语法简单。
  2. 内置并发:通过 goroutine 和 channel 支持高效并发。
  3. 垃圾回收:开发者无需手动管理内存。
  4. 跨平台支持:编译后可直接运行于多种平台。