下面这段抛出指针错误的代码有什么问题

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 指针取消引用错误,因为这些字段未以这种方式初始化。