跳到主要内容

Go 完整教程(新手向)

阅读需 2 分钟

本教程面向零基础或刚接触 Go 的开发者,按由浅入深的顺序讲解所有主要知识点。建议按章节顺序阅读。


一、Go 简介

Go 是什么?

Go(又称 Golang)是一种由 Google 主导开发的编程语言,特点包括:

  • 语法简洁,学习成本相对低
  • 并发模型原生支持(goroutine + channel)
  • 编译为本地二进制,部署方便

适合做什么?

  • 高性能网络服务(HTTP/RPC)
  • 需要并发处理的场景
  • 云原生、工具类程序

二、安装与工作区

安装 Go

  • 建议安装最新稳定版
  • 确认版本:
go version

创建模块(Go Modules)

mkdir my-go-app
cd my-go-app
go mod init example.com/my-go-app

Go 的依赖管理通常基于 go.mod


三、基础语法

最小可运行程序

创建 main.go

package main

import "fmt"

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

变量与常量

var name = "Alice"
var age int = 18
const appName = "my-app"

常用类型

  • int / int64
  • string
  • bool
  • float64

四、函数、包与模块

函数

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

Go 用目录划分包,例如:

my-go-app/
├── main.go
└── utils/
└── math.go

utils/math.go

package utils

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

main.go 中使用:

import "example.com/my-go-app/utils"

五、结构体与接口

结构体(struct)

type User struct {
Name string
Age int
}

方法

func (u User) Greet() string {
return fmt.Sprintf("hi, %s", u.Name)
}

接口(interface)

接口关注“行为”,而不是具体类型:

type Greeter interface {
Greet() string
}

func SayHello(g Greeter) {
fmt.Println(g.Greet())
}

六、并发:goroutine 与 channel

goroutine

go func() {
fmt.Println("running in goroutine")
}()

channel 通信

ch := make(chan int)

go func() {
ch <- 42
}()

v := <-ch
fmt.Println(v)

七、错误处理

Go 的错误处理通常是显式返回 error

import "errors"

func findUser(id int) (string, error) {
if id <= 0 {
return "", errors.New("invalid id")
}
return "Alice", nil
}

调用方:

name, err := findUser(1)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(name)

八、HTTP 服务示例

创建 server/main.go

package main

import (
"encoding/json"
"net/http"
)

func main() {
http.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
_ = json.NewEncoder(w).Encode(map[string]any{"ok": true})
})

http.ListenAndServe(":3000", nil)
}

运行:

go run ./server

访问:http://localhost:3000/health


九、测试与工具

基础测试

utils/math_test.go

package utils

import "testing"

func TestAdd(t *testing.T) {
got := Add(1, 2)
if got != 3 {
t.Fatalf("expected 3, got %d", got)
}
}

运行测试:

go test ./...

十、部署与小结

构建

go build -o app .

交叉编译(示例)

GOOS=linux GOARCH=amd64 go build -o app .

小结

  • 基础语法:变量、函数、结构体
  • 工程结构:包与 modules(go.mod
  • 设计能力:接口驱动抽象
  • 并发:goroutine/channel
  • 网络:net/http 做最小服务
  • 质量:go test ./...

十一、学习路径小结

  1. 跑通 go mod init 并完成一个 main.go
  2. 学会结构体与方法、接口与多态
  3. 写至少一个 goroutine + channel 的例子
  4. 做一个 /health 的 HTTP 服务
  5. 补上测试:至少 1-2 个 go test 用例

遇到问题可查阅 Go 官方文档

Loading Comments...