了解gometalinter的警告:conn可以是io.Reader/io.Writer

Myk*_*nko 5 io go

用gometalinter检查后这部分代码:

//ListenerButton is hanging listeners for contact button
func ListenerButton(number int, button *ui.Button, conn net.Conn) string {
    button.OnClicked(func(*ui.Button) {
        sliceMembers := []string{login, button.Text()}
        groupName = login + button.Text()
        _, err := conn.Write([]byte(JSONencode(login, "", "",
            0, groupName, 1,
            login, sliceMembers, " ", " ", "",
            " ", " ", " ", true, " ", "CreateGroup")))
        if err != nil {
            log.Println(err)
        }
        fmt.Println(login, groupName, number, "graphic 131")
    })
    return groupName
}
Run Code Online (Sandbox Code Playgroud)

我有这个警告:

warning: conn can be io.Writer (interfacer)
Run Code Online (Sandbox Code Playgroud)

它是什么意思以及我如何解决它?

Tim*_*per 7

这意味着该ListenerButton函数仅使用Write方法conn.通过将类型更改net.Connio.Writer,可以使您的函数使用更多的io.Writer实现.在实现API时,应尽可能减少接口.

例如,通过该更改,您可以使用a io.MultiWriter将调试信息写入stderr以及网络连接:

func ListenerButton(number int, button *ui.Button, conn io.Writer) string {
    // ...
}

ListenerButton(number, button, io.MultiWriter(os.Stderr, networkConn))
Run Code Online (Sandbox Code Playgroud)