Обрезать новую строку в golang tcp server - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь выяснить, как удалить новую строку в сообщении строки golang, которое я получил из сообщения netcat tcp. Я использовал функцию string.TrimSpace, но все еще не могу удалить перевод строки. Есть идеи? Я также пытался использовать другие функции обрезки в пакете строк, но не смог заставить их работать.

Может ли это быть связано с ошибкой чтения: EOF msg?

>>> go run newline_ex.go
Listening on localhost:8080
Error reading: EOF
received message: sometext|\n
post trim: sometext|\n

# Seperate terminal
>>> echo -n "sometext\n" | nc localhost 8080  
package main

import (
    "bufio"
    "fmt"
    "net"
    "os"
    "strings"
)

const (
    host     = "localhost"
    port     = "8080"
    adress   = host + ":" + port
    connType = "tcp"
)

func handleMsg(message string) (string, error) {
    fmt.Printf("received message: %s\n", message)
    m := strings.TrimSpace(message)
    fmt.Printf("post trim: %s \n", m)

    return "OK", nil
}

func handleRequest(conn net.Conn) {
    msg, err := bufio.NewReader(conn).ReadString('\n')
    if err != nil {
        fmt.Println("Error reading:", err.Error())
    }

    response, err := handleMsg(msg)
    if err != nil {
        fmt.Printf("fail to handle message: %v\n", err)
    }

    fmt.Printf("Sending response: %v\n", response)
    conn.Write([]byte(response + "\n"))
    conn.Close()
}

func main() {
    l, err := net.Listen(connType, adress)
    if err != nil {
        fmt.Printf("Error listening: %v", err)
        os.Exit(1)
    }
    defer l.Close()
    fmt.Println("Listening on " + adress)

    for {
        conn, err := l.Accept()
        if err != nil {
            fmt.Printf("Error accepting: %v\n", err)
            os.Exit(1)
        }

        go handleRequest(conn)
    }
}

1 Ответ

0 голосов
/ 08 ноября 2018

strings.Trimspace обрезает начальные и конечные пробелы. Используйте

strings.TrimRight("sometext\n", "\n")
...