青训营-Go 语言入门指南:基础语法和常用特性解析 | 豆包MarsCode AI刷题

63 阅读2分钟

Go 语言入门指南

Go 语言(Golang)是一种简洁、高效、并发友好的编程语言,由 Google 开发,广泛应用于后端开发、微服务、云计算等领域。以下是 Go 语言的基础语法和常用特性解析,帮助新手快速入门。


1. Go 语言的基本特性

  • 静态类型:变量类型在编译时确定。
  • 高效并发:内置 goroutine 和 channel,轻松实现并发。
  • 跨平台编译:支持直接编译为目标平台的可执行文件。
  • 内置垃圾回收:简化内存管理。
  • 丰富的标准库:提供网络、文件处理、数据编码等功能。

2. 基础语法

2.1 Hello, World
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
  • package main:定义程序的包。
  • import "fmt":导入标准库的 fmt 包,用于格式化输出。
  • func main():程序的入口函数。

2.2 变量与常量
变量声明
var x int = 10       // 显式声明
y := 20              // 简短声明(仅限函数内部)
常量声明
const Pi = 3.14
多变量声明
var a, b, c int = 1, 2, 3
d, e := "Hello", true

2.3 数据类型
  • 基本类型
    • 整数:int, int8, int16, int32, int64
    • 浮点数:float32, float64
    • 布尔值:bool
    • 字符串:string
  • 复合类型
    • 数组:[5]int
    • 切片:[]int
    • 映射(字典):map[string]int
    • 结构体:struct
    • 指针:*int

2.4 条件与循环
条件语句
if x > 10 {
    fmt.Println("x is greater than 10")
} else if x == 10 {
    fmt.Println("x is 10")
} else {
    fmt.Println("x is less than 10")
}
循环语句
for i := 0; i < 5; i++ {
    fmt.Println(i)
}

Go 中没有 whiledo-while,用 for 代替:

for x < 10 {
    x++
}

2.5 函数
基本函数
func add(a int, b int) int {
    return a + b
}
多返回值
func swap(x, y string) (string, string) {
    return y, x
}

调用:

a, b := swap("Hello", "World")
fmt.Println(a, b) // 输出:World Hello

2.6 指针
func updateValue(x *int) {
    *x = 42
}

var y int = 10
updateValue(&y)
fmt.Println(y) // 输出:42

2.7 数组和切片
数组
var arr = [5]int{1, 2, 3, 4, 5}
fmt.Println(arr[0]) // 访问第一个元素
切片
slice := []int{1, 2, 3, 4}
slice = append(slice, 5) // 动态添加元素

2.8 映射(map)
ages := map[string]int{
    "Alice": 25,
    "Bob":   30,
}
ages["Charlie"] = 35 // 添加键值对
delete(ages, "Bob")  // 删除键值对

3. 并发特性

goroutine
go func() {
    fmt.Println("Running in a goroutine")
}()
channel
ch := make(chan int)

go func() {
    ch <- 42 // 发送数据
}()

value := <-ch // 接收数据
fmt.Println(value) // 输出:42

4. 常用工具

  • go run:运行 Go 文件。
  • go build:编译生成可执行文件。
  • go fmt:格式化代码。
  • go test:运行测试。
  • go mod:管理依赖。

5. 示例:简单 HTTP 服务器

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, Go Web!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

6. 学习资源