Go语言后端开发入门指南

一、环境搭建

bash 复制代码
# Windows (winget)
winget install Go

# macOS
brew install go

# Linux (Ubuntu/Debian)
sudo apt install golang-go

# 验证安装
go version

IDE推荐:VS Code + Go插件 或 GoLand(免费试用)。

二、项目结构

复制代码
myapp/
├── main.go           # 程序入口
├── go.mod            # 依赖管理
└── go.sum            # 依赖锁定

提示 :实际项目可进一步拆分 handler、service、model 等包,并参考 golang-standards/project-layout 组织代码(如 cmd/internal/pkg/)。本文为保持简洁,所有代码暂放在 main.go 中。

三、HTTP服务开发

Go 复制代码
package main

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

type Response struct {
    Message string `json:"message"`
}

func main() {
    http.HandleFunc("/api/hello", func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json")
        json.NewEncoder(w).Encode(Response{Message: "Hello, Go!"})
    })
    
    http.ListenAndServe(":8080", nil)
}

运行后访问 http://localhost:8080/api/hello 即可看到响应。

四、路由与中间件

推荐使用 Gin 框架:

安装 Gin:

bash 复制代码
go get github.com/gin-gonic/gin
Go 复制代码
package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    
    // 路由组
    api := r.Group("/api")
    {
        api.GET("/hello", func(c *gin.Context) {
            c.JSON(200, gin.H{"message": "Hello!"})
        })
    }
    
    r.Run(":8080")
}

五、数据库连接

Go 复制代码
package main

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname")
    if err != nil {
        panic(err)
    }
    defer db.Close()
    
    // 执行查询
    rows, _ := db.Query("SELECT id, name FROM users")
    defer rows.Close()
}

提示 :生产环境建议使用 sqlx 或 ORM(如 GORM),并将数据库配置存入环境变量。

六、并发处理

Go的并发是其核心优势:

Go 复制代码
package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            fmt.Printf("Task %d done\n", id)
        }(i)
    }
    
    wg.Wait()
}

补充:使用 Channel 进行通信

Go 复制代码
ch := make(chan int)
go func() { ch <- 42 }()
value := <-ch
fmt.Println(value)

七、快速启动命令

Go 复制代码
# 初始化模块
go mod init myapp

# 添加依赖
go get github.com/gin-gonic/gin

# 运行(开发阶段)
go run cmd/main.go

# 编译(当前平台)
go build -o myapp ./cmd

# 交叉编译(Linux 64位)
GOOS=linux GOARCH=amd64 go build -o myapp-linux ./cmd

总结

Go 后端开发的核心优势:

  • 语法简洁:易于学习,代码可读性高

  • 原生并发:goroutine + channel 模型高效安全

  • 静态编译:单一二进制文件,部署零依赖

  • 丰富生态:标准库强大,Gin/Echo/Fiber 等框架成熟

  • 内置测试go test + 基准测试支持

进阶建议

  • 使用 context 包处理超时和取消操作

  • 编写单元测试和基准测试

  • 采用 uber-go/fxwire 进行依赖注入

  • 学习 pprof 进行性能调优

掌握以上基础,你就可以开始构建自己的 Go 后端服务了。祝你编码愉快!

相关推荐
用户34232323763179 小时前
边缘计算与云边协同——当采集不再只是“上传“
后端
壹方秘境9 小时前
ApiCatcher支持抓包HTTP传输大文件的实现原理分享
前端·后端·客户端
神奇小汤圆9 小时前
2026最新·最全·最实用|Java岗面试真题(已收录GitHub)
后端
神奇小汤圆9 小时前
面试官当场让我手写Java线程安全工具类,我写完直接拿到了35K offer
后端
久美子10 小时前
Qoder 使用指南:从配置到落地
后端
tyung10 小时前
Go 手写 Wait-Free MPSC 无界队列:SwapPointer 实现多生产者无锁入队
后端·go
张不才10 小时前
CPU 100% 了怎么办?Java 性能排障的标准化操作
java·后端
鱼人10 小时前
Redis、网关负载均衡为什么不能用普通取模哈希?
后端
juejin99811 小时前
Claude Code Lab-3(下):三能力 MCP Server
后端
java小白小12 小时前
SpringBoot(07):事务管理——@Transactional 你真的用对了吗?
后端