HOW - Go 开发入门(一)

文章目录

Go 上手快、生态成熟,而且特别适合有前端/工程经验的人,能很快做出"能跑的应用"。从今天开始,我们来一步步学习 Go 并进行实践。

一、建立正确认知

Go 是什么 & 不是什么?

Go 的核心特点:

  • 简单(语法比 TS / Java / Rust 都少)
  • 原生并发(goroutine + channel)
  • 编译快、部署简单(一个二进制)
  • 非常适合:后端 API / 工具 / 微服务 / CLI

二、最佳学习路径

按"快速开发应用"的目标设计:

第 1 步:搞定基础语法

只需要掌握这些:

  • 基本类型 / struct
  • 函数
  • map / slice
  • error 处理(Go 核心)
  • interface(理解即可)

推荐资料:

  • A Tour of Go(只做前半部分)

重点不是记语法,而是理解:

Go 的代码长这样:

go 复制代码
func main() {
    fmt.Println("hello world")
}

第 2 步:直接上 Web

别刷题,直接写 API。用:Gin 或 Kratos。

示例(一个接口):

go 复制代码
r := gin.Default()

r.GET("/hello", func(c *gin.Context) {
    c.JSON(200, gin.H{
        "message": "hello world",
    })
})

r.Run()

启动:

复制代码
go run main.go

浏览器访问:

复制代码
http://localhost:8080/hello

到这里,已经完成:

"从 0 到一个后端服务"

第 3 步:接数据库

用 ORM:比如 GORM。

go 复制代码
db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})

type User struct {
    ID   int
    Name string
}

db.Create(&User{Name: "Tom"})

结合 Docker:

可以直接起 MySQL:

复制代码
docker run -d -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8

第 4 步:做一个完整小项目(关键)

做这个就够了:一个"用户管理系统 API"。

包含:

  • 登录(JWT)
  • 用户 CRUD
  • 分页
  • 简单权限

技术栈:

  • Gin(Web)
  • GORM(DB)
  • JWT(认证)

第 5 步:加一个 CLI 工具

Go 非常适合写工具!推荐用 Cobra。

比如做:

  • 一个 SQL 生成器(结合你现在做的编辑器)
  • 一个 API mock 工具
  • 一个日志分析工具

第 6 步:理解 Go 的"灵魂"

必须掌握:

goroutine(轻量线程)

go 复制代码
go func() {
    fmt.Println("run async")
}()

channel(通信)

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

这是 Go 和 Node 最大差异点。

第 7 步:工程化

学习:

  • 项目结构(cmd / internal / pkg)
  • 配置管理(viper)
  • 日志(zap)
  • 热更新(air)

三、常见坑

不要一开始

  • 学太多语法
  • 研究并发细节
  • 纠结最佳实践

要做

  • 直接写 API
  • 一边写一边查
  • 先跑起来再优化

四、进阶路线

可以再加:

  • Docker + 部署
  • gRPC(微服务)
相关推荐
bkspiderx8 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
代码什么用8 小时前
Spring基础使用
java·后端·spring
程序员老陆8 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光8 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
明月_清风8 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
码云数智-园园8 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
蜗牛互联网9 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
禾小西9 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨9 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
徐小黑ACG10 小时前
Golang 基础05 结构体struct
开发语言·算法·golang