突然又对 Go 感兴趣,GOPATH entry cannot start with shell metacharacter 错误

打发无聊时间,水文一篇~

事情是这样的,因为我们上架的渠道包基本是定制化混淆出包,

混淆出包有一个关键点就是指定映射文件,映射文件的内容有一部分是使用外部工具在打包前按照一定规律随机生成包名、类名,

这里使用的外部工具可以是 golang 编写的 exe 程序,映射文件内容类似 Android mapping.txt。

举个例子:

渠道包提审自动化检测通常是不允许包体存在第三方插件或危险代码。

1、广告插件,上架荣耀商店是不允许包体存在其他平台的广告插件。

2、危险代码,上架国内某平台是不允许包体存在诸如 weishu、xposted 等带有危险特征的代码。

所以,定制化混淆出包、加固出包上架提审一定程度上可以躲避自动化检测。

那么我的问题是:测试反馈映射文件随机生成的字符(包名、类名)总是存在敏感字符,影响出包效率,影响提审。

如某平台机审核把 weishu 判定为敏感字符,若包体带有该字符去提审有可能被拒审打回,出包之后就要确保包体不存在危险敏感字符,

希望能够确保映射文件的映射值不存在敏感字符(因为之前反馈的敏感字符基本是因为类映射导致的),

因此我的任务是接受映射文件生成工具,优化随机生成的映射值,确保不存在敏感字符,

需求很简单,最终优化修改、新增的代码不多,工具是使用 Go 编写的,上一次接触这个语言还是在大学那会,对此学习和已掌握的知识不对,

"语言知识工具、技能",有了良好的编程思维,接触一门新语言还是相对轻松的,那就现学现卖完成了优化需求,

回到家猛一抬头心想:我是不是对 Go 又有了一点点兴趣?趁着现在的无聊时间,不如打开电脑重新拾起!

我对 Go 又有了兴趣~

安装 Go

学习新语言先看官方文档是个不错的切入点,但对英语有一定的门槛,不妨试试国人整理的资料。

Go 中文学习文档

1、下载 go sdk Go sdk all release

我下载的是 Mac ARM64

2、下载开发工具

我还是选择 vscode,golang 虽然很好用但是收费,破解版、激活这些活不想折腾,vscode 轻量好用

3、运行确认环境正确

其实整篇文章只想提这一点,其他都是在水文,运行第一个 go 程序报错了,在 vscode 上遇到一个小问题。

GOPATH 配置有问题?我可是傻瓜式直接安装下载的 go sdk,一路 next,这也能报错!

go: GOPATH entry cannot start with shell metacharacter '~'

go: GOPATH条目不能以shell元字符"~"开头

在终端执行 go env 也是这个错误,查一下环境变量 GOPATH 看看具体是啥,

自我感觉没啥不对劲,PATH 也不存在什么以 ~ 开头的字符,尝试下把 GOPATH 前面的 ${PATH} 去掉试试看,修改并保存之后使配置生效执行 source .bash_profile

关闭 vscode 重新打开没有再提示 GOPATH 错误,在终端运行 go env 也没有错误并输出正常的信息,看来这次尝试偶然解决了运行失败的问题(罗.jpg)。

写代码配阿里通义灵码也蛮不错,不懂就问~

那就这样吧,在无聊时光中不知道干什么好,刷短视频 ,就找点事情做,人总不能太闲吧~

安装 Go pkg

经过上述操作,在 vscode 中已经可以编写运行 golang 程序了,但是又发现了一个问题:怎么没有代码提示?

预期的正常代码提示是这样的,后知后觉才发现之前输入 fmt 没有提示 Println等函数,没有提示我怎么写代码,我很依赖代码提示、补全功能的。

vscode 很友好,其实当你创建第一个 go 文件时已经提示安装一些列的,那时我是直接点击安装的,但是最后提示安装这个我是没有特别关注,直到过了两天因一直困惑在没有代码提示功能中才开始关注这个报错。

详细看看日志:

问题(1):go install ******* timeout,install failed

后来了解到,go 有一个东西叫包管理,也就是 go install 安装的就是一系列的包,安装位置就是你配置的 GOPATH(在自己 mac 上首次安装查看环境变量是没有给我指定 GOPATH,我也不知道为啥;但是我在 window 上安装是不需要我手动配置)

安装超时,猜测估计是下载超时,因为我没有梯子。后台得知有一个环境变量 GOPROXY 可以配置代理,指定包下载来源。

在 mac 上配置几个环境变量 vim .bash_profilesource .bash_profile,然后重启 vscode、重新安装能够下载成功了!紧接着第二个问题又来了~

(2)问题:copy fail,no permission on /usr/local/go/bin,install fail

这个路径就是我当前的 GOROOT go 安装位置下的 bin 目录,查看 bin 目录权限是drwxr-xr-x,修改扩大权限看看,sudo chmod -R 777 bin(你也可以不使用 -R 参数先试试),然后权限变成了drwxrwxrwx,再重启 vscode 重新安装,没有错误了,安装成功了,代码提示也有了~

(3)问题:package command-line-arguments is not a main package

这个问题之间随便在当前目录新建 go 文件执行怎么没报错,今天竟然不行(难道是我在这新建目录执行 go mod init 导致的?),不细究缘由,看报错信息较容易读懂,那就创建一个包名 main,把主函数移动到这个包下再运行,一切正常!

环境具备,终于可以开始跟随官网文档学习了!

相关推荐
怪我冷i13 小时前
使用vscode调试wails项目(golang桌面GUI)
vscode·golang
小吴同学(wlx)17 小时前
Golang 进阶3—— 协程&管道
golang
技术卷17 小时前
GO网络编程(三):海量用户通信系统1:登录功能初步
golang·网络编程
虽千万人 吾往矣20 小时前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
__AtYou__1 天前
Golang | Leetcode Golang题解之第448题找到所有数组中消失的数字
leetcode·golang·题解
千年死缓2 天前
go+redis基于tcp实现聊天室
redis·tcp/ip·golang
吃着火锅x唱着歌2 天前
Redis设计与实现 学习笔记 第五章 跳跃表
golang
技术卷2 天前
Redis数据库与GO完结篇:redis操作总结与GO使用redis
数据库·redis·golang
white.tie2 天前
vscode配置golang
ide·vscode·golang
陈序缘2 天前
Go语言实现长连接并发框架 - 任务管理器
linux·服务器·开发语言·后端·golang