Saki's 研究记录

Golang 1.18 工作区模式(workspace mode)
环境 OS: Darwin Kernel Version 21.4.0GO: go version go1.18 darwin/arm64 背景Go1.18 最 “实用“ 的功能,应该是 Go 工作区模式,它使得开发者在多个模块中的开发工作变得更加简单。 使用在同一个目录下创建两个空的 go 包 demo 和 util。 1mkdir -p workspace_mode_example/{demo,util} 然后分别使用 go mod init 来初始化。 1234cd workspace_mode_example/demogo mod init workspa...
Golang 1.18 报错:linkname must refer to declared function or variable
问题最近在mac上升级golang到1.18版本,新建gin服务执行go run时报错: 123456789101112# golang.org/x/sys/unix../../../../go/pkg/mod/golang.org/x/sys@v0.0.0-20200116001909-b77594299b42/unix/syscall_darwin.1_13.go:25:3: //go:linkname must refer to declared function or variable../../../../go/pkg/mod/golang.org/x/sys@v0.0.0-2...
golang embed 使用
简介特性//go:embed,它的作用就是可以在Go语言应用程序中包含任何文件、目录的内容,也就是说我们可以把文件以及目录中的内容都打包到生成的Go语言应用程序中了,部署的时候,直接扔一个二进制文件就可以了,不用再包含一些静态文件了,因为它们已经被打包到生成的应用程序中了。 样例目录结构创建目录: 1mkdir -p embed_example/{static,templates} 目录结构: 123456789101112cd embed_example; tree.├── go.mod├── go.sum├── hello.txt├── main.go├── st...
golang parse df -h output hard way
背景最近有个场景,需要解析远程调用命令df -h,输出的格式类似CentOS下的输出: 123456789# df -hFilesystem Size Used Avail Use% Mounted on/dev/vda1 99G 5.5G 89G 6% /devtmpfs 3.8G 0 3.8G 0% /devtmpfs 3.8G 24K 3.8G 1% /dev/shmtmpfs 3.8G 274M 3.6G 8% /runtmpfs 3.8G...
golang: alpine image 编译 sqlite3
背景最近在看一个Golang的开源项目,项目中使用到了GORM但只支持了MySQL和PostgreSQL,为了练手尝试添加对SQlite的支持。 1234import ( "gorm.io/driver/sqlite" "gorm.io/gorm") 编写完代码后在本地go run运行很正常,但当使用alpine构建docker镜像时遇到了问题… 问题编译会卡在sqlite3,报错信息为: 1212 73.08 # github.com/mattn/go-sqlite312 73.08 cgo: C compiler "gcc"...
go get fails with permission denied on certain go packages
Permission denied下载第三方库的时候,编译时会提示Permission denied权限不足,出现这种错误因为权限不够。有一种最快的办法就是把你的go目录权限放开: 1sudo chmod -R 777 -R go Reference`go get` fails with permission denied on certain go packages Done.
Golang 交叉编译报错 XX is invalid in C99
环境 macOS: 11.6.1 (Big Sur)gcc version: apple clang version 13.0.0 (clang-1300.0.29.3)Ubuntu: 16.04.6 LTSCentOS: Linux release 8.4.2105 (Core) 背景最近在使用redis-full-check来对比两个redis的数据是否一致,在macos上进行开发,编译后再上传到ubuntu系统的服务器上运行。 问题这就导致我需要使用到golang的交叉编译,golang默认支持交叉编译,只在编译时配置对应平台的编译参数即可: 123456# linuxCGO_E...
go mod: disallowed version string
问题通过go get拉取公司私有包的时候报错:invalid: disallowed version string,但master、develop分支则可以正常拉取。有问题的分支名为feature/xxxx,现象: 12go get -u gitlab.xxxx.com/xxxx@feature/xxxxgo get: gitlab.xxxx.com/xxxx@feature/xxxx: invalid version: version "feature/XXXX" invalid: disallowed version string 解决问题的关键在分支名称中的&...
golang调用etcdv3报错undefined
问题最近准备使用Etcd开发一些分布式的应用,结果第一步就翻车了。当信心满满的使用go mod开始go mod tidy时etcdv3有报错: 123456# github.com/coreos/etcd/clientv3/balancer/pickerundefined: balancer.PickOptionsundefined: balancer.PickOptions# github.com/coreos/etcd/clientv3/balancer/resolver/endpointundefined: resolver.BuildOptionundefined: resolv...
go generate报错io/fs: package io/fs is not in GOROOT
现象执行 go generate 出错: 12github.com/flipped-aurora/gin-vue-admin/server/utils/plugin importsio/fs: package io/fs is not in GOROOT (/usr/local/Cellar/go/1.15.3/libexec/src/io/fs) 原因golang 版本太旧,需要升级 解决办法升级 golang 版本, 可参考yum 安装/更新 golang