golang 使用反射绑定 cobra flag 参数

golang 使用反射绑定 cobra flag 参数 cobra https://github.com/spf13/cobra 是 golang 中一个非常好用的 命令 开发库。 但是绑定 flag 参数的时候略微有点繁琐, 不但有多少个参数就需要写多少行绑定代码, 而且参数定义和描述也是分开的, 非常的不直观。 1 2 3 4 5 6 func init() { rootCmd.Flags().StringVarP(&stu.Name, "name", "", "zhangsanfeng", "student name") rootCmd.Flags().Int64VarP(&stu.Age, "age", "a", 18, "student age") // ... } 想着吧, 反正都要了解 golang reflect 反射, 不如就用 反射 实现一个绑定支……

阅读全文

gitlab shell runner

快速创建 gitlab shell runner 真没想道有一天, 我居然会创建 gitlab shell runner 。 环境太难管理了 创建 gitlab shell runner 实话实说, gitlab 现在的用户体验太好了。 根本不需要到处去搜文档,直接在 runner 管理界面就可以找到, 还贴心的给你准备了全套, 一键复制粘贴搞定。 https://git.example.com/admin/runners 点击 Show Runner installation instructions 可以看到多种 runner 的配置。 在默认的基础上, 根据实际情况优化一下。 1 2……

阅读全文

go-jarvis 容器化 go 应用开发配置管理利器

go-jarvis/jarivs 为了方便 golang 容器化开发的时候管理配置。 核心功能 根据 config 结构体生成 yaml 配置文件 程序启动时, 从 yaml 配置文件和 环境变量 中对 config 赋值 执行逻辑 根据配置 config{} 生成对应的 default.yml 配置文件。 读取依次配置文件 default.yml, config.yml + 分支配置文件.yml + 环境变量 根据 GitlabCI, 分支配置文件 config.xxxx.yml 如没有 CI, 读取本地文件: local.yml 使用需求 config 对象中的结构体中,……

阅读全文

gitlab-runner-build not found in path

"gitlab-runner-build": executable file not found in $PATH 在搭建 gitlab-runner 的过程中,报错如下 1 ERROR: Job failed (system failure): prepare environment: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "gitlab-runner-build": executable file not found in $PATH: unknown (exec.go:57:0s). Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information 因为在 environment 中 扩展了 PATH 而导致 gitlab-runner-helper 中的 PATH 出现了异常。 从而导致 gitlab-runner-build 这个脚本(命令) 无法被找到。 原因分析 在 gitlab 的定义中 environment 的行为有两种 , append(扩展) 或 overwrite(覆盖)。……

阅读全文

docker runner 配置编译环境的大文件依赖

docker runner 配置编译环境的大文件依赖 需求简介: 现在要做某个 arm 平台的的交叉编译环境, 交叉编译依赖和工具包大小 5G 左右, 特别大。 如果按照以往的方式, 直接将 编译依赖和工具 直接打包到编译镜像中, 会有很多麻烦。 单 layer 过大 docker 单层 layer 限制为 5G。 镜像升级迭代 浪费空间 。 如果镜像上层升级或者依赖变化, 整个 layer 不能……

阅读全文

golang 括号用法总结

golang 括号用法总结 1 2 3 4 5 6 7 8 var ( f unsafe.Pointer a io.ReadCloser = (*os.File)(f) // 只要是一个指针就可以 b io.Reader = a // a的方法集大于等于b,就可以做隐式的转换! c io.Closer = a // 同样 d io.Reader = c.(io.Reader) // 显式转换,c这个接口很明显方法集和io.Reader不同 // 但是万一传入c的对象拥有io.Reader接口呢?比如 ) 提问, 以上这些括号都是……

阅读全文

GET 请求也能传递 JSON Body

GET 请求也能传递 Body 数据 通常而言, GET 请求很少传递 Body 数据, 大多情况下都是放在 url 中, 例如 1 http://example.com/api?key1=value1&key2=value2 但是这样做, 可能由于 传递数据过多 导致 URL 过程而被拦截。 运营商会缓存 URL 地址以达到加速的效果, 而有些参数又不想被缓存。 等等 虽然, 可以使用 POST 请求代替 GET 请求, 在 Body 中传递数据, 但是这样做可能会破坏 RESTful 风格的 API 格……

阅读全文

如果 golang map 值不能修改怎么办?

值对象与指针对象 假设有一个 map 对象 map[string]Person , 其中 Person 定义如下。 是一个 struct 1 2 3 type Person struct { Age int } 现在有一个需求, map 中的 Person 对象年龄为 0 , 则将其默认值设置为 18。 很显然, 由于 map[string]Person 中保存的是 值对象 ,因此通过任意方式获取的都是 值对象的副本 , 所有修改都是在副本上, 不能 修改真实值。 如果是 map[string]*Person 就很方便了。 *Person 是 指针……

阅读全文

axios get 请求携带 body 数据

axios get 请求携带 json body 数据 在 http 标准协议中, GET 请求 本身是可以携带 Body 数据 。 至于 GET 请求携带的数据能不能被获取, 还是要看接受端 后端 是否处理。 在 gin-gonic/gin 框架中, GET 请求默认就不会处理 body 中的数据, 只能通过 query 表单数据传递。 然而不同的浏览器对于 URL 长度的限制也不同,一般是 1024 个字符, 1. 有些时候需要携带的数据可能超……

阅读全文

一篇文章告诉你 golang 环境变量的所有基础操作

一篇文章告诉你 golang 环境变量的所有基础操作 原文链接: https://tangx.in/posts/2021/09/06/golang-os-env-operation/ golang 中的环境变量操作都在 os 包下面, 只有很少的几个方法, 而且字面意思也很明确。 所有环境变量操作对象都是 字符串string , 因此对于 int, bool 类型需要自己实现转换。 golang 程序执行的时候, 是在 linux 系统中 fork 的一种子进程中 golang程序 在 复制了开……

阅读全文

福利派送

  • (免费星球)「运维成长路线」

  • 又拍云免费 CDN

最近文章

分类

标签

其它