结构成员使用而不是结构本身

时间:2016-01-19 16:09:24

标签: go

所以这与tarm's Go Serial Package

有关

我试图用它来阅读' \ r \ n'从串口终止字符串。虽然它没有将其作为内置函数,但我找到this answer并从那里开始工作(在创建的端口上使用扫描仪并使用自定义拆分功能)。

现在我的问题正是如此,为什么这有效?端口stuct如下(来自包源代码):

type Port struct {
    // We intentionly do not use an "embedded" struct so that we
    // don't export File
    f *os.File
}

因此文件指针只是Port类型的一个字段,它没有嵌入或任何东西。

但以下代码有效:

func handler(port *serial.Port) {

    scanner := bufio.NewScanner(port)

    scanner.Split(scanMessageLine)

    for {

        scanner.Scan()

        messageBytes := scanner.Bytes()
    }
}

我如何创建一个扫描仪,它需要带端口的io.Reader接口;虽然它只是实现接口的端口成员,而不是端口本身?

此外,Webstorm中的代码完成(我将其与Golang插件一起使用)建议f上的函数作为端口的直接成员,但是如果我打印端口stuct实例它只包含一个指针?

只是为了消除IDE做一些奇怪的事情,我从命令行构建了程序,它仍然有效。

是否有一些奇特的指针伏都教我在这里失踪?或者它是常用的Golang功能吗?是否有一个单独成员的结构直接暴露其成员的方法?即使它没有被嵌入?

由于完全有可能我完全误解了整个界面的事情,如果有一些很好的深度材料,你们建议我应该阅读,我很乐意这样做。考虑到界面如何遍布各处,我想要正确理解它们。

1 个答案:

答案 0 :(得分:0)

Port有方法Read(b []byte) (n int, err error),因此它实现了io.Reader

请参阅the source