Go工程化:配置及包管理

项目配置

静态配置

  • 不允许在线变更的配置
  • 主要是一些中间件的连接信息,如MySQL,Redis,GRPC
  • 变更配置通常会走一次完整的发版流程

动态配置

  • 需要根据据特定的场景和时机调整的配置
  • 配置平台
  • 结合etcd等中间件来实现

环境变量

  • 全平台统一,或具有强制性
  • 在容器启动时直接写道容器的环境变量

常量配置

  • 长时间都不会变更
  • 直接定义到常量中
  • 避免维护过多的配置项

配置设计的一些经验技巧

  • 中间件的配置可以提供统一的封装库和配置模板来统一和约束
  • 配置值的范围需要进行合理性校验,确保在枚举范围内
  • 配置项的命名尽可能语义化,并尽可能体现配置使用的单位

语义化命名的配置

  • timeout vs http_request_timeout

  • http_request_timeout vs http_request_timeout_seconds

  • 配置项的变更也需要review

  • 不使用的配置及时从代码中移除

  • 记录配置的操作和变更历史,提供可回滚能力

  • 敏感配置是不允许直接硬编码到代码中的

  • 敏感配置禁止一切形式的输出和打印

  • 严格控制配置的访问权限

配置的读取工具

  • https://github.com/spf13/viper

包管理方式

GOPATH

src、bin、pkg 目录
使用go get 命令获取到的库,放置在src目录,bin目录放置编译好的文件,pkg目录放置预编译的文件,版本控制困难

vendor

Go1.5+引入vendor管理方式,依赖于GOPATH,从GOPATH中获取依赖到自己项目的vendor目录

Go Module

像java的maven,支持代理和私有仓库。无需将项目代码放入GOPATH的src。
Go Module使用:1.设置Go env,2.使用go mod初始化工程,3.编写工程代码同步依赖

  • export GO111MODULE=on
  • export GOPROXY=https://goproxy.cn/
  • export GOPRIVATE=*gitee.com

导入本地的依赖包

  • 新建一个gomod-demo1的包
  • 在gomod-demo工程中使用gomod-demo1
  • replace imooc.com.demo1 => …/gomod-demo1

go.mod中每个关键字的具体含义

  • module:定义当前项目的模块路径
  • go:标识当前模块的Go语言版本
  • requiere:说明Module需要什么版本的依赖
  • replace:导入源码,在import时会被后者代替
  • exclude:排除指定依赖包

如何管理内部私有包

  • 用于沉淀一些公共包给企业的不同项目使用
  • 避免重复造轮子,统一使用规范
  • 配置GOPRIVATE=*私有仓库域名,不走go proxy

Go module的包校验

  • 为了防止Go module中的包被篡改
  • go.sum文件保存了依赖包的hash值
  • GOPRIVATE包将不会做checksum校验

go mod vendor 生成vendor目录,做离线编译

Reference
慕课网:面向海量数据场景构建Go+ES8企业级搜索微服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

metabit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值