go
go语言相关
源文雨
千载何方归梦,棹舟星河波开。
展开
-
Go语言base64流式编码在收尾时的一个小坑
利用io.Copy将任意io.Reader编码为base64字符串,这种写法在处理网络通信等流式数据时十分简洁高效,但也存在一些小坑。原创 2024-03-26 21:26:09 · 491 阅读 · 0 评论 -
Go语言 cgo openwrt sdk 交叉编译报错 collect2: fatal error: cannot find ‘ld‘的解决办法
使用openwrt sdk交叉编译arm时报错如下CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=6 CC=arm-openwrt-linux-gcc CXX=arm-openwrt-linux-g++ AR=arm-openwrt-linux-ar go build -ldflags="-s -w" -o artifacts/zbpd-openwrt-linux-arm1176jzf-s+vfp....../usr/local/go/pkg/tool/linux_原创 2021-10-15 13:39:45 · 2051 阅读 · 2 评论 -
Go语言 利用interface{}传递函数指针 实现函数的强制类型转换
背景介绍Golang的函数名不能使用&取指针,因而无法直接使用unsafe.Pointer,从而无法对函数做强制类型转换,或使用任意签名的函数作为参数。问题分析但是我们知道,fmt.Print系列的函数是可以以任意函数作为入参,打印其指针的。因此我们从分析其源码作为突破口的话,或许就可以找到解决之道了。在分析源码之后,我们发现,因为Golang的任意类型变量都可以认为是实现了interface{}接口,因此通过将函数名转为接口,我们就可以得到一个能够取地址的变量。这个变量不可能仅仅是一个函原创 2021-10-14 22:46:04 · 2779 阅读 · 0 评论 -
使用Go语言 在windows下 实现隐藏进程命令行参数 保护密码等数据
C语言在unix下可以通过直接覆写argv的方式隐藏参数,但是在windows下由于win32 api的限制,获取到的参数是一串连续的字符串,在C语言的main函数调用之前已经由C标准库实现了分割,导致直接修改argv并不能实现隐藏参数的目的。但是,我们可以利用golang封装的syscall.GetCommandLine()直接拿到该处内存的切片,从而可以方便地进行修改。当然,C语言通过系统调用同样也可以实现这点。 感谢@wdvxdr1123对本方法在可行性方面提出的建议直接使用如.原创 2021-09-19 23:28:04 · 1552 阅读 · 0 评论 -
Golang gccgo编译报错 undefined reference to `reflect.unsafe_New‘的解决办法
根据github.com/modern-go/reflect2/issues/21所述,这是由于gccgo 11出于某些原因将reflect.unsafe_New重命名为reflect.unsafe__New所致,因此只需要更改$GOHOME/pkg/mod/github.com/modern-go/reflect2@vx.x.x-xxxx/unsafe_link.go如下package reflect2import "unsafe"//go:linkname unsafe_New refl...原创 2021-08-11 12:06:58 · 1303 阅读 · 0 评论 -
Ubuntu 免build 安装gccgo 以编译Golang 1.16.3程序
由Setting up and using gccgo可知The GCC 11 releases include a complete implementation of the Go 1.16.3 release.也就是说gccgo-11是可以编译go 1.16.3的程序的,对目前来说已经足够,不会出现方法未定义等问题。当然,编译安装也是可行的,但是在时间和存储空间上都不太合算,因此可以参考下面的方法,通过添加软件源进行直接安装。安装Go1.16.3理论上安装1.16.3+版...原创 2021-08-11 11:36:34 · 2288 阅读 · 1 评论 -
Go语言 unix下 实现隐藏进程命令行参数 保护密码等数据
C语言可以通过直接覆写argv的方式隐藏参数,但是Golang的os.Args为string类型,无法直接覆盖,因此可以考虑使用unsafe.Pointer配合uintptr实现覆盖string的目的。原创 2021-08-08 12:44:12 · 1034 阅读 · 1 评论