Go 远程调试

哪些场景可以用到远程调试?

  • Apple M1 M2 M3 不支持go 1.14 之前的版本
  • Golang 部分依赖不支持 window

这两个场景推荐使用 Docker。

Debugging a Go application inside a Docker container | The GoLand Blog
Updated and validated on November 17, 2022. You can find more tutorials on how to use containers here. You may also refer to the Docker and Kubernetes sections of our Help documentation. Go develop

以下是一个 Dockerfile 示例:


# 使用 1.14.15 镜像
FROM golang:1.14.15 as builder

# 下载 delve-1.6.1 源码到 当前项目,记得加到项目的 .gitignore
ADD delve-1.6.1 /go/delve
WORKDIR /go/delve/delve-1.6.1
# 开启代理编译安装 dlv
RUN https_proxy=http://192.168.31.2:1087 http_proxy=http://192.168.31.2:1087 \
 go install github.com/go-delve/delve/cmd/dlv

# 拷贝代码
COPY . /build
WORKDIR /build/web
# 开始编译
RUN https_proxy=http://192.168.31.2:1087 http_proxy=http://192.168.31.2:1087 \
	GO111MODULE=on GOPROXY="https://goproxy.cn,direct" \
	GOPRIVATE="codeup.aliyun.com" \
  go build -o bin/web \
    # 必须加上下面一行编译参数
		-gcflags "all=-N -l" \
    -tags=jsoniter,prototype main.go


FROM debian:buster

EXPOSE 8080 40001

WORKDIR /
COPY --from=builder /build/web /web
RUN ls /
COPY --from=builder /go/bin/dlv /web/
RUN ls /web
COPY --from=builder /build/web/bin/web /web/bin/web

WORKDIR /web

#ENTRYPOINT [ "/bookadv-cmd" ]
CMD ["/web/dlv", \
"--listen=:40001", "--headless=true", "--api-version=2", "--accept-multiclient", \
## 需要注意,如果使用项目自身的参数,需要加上 "--",否则会认为是 dlv 的参数进而发生错误。
"exec", "/web/bin/web", "--", "--server_address=:8080", "http"]

Read more

CLI 工具多版本管理器 - asdf

CLI 工具多版本管理器 - asdf

asdf 是一个 CLI 工具,可以根据每个项目管理多个工具或语言运行时版本。它就像 gvm、nvm、rbenv 和 pyenv(以及更多)的合一工具!只需安装您语言的插件即可! 这个随手起的名字,可能是目前地表最强版本管理器。 https://github.com/asdf-vm/asdf 一、安装 asdf 以 macbook 为示例 brew install asdf asdf -v asdf version 0.16.2 0.16.0 以上命令有较大变更,详见:https://asdf-vm.com/guide/upgrading-to-v0-16.html#breaking-changes 本文使用

By brian
golang proto api 校验国际化 protovalidate

golang proto api 校验国际化 protovalidate

众所周知,protobuf 原型文件扩展很多功能,比如生成 http 接口层代码,顺势就有了生成接口参数校验代码的需求。 早期可以使用https://github.com/bufbuild/protoc-gen-validate 来实现,通过生成特定的 go 代码的方式来实现校验。 github 中也提到目前趋于稳定,不会有更多新特性的支持,推荐大家使用新的版本 protovalidate,https://github.com/bufbuild/protovalidate 。该版本是protoc-gen-validate 的“精神继承者”。它不需要任何代码生成并支持自定义约束。 现在我们尝试新版本,并且增加国际化支持。 go get github.com/bufbuild/protovalidate-go import "github.com/bufbuild/protovalidate-go" syntax = "proto3"; package

By brian
沪ICP备2022013452号-1