golang 定义嵌套结构类型
现在需要用 go 对接一个接口,接口的响应数据如下:
1 | { |
我们可能会写如下代码:
1 | type Resp struct { |
可读性太差了,不能一眼看出来我们要解析的数据结构是怎样的,如果再稍微复杂一点的结构我们要一行一行的定义很多 type,而且很多时候我们只是需要读到响应的内容,不需要给这些嵌套的结构定义方法来操作它们。
好在 golang 是支持这样写的:
现在需要用 go 对接一个接口,接口的响应数据如下:
1 | { |
我们可能会写如下代码:
1 | type Resp struct { |
可读性太差了,不能一眼看出来我们要解析的数据结构是怎样的,如果再稍微复杂一点的结构我们要一行一行的定义很多 type,而且很多时候我们只是需要读到响应的内容,不需要给这些嵌套的结构定义方法来操作它们。
好在 golang 是支持这样写的:
因为并没有用到 Unifi 中提供的 ddns 服务商:
而且 he 又提供一个非常方便的更新 ddns 记录的方法,所以这里尝试一个能及时更新 ddns 但又不至于请求接口太频繁的方法。
首先编辑一个更新 dns 的脚本,脚本的具体逻辑是读取拨号接口的 IP 并缓存,当 IP 发生变化时上报新的记录,这样不至于触发 he 的滥用限制,但是有可以通过定时任务将 ddns 延迟控制到1分钟以内:
1 | #!/bin/bash |
添加可执行权限后将其上传到 usg 的 /config/scripts/ddns.sh
备用。
接上文有一个配置文件的发布问题待解决,于是考虑用轻量的 etcd 管理,并在发布的时候拉取配置,实践如下:
docker-compose.yml
1 | etcd: |
最近在尝试用 Drone 替换动辄占用上 G 内存的 jenkins,决定把初步成果分享出来,本文会提供搭配 Gitea 的一个前端和一个 golang 项目的配置样例。
安装非常简单,按照官方给的样例写好 docker-compose.yml
启动即可:
1 | services: |
其中 .env
的文件内容为:
1 | DRONE_HOST=ci.yourdomain.com # drone 访问域名 |
有时候多个容器不是在一个 compose 中启动的,不方便 link 起来或者是有些服务是直接跑在主机上的,所以从容器访问主机的场景十分普遍,我们需要一个类似 127.0.0.1
的 IP 地址能在容器中访问到主机。在 linux 环境中这个问题很好解决,安装完 docker 之后会出现一个 docker0 的网卡,这个网卡上绑定的 IP 就可以在容器中访问,并指向主机,默认情况下会是 172.17.0.1
但是 mac 和 windows 开发环境下不会出现这个网卡也没有这样一个 IP 来访问,不过最新的 docker 18.03 加入了一个 feature,在容器中可以通过 host.docker.internal
hostname 来访问主机,解析得到的 ip 是 192.168.65.2
正是 docker 的设置中的子网网段
详情参考官方文档:
https://docs.docker.com/docker-for-mac/networking/#there-is-no-docker0-bridge-on-macos