知识点
1. 标准库路由 http.ServeMux 的用法
解析采用的是 长度优先匹配 规则
2. 路由包 gorilla/mux 的使用
解析采用的是 精准匹配 规则
//基本用法
router := mux.NewRouter()
//路径+路径参数+请求方式+别名
router.HandleFunc("/articles/{id:[0-9]+}",articlesShowHandler).Methods("GET").Name("articles.show")
// 自定义 404 页面
router.NotFoundHandler = http.HandlerFunc(notFoundHandler)
3. go mod
3.1 历史
Go 1.11之前 Go 源码必须放置于 $GOPATH/src 下
Go 1.11 推出的模块(Modules)
Go 版本 1.14 开始,官方鼓励所有用户迁移到 Go Modules 以进行依赖项管理
3.2 命令
命令 作用 go mod init 生成 go.mod 文件 go mod download 下载 go.mod 文件中指明的所有依赖 go mod tidy 整理现有的依赖,把未使用的 module 移除掉 go mod graph 查看现有的依赖结构 go mod edit 编辑 go.mod 文件 go mod vendor 导出项目所有的依赖到 vendor 目录 go mod verify 校验一个模块是否被篡改过 go mod why 查看为什么需要依赖某模块 go clean -modcache 清空 Go Modules 缓存
4. go env
go env
查看环境配置
4.1 GOPROXY
go env -w GOPROXY=https://goproxy.cn
设置GOPROXY,并写入env文件
可选源
- 阿里云
https://mirrors.aliyun.com/goproxy/
- nexus社区提供的
https://gonexus.dev
- goproxy.io的
https://goproxy.io/
- 官方提供的(jfrog,golang)
https://gocenter.io
https://proxy.golang.org
- 七牛云赞助支持的
https://goproxy.cn
direct 标志
例:https://goproxy.cn,direct
则告诉 go get 在获取源码包时先尝试 https://goproxy.cn,如果遇到 404 等错误时,再尝试从源地址抓取
4.2 GO111MODULE
auto
:项目包含了 go.mod 文件的话启用 Go modules,目前在 Go1.11 至 Go1.15 中仍然是默认值
on
:启用 Go modules,推荐设置,将会是未来版本中的默认值
off
:禁用 Go modules,不推荐设置
疑问
- 重构的目的性
//由
http.HandleFunc("/", defaultHandler)
http.HandleFunc("/about", aboutHandler)
http.ListenAndServe(":3000", nil)
//改成
router := http.NewServeMux()
router.HandleFunc("/", defaultHandler)
router.HandleFunc("/about", aboutHandler)
http.ListenAndServe(":3000", router)
- NewServeMux 源码
- 贵在坚持,自我驱动,go 小白在成长