我正在尝试学习Go和我正在编写一些测试程序,但是在导入我的软件包时遇到了问题。我的Go工作区(在src目录中)($ GOPATH):
中有这个目录树$GOPATH/src/gogoboy
│ main.go
│
├───cpu
│ flags.go
│ instructions.go
│ registers.go
│
└───memory
memories.go
正如你所看到的那样,我现在有两个包:cpu和内存,这是我的主要内容。
package main
import (
"gogoboy/cpu"
"gogoboy/memory"
)
func main() {
cpu.InitializeRegisters()
memory.WriteRAM(0x00, 0xFF)
}
问题是:在相同级别的包内存中的包cpu是正确导入的,我可以使用每个cpu函数但是,包内存会引发错误:
.\main.go:10: undefined: memory.WriteRAM
我真的无法理解发生了什么,有人能给出解决方法吗?
文件记忆/ memories.go
package memory
const size uint16 = 0x2000
type Memories struct {
RAM [size]uint8
VRAM [size]uint8
}
func (memory *Memories) WriteRAM(position uint16, value uint8) {
memory.RAM[position] = value
}
答案 0 :(得分:6)
你没有做你认为自己在做的事;看起来你想在内存结构上调用一个方法,但编译器正在内存包中寻找一个名为WriteRam的函数,因为你正在调用该方法。
在记忆中看看你的签名。:
func (memory *Memories) WriteRAM(position uint16, value uint8)
你有一个接收器func (memory *Memories)
。这意味着为了调用此方法,您需要在某处声明memory.Memories变量。
我想你可能希望你的主要看起来像这样:
package main
import (
"gogoboy/cpu"
"gogoboy/memory"
)
func main() {
cpu.InitializeRegisters()
mem := memory.Memories{}
mem.WriteRAM(0x00, 0xFF)
}