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

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
git clone 复制一个整个仓库并推送到新地址

git clone 复制一个整个仓库并推送到新地址

要使用 git clone --bare 复制一个新的仓库并推送到远程仓库,可以按照以下步骤操作: 1. 克隆一个裸仓库 首先,使用 git clone --bare 命令克隆源仓库。假设源仓库的 URL 是 https://github.com/user/source-repo.git,你可以执行以下命令: bash复制 git clone --bare https://github.com/user/source-repo.git 这将创建一个新的裸仓库(没有工作区),通常会创建一个名为 source-repo.git 的目录。 2. 进入裸仓库目录 进入刚刚克隆的裸仓库目录: bash复制 cd source-repo.git 3. 添加新的远程仓库 接下来,

By brian
搜索引擎技巧不用多,学会 3 个加速 100% 找到目标

搜索引擎技巧不用多,学会 3 个加速 100% 找到目标

在搜索时使用英文关键词,提高结果质量。尽量使用 google.com 以下搜索引擎技巧在 google.com 进行测试,效果都很好,前三个非常常用且强烈推荐。 使用精确搜索 * 建议: 使用双引号 "" 搜索完全匹配的短语,避免无关结果。 * 示例: * "Java NullPointerException" fix * 场景: 找到错误信息的精确解决方案。 利用站内搜索 * 建议: 使用 site: 限制搜索范围到特定网站。 * 示例: * site:stackoverflow.com "TypeError: undefined is not a function" * 场景: 搜索 Stack Overflow、官方文档或技术博客的特定内容。 一些关键词 * 建议:

By brian
沪ICP备2022013452号-1