k8s使用NFS存储卷

缘由:

go-zero gateway主要内容开发接近完成了,有一个问题一直没有解决,马上要部署了,是时候解决了。

因为主要是RESTful <–> gRPC,go-zero通过解析pb文件访问后端gRPC服务,pb文件则是通过proto文件生成,proto文件是定义接口的,接口变化会导致pb文件的变化和更新,但是通常gateway模块的功能开发相对稳定和单一,完成后很少会有修改。不希望因为pb文件的变化而导致gateway重新构建、版本发布,pb文件则是更像配置文件存在。

[阅读全文]
golang  go-zero  gateway  k8s  nfs  pv  pvc 

Golang私有仓库依赖解决方案

缘由:

以往Java日常开发中,模块依赖问题有成熟解决方案:

  1. 开发阶段,被依赖模块做为单独项目开发完成,导出jar包就可以被其他项目依赖;或者上传到Sonatype Nexus Repository共享,其他人/项目通过Maven解决依赖问题。
  2. 运行阶段,因为Java编译成中间代码,被依赖的包放在classpath中在需要时被加载运行。

与Golang开发的主要区别是Golang直接编译成二进制文件,而且是一个独立完整的可运行文件,其中包含了完整的依赖。 在开发阶段,Golang的依赖通常都是通过类似github之类仓库解决,这种方式有一个问题:企业开发过程中,可能会有一些被依赖的模块并不一定希望仓库是公开的,更适合的做法是保存在企业内部的Git服务器上;但是在开发阶段的依赖关系,在importgo mod中写企业内部仓库地址显然行不通。

[阅读全文]
golang  go mod  git 

go-zero

安装

参考官方文档

安装golang

配置GO111MODULE和GOPROXY

1
2
3
4
5
6
7
# 设置
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

# 验证
go env GO111MODULE
go env GOPROXY

安装go-ctl

goctl是go-zero的内置脚手架,提升开发效率的利器,可以一键生成代码、文档、部署k8s yaml、dockerfile等。

[阅读全文]

关于golang的workspaces的理解

最近重新捡起架构和开发工作,了解了一下golang的“新”特性:workspaces。其实也不算新,只是在上一次做架构和技术选型的时候,golang的最新版本还是1.16.*,而workspaces是Go1.18发布的。

[阅读全文]

golang私有仓库

https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more

https://golang.org/ref/mod#private-modules

https://golang.org/ref/mod#vcs-find

https://golang.org/doc/tutorial/create-module

https://sagikazarmark.hu/blog/vanity-import-paths-in-go/

https://medium.com/@dayakar88/a-guide-to-solve-no-go-import-meta-tags-for-private-repositories-with-go-modules-6b9237f9c9f

为了gitlab-ci在构建时拉取私有仓库依赖,构建工作使用的docker容器的dockerfile需要加上:

1
2
3
4
RUN git config --global url."git@192.168.1.10:".insteadOf "https://192.168.1.10/"
COPY gitlab-ci /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
RUN echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config

其中的id_rsa为部署密钥,需要在私有仓库中添加部署密钥 上述参考 https://cloud.tencent.com/developer/article/1602151 https://stackoverflow.com/questions/27500861/whats-the-proper-way-to-go-get-a-private-repository

[阅读全文]

golang plugin从入门到放弃

最开始看到go plugin很兴奋,太实用了。正好手上项目也能用得上,所以花了几天心思去研究一下,所以就有了这篇文章的心德:go plugin从入门到放弃

[阅读全文]

golang learning 2

数据类型

int/uint类型位数不是固定的,根据运行平台可能是32位或64位 获取Int类型位数:strconv.IntSize

Go不允许隐式类型转换,只能强制转换 强制转换:int32(a)

[阅读全文]

golang开发windows应用添加图标

开源工具源码地址:github.com/akavel/rsrc

  • 下载rsrc工具
  • 创建一个manifest文件
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="Amd64" name="controls" type="win32"></assemblyIdentity>
<dependency>
    <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="Amd64" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
</dependency>
</assembly>
  • windows下生成syso文件
1
rsrc_windows_amd64.exe -manifest manifest -ico inventory.ico -arch amd64 -o inventory.syso
  • 构建
1
GOOS=windows CGO_ENABLED=1 GOARCH=amd64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ go build -ldflags '-w -s' .

注意,网上找到的资料都会报以下的错:

[阅读全文]

go 1.13开发环境搭建

进入项目目录:go mod init

设置环境变量:GOPROXY=“https://goproxy.io,direct”

运行go get的时候,发现报410 gone的错误,目前网上查到的资料都是扯淡,查官方文档,在1.13版本加了版本验证,官方说如果因为防火墙或代理问题验证不了,可以添加环境变量:GOSUMDB=off关闭验证。记得:命令行窗口需要退出重新打开才能生效!!!

[阅读全文]