Go

Go

基础语法

Hello World

package main

import "fmt"

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

变量声明

var name string = "Alice"  // 显式类型
var age = 25               // 类型推断
height := 175              // 短声明(函数内)

常量

const Pi = 3.14
const (
    StatusOK = 200
    StatusNotFound = 404
)

数据类型

类型 示例 说明
int var n int = 42 整数(32/64位)
float64 pi := 3.14 双精度浮点数
bool isDone := true 布尔值
string s := "Go" UTF-8 字符串
rune c := 'A' Unicode 码点

复合类型

// 数组
var arr [3]int = [3]int{1, 2, 3}

// 切片(动态数组)
slice := []int{1, 2, 3}
slice = append(slice, 4)

// 映射
m := map[string]int{"a": 1, "b": 2}

流程控制

条件语句

if score >= 90 {
    fmt.Println("A")
} else if score >= 80 {
    fmt.Println("B")
} else {
    fmt.Println("C")
}

循环

// 传统 for 循环
for i := 0; i < 5; i++ {
    fmt.Println(i)
}

// while 替代
n := 0
for n < 5 {
    fmt.Println(n)
    n++
}

// 无限循环
for {
    break // 需手动退出
}

Switch

switch os := runtime.GOOS; os {
case "darwin":
    fmt.Println("macOS")
case "linux":
    fmt.Println("Linux")
default:
    fmt.Println("Other")
}

函数

基本函数

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

// 多返回值
func swap(x, y string) (string, string) {
    return y, x
}

匿名函数

func() {
    fmt.Println("Anonymous function")
}()

闭包

func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

结构体与方法

定义结构体

type Person struct {
    Name string
    Age  int
}

p := Person{"Alice", 25}

方法

func (p Person) SayHello() {
    fmt.Printf("Hello, I'm %s\n", p.Name)
}

接口

定义接口

type Shape interface {
    Area() float64
}

实现接口

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

并发编程

Goroutine

func say(s string) {
    for i := 0; i < 3; i++ {
        fmt.Println(s)
    }
}

go say("Hello") // 启动新协程

Channel

ch := make(chan int)

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

val := <-ch // 接收数据

错误处理

标准错误处理

f, err := os.Open("file.txt")
if err != nil {
    log.Fatal(err)
}
defer f.Close()

自定义错误

type MyError struct {
    Msg string
}

func (e *MyError) Error() string {
    return e.Msg
}

标准库常用包

包名 用途
fmt 格式化 I/O
net/http HTTP 客户端/服务器
os 操作系统功能
encoding/json JSON 处理
sync 并发同步工具

项目结构

myproject/
├── go.mod       # 模块定义
├── main.go      # 入口文件
├── internal/    # 内部包
│   └── utils/   # 工具函数
├── pkg/         # 可复用库
└── cmd/         # 命令行程序
posted @ 2025-05-30 12:27  怅纡  阅读(14)  评论(0)    收藏  举报