Goland命令行传参的坑点:引号!

四个月前,我用Go写了一个图片处理程序,它没有GUI,于是想着用c#写个gui套壳,然后核心调用go编译好的exe程序完成一系列图片处理功格式能:加水印、转格式、压缩......

因此很直接就想到用命令行传参的方式让Go程序接收c#主程传递的数据,可是当我传递具有单引号的json字符串时,单引号直接给忽略了,我不得不给它加上转义:
这还是头一次见,因为在c#、java里,印象中单引号是可以直接接收处理的。而这里,单引号不转义,Go程序接收单引号直接没了。

"aaaa'''''''' +=bbbb.jpeg"
这种文件名,都是要传,调用方转义双引号,还得转义单引号,要不然os.Args获取参数,单引号直接忽略了。单引号忽略了,文件肯定不存在,就报错了。另外,windows 单引号、空格都可以重命名文件,命令行传参go接收的时候,空格会被截断,因为空格用来区分命令行传递的参数数量。

解决办法就是把引号转义,空格用英文
?
代替,然后go程序内部最终再把
?
用空格替换回来。

我又折腾了到后面,才发现,原来不是Go的问题!

go程序接收c#命令行参数可以不用转义单引号也能够正常解析反序列化json。出错的情况其实是我直接在goland设置命令行传参,而goland这里无论单引号和双引号都必须转义:
实在坑啊,我就说嘛双引号本来就需要转义,但单引号转义个鬼,原来是你这个goland搞的鬼!使用版本
GoLand 2022.1.1

来自:Golang
更新于2023-08-09 00:01:55 发表于2023-08-08 23:44:28


发表您的评论





公元2024年甲辰龍年,平安健康、龍行天下!