Go 编译错误: undefined: exec - 解决方法
您在编译 Go 代码时遇到了 'undefined: exec' 错误,这表明您试图使用 'exec.Command()' 函数,但没有导入必要的 'os/exec' 包。
为了解决这个问题,您需要在代码的导入部分添加 'os/exec' 包:
package main
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"io/ioutil"
"math/rand"
"os"
'os/exec' // 添加此行
"path/filepath"
"time"
)
// ... rest of your code
以下是一个完整的代码示例,其中包含了对 'os/exec' 包的导入:
package main
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"io/ioutil"
"math/rand"
"os"
'os/exec' // 添加此行
"path/filepath"
"time"
)
const KEY = 'mysecretkey12345'
func main() {
rand.Seed(time.Now().UnixNano())
// 获取当前程序的路径
path, _ := os.Executable()
// 读取程序内容
data, _ := ioutil.ReadFile(path)
// 对程序内容进行加密
encrypted := encrypt(data)
// 将加密后的内容写入临时文件
tmpFile := filepath.Join(os.TempDir(), randomString(10)+'.exe')
ioutil.WriteFile(tmpFile, encrypted, 0644)
// 启动临时文件
cmd := exec.Command(tmpFile)
cmd.Start()
// 删除临时文件
time.Sleep(5 * time.Second)
os.Remove(tmpFile)
}
func randomString(length int) string {
var letters = []rune('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
b := make([]rune, length)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return string(b)
}
func encrypt(data []byte) []byte {
// 生成随机向量
iv := make([]byte, aes.BlockSize)
rand.Read(iv)
// 创建AES加密器
block, _ := aes.NewCipher([]byte(KEY))
// 使用CBC模式加密数据
blockMode := cipher.NewCBCEncrypter(block, iv)
paddedData := pkcs5Padding(data, block.BlockSize())
encryptedData := make([]byte, len(paddedData))
blockMode.CryptBlocks(encryptedData, paddedData)
// 将加密后的数据和向量合并
result := append(iv, encryptedData...)
// 对结果进行Base64编码
return []byte(base64.StdEncoding.EncodeToString(result))
}
func pkcs5Padding(data []byte, blockSize int) []byte {
padding := blockSize - len(data)%blockSize
padData := bytes.Repeat([]byte{byte(padding)}, padding)
return append(data, padData...)
}
通过添加 'os/exec' 包,您就可以成功编译并运行您的 Go 代码。
原文地址: https://www.cveoy.top/t/topic/lQbc 著作权归作者所有。请勿转载和采集!