下面这段抛出指针错误的代码有什么问题
What is wrong with this following code which throw pointer error
谁能告诉我这段代码有什么问题吗?
package main
import "fmt"
type Document struct{
testString string
}
type Printer interface{
Print(d *Document)
}
type Scanner interface{
Scan(d *Document)
}
type MultiFunctionMachine struct{
printer Printer
scanner Scanner
}
func (m *MultiFunctionMachine)Print(d *Document){
m.printer.Print(d)
}
func main(){
doc:= Document{"test"}
multiMachine:= MultiFunctionMachine{}
multiMachine.Print(&doc)
}
我不明白为什么它一直抛出以下错误。指针似乎有问题。
*panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1092b46]
goroutine 1 [running]:
main.(*MultiFunctionMachine).Print(...)
/Users/dmml/Documents/golang/udemyGoCourses/designPatternInGo/solidDesignPrinciples/interfaceSegrationPrinciple/main.go:85
main.main()
/Users/dmml/Documents/golang/udemyGoCourses/designPatternInGo/solidDesignPrinciples/interfaceSegrationPrinciple/main.go:94 +0x46
exit status 2*
您的 MultiFunctionMachine 结构需要使用其持有的打印机和扫描仪接口的具体实现进行初始化。换句话说,您需要定义一种或两种类型(结构或其他)来实现 Scan(d *Document) 和 Print(d *Document) 接口(即具有与这些接口具有相同签名的函数)。然后将这些具体类型分配给 MultiFunctionMachine 中的接口字段。只有这样 m:MultiFunctionMachine 才能使用。您收到 nil 指针取消引用错误,因为这些字段未以这种方式初始化。
谁能告诉我这段代码有什么问题吗?
package main
import "fmt"
type Document struct{
testString string
}
type Printer interface{
Print(d *Document)
}
type Scanner interface{
Scan(d *Document)
}
type MultiFunctionMachine struct{
printer Printer
scanner Scanner
}
func (m *MultiFunctionMachine)Print(d *Document){
m.printer.Print(d)
}
func main(){
doc:= Document{"test"}
multiMachine:= MultiFunctionMachine{}
multiMachine.Print(&doc)
}
我不明白为什么它一直抛出以下错误。指针似乎有问题。
*panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1092b46]
goroutine 1 [running]:
main.(*MultiFunctionMachine).Print(...)
/Users/dmml/Documents/golang/udemyGoCourses/designPatternInGo/solidDesignPrinciples/interfaceSegrationPrinciple/main.go:85
main.main()
/Users/dmml/Documents/golang/udemyGoCourses/designPatternInGo/solidDesignPrinciples/interfaceSegrationPrinciple/main.go:94 +0x46
exit status 2*
您的 MultiFunctionMachine 结构需要使用其持有的打印机和扫描仪接口的具体实现进行初始化。换句话说,您需要定义一种或两种类型(结构或其他)来实现 Scan(d *Document) 和 Print(d *Document) 接口(即具有与这些接口具有相同签名的函数)。然后将这些具体类型分配给 MultiFunctionMachine 中的接口字段。只有这样 m:MultiFunctionMachine 才能使用。您收到 nil 指针取消引用错误,因为这些字段未以这种方式初始化。