2016-11-12 2 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 [пароль]», а это означает, что пароль печатает с квадратными скобками а не только пароль.

Я, хотя сначала это был ... интерфейс {}, заставляя его печатать так, но если я изменю его на ... строку, у него будет такая же проблема.

Если я пытаюсь:

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

Он печатает без скобок.

Я довольно новичок, и я понятия не имею, что делать дальше.

ответ

1

Ok, просто понял это

_, 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{}, это означает, что она получит все остальные аргументы как срез. Когда вы проходите args до Fprintf, вы говорите ему, чтобы распечатать этот фрагмент. Как одно, кусочек. Чтобы сгладить фрагмент обратно в список аргументов, вы используете ....

См. Passing arguments to ... parameters.

Смежные вопросы