-2

谁能告诉我这段代码有什么问题?

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*
4

1 回答 1

1

您的 MultiFunctionMachine 结构需要使用它所拥有的 Printer 和 Scanner 接口的具体实现进行初始化。换句话说,您需要定义一种或两种类型(结构或其他)来实现 Scan(d *Document) 和 Print(d *Document) 接口(即具有与这些接口相同签名的函数)。然后将这些具体类型分配给 MultiFunctionMachine 中的接口字段。只有这样才能使用 m:MultiFunctionMachine。您收到一个 nil 指针取消引用错误,因为这些字段没有以这种方式初始化。

于 2021-09-12T05:51:58.350 回答