Go编程打包 Json 文件到 exe 程序

Posted Web3Ao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go编程打包 Json 文件到 exe 程序相关的知识,希望对你有一定的参考价值。

文章目录

问题描述

当前编程

软件需求:漏洞扫描器需要一个配置文件,用于存放不同漏洞的 Payload。

解决方式:创建 paramsFuzz.json 文件,定义多层嵌套的 Json 数据格式。然后在 main.go 中定义对应数据格式的结构体,把配置文件中的数据读取到程序中,运行没有问题。

main.go 相关的主要代码如下:

// ParamsFuzzJson 定义配置文件解析后的结构
type ParamsFuzzJson struct 
	Data					[]ParamData				`json:"data"`
	ParamsWhiteArray		[]string				`json:"params_white_list"`
	ParamsHazardArray		[]ParamsHazardData		`json:"params_hazard"`



func read_paramsPayload() ParamsFuzzJson 
	var paramsFuzzJson ParamsFuzzJson

	bytes, err := ioutil.ReadFile("./fuzzDicts/paramsFuzz.json")

	if err != nil 
		fmt.Println("读取json文件失败", err)
		os.Exit(1)

	

	// 把文件内容赋值给定义的结构体
	err = json.Unmarshal(bytes, &paramsFuzzJson)
	if err != nil 
		fmt.Println("读取/fuzzDicts/paramsFuzz.json时,解析数据失败", err)
		os.Exit(1)
	

	return paramsFuzzJson


遇到问题

需求:把项目代码编译成 exe,便于执行,避免每次执行都要启动 IDEA。

遇到问题:编译打包过程中,不会打包 Json 文件,导致程序运行时无法读取 Json 配置文件,如图。

解决问题

embed功能

参考:Go 1.16新特性-embed包及其使用

embed:embed是在Go 1.16中新加包。它通过//go:embed指令,可以在编译阶段将静态资源文件打包进编译好的程序中,并提供访问这些文件的能力。

embed的三种数据类型及使用:在embed中,可以将静态资源文件嵌入到三种类型的变量,分别为:字符串、字节数组、embed.FS文件类型。

将文件内容嵌入到字节数组变量中-示例

package main
import (
    _ "embed"
    "fmt"
)

//go:embed version.txt
var versionByte []byte

func main() 
    fmt.Printf("version %q\\n", string(versionByte))

应用 embed - 成功

易错点//go:embed 指令只能用在包级别的全局变量中,不能用在函数或方法内,否则在编译的时候会报"go:embed cannot apply to var inside func"错误。

应用步骤

  • 复制 Json 文件到 main.go 所在目录,便于寻找文件
  • 全局变量中以字节形式读取文件,因为与 ioutil.ReadFile() 读取的都是字节,便于调试
  • 运行调试,发现可以打包并且正常执行

更改后的代码

// ParamsFuzzJson 定义配置文件解析后的结构
type ParamsFuzzJson struct 
	Data					[]ParamData				`json:"data"`
	ParamsWhiteArray		[]string				`json:"params_white_list"`
	ParamsHazardArray		[]ParamsHazardData		`json:"params_hazard"`

//go:embed paramsFuzz.json
var payloadByte []byte


func read_paramsPayload() ParamsFuzzJson 

	var paramsFuzzJson ParamsFuzzJson

	json.Unmarshal(payloadByte, &paramsFuzzJson)
	
	return paramsFuzzJson


以上是关于Go编程打包 Json 文件到 exe 程序的主要内容,如果未能解决你的问题,请参考以下文章

electron 打包时文件复制到程序目录下

Java可以编写能在WINDOWS下的exe程序吗 就是可执行文件

将 kivy 应用程序打包到一个 exe 中

java 怎么打包成.exe文件

如何制作exe程序可执行文件

winform项目打包后生成一个exe安装包