2016-05-12 4 views
1

Ich verwende die Slack Web API, um Nachrichten an einen Kanal in Go zu senden. Ich versuche, mehrzeilige Nachrichten im Textfeld zu unterstützen. Laut der Dokumentation sollte einfach ein \ n funktionieren, aber es funktioniert nicht. Bei der Veröffentlichung erscheint \ n im Text und es gibt keinen Zeilenumbruch.Slack API Die Verwendung von n für neue Zeilen funktioniert nicht in chat.postMessage (golang)

Hier ist der Code, den ich mit:

func PostMessage(token, channelName, userName, text string) error { 
    uv := url.Values{} 
    uv.Add("token", token) 
    uv.Add("channel", channelName) 
    uv.Add("username", userName) 
    uv.Add("text", text) 

    resp, err := http.PostForm("https://slack.com/api/chat.postMessage", uv) 
    if err != nil { 
     return err 
    } 
    return nil 
} 

func main() { 
    if err := PostMessage("xxxx", "#test-channel", "API", "This should be the first line\nThis should be the second line"); err != nil { 
     panic(err) 
    } 
} 
+1

Was passiert, wenn Sie ein [Raw-String-Literal] (https://stackoverflow.com/questions/7933460/how-do-you-write-multiline-strings-in-go) verwenden? – BlueSpaceCanary

+0

Sie senden nicht die zwei Zeichen "\" und "n", Sie senden einen buchstabengetreuen Zeilenumbruch. – JimB

+0

Warum benutzen Sie 'github.com/nlopes/slack' nicht? – user1529891

Antwort

1

ich das Problem herausgefunden. Die Probe, die ich ursprünglich gepostet habe, funktioniert tatsächlich wie beabsichtigt. I vereinfacht den ursprünglichen Code, der eine Kommandozeilen-Anwendung war, wo der Text ein Parameter als CLI Flag gesetzt ist, so dass es ein wenig sah wie folgt aus:

cliapp --text="one\ntwo" 

Die Variable, die den Wert für diese Flagge gehalten war nicht wirklich den Charakter zu entkommen, so war es eigentlich:

"one\\ntwo" 

ich einen einfachen String Ersatz verwendet, um die Werte zu beheben:

text = strings.Replace(text, "\\n", "\n", -1) 
0

einfach das newline entkommen "\ n" mit "` n"

Referenz:https://ss64.com/ps/syntax-esc.html

+0

Willkommen bei SO. Link als Antworten sind am besten für Kommentare und nicht für Antworten. Ich schlage vor, die obige Antwort zu bearbeiten, um die Hauptteile so hinzuzufügen, dass es an einem Ort ist. – Syfer

0

I Java wurde mit und ich habe

message.replace("\\n","\n") 

und es funktionierte.