2016-11-12 46 views
0

我正在尝试我的手在一个IRC客户端,但我无法获得一个字符串使用Fprintf“正确打印”。这是不工作的方法:字符串打印不正确使用FprintF

func (irc *IrcConnection) sendMessage(message string, args ...interface{}) (error){ 

    fmt.Printf("Sending: "+message, args) 
    _, err := fmt.Fprintf(irc.connection, message+" \r\n", args) 
    if err != nil{ 
     return err; 
    } 

    return nil 
} 

我的实例调用它是

ircConnection.sendMessage("PASS %s", ircConnection.info.password) 

输出最终被“PASS [口令]”,意思是与方括号中的密码打印而不仅仅是密码。

我虽然起初它是... interface {}使它打印,但如果我改变它...字符串它有同样的问题。

如果我尝试:

var test interface{} = ircConnection.info.password 
fmt.Printf("%s", test) 

它打印不带支架。

我是新来的,不知道接下来要尝试什么。

回答

1

好吧,只是理解了它

_, err := fmt.Fprintf(irc.connection, message+" \r\n", args) 

需求,成为

_, err := fmt.Fprintf(irc.connection, message+" \r\n", args...) 

我试图打印数组/片

1

你想fmt.Fprintf(irc.connection, message+" \r\n", args...) - 注意args...,不args。当你的函数声明args ...interface{}这意味着它将所有剩下的参数作为一个片段。当你通过argsFprintf时,你告诉它打印该切片。作为一件事,一个切片。要将切片展平成参数列表,请使用...

请参阅Passing arguments to ... parameters