如何将切片与字符串进行比较?

时间:2018-06-12 13:05:27

标签: go

package main

import (
    "fmt"
    "net"
)

func main() {

    msg := make([]byte, 1024)

    //Basic variables
    port := ":2002"
    protocol := "udp"

    //Build the address
    myaddr, err := net.ResolveUDPAddr(protocol, port)
    if err != nil {
        fmt.Println("Wrong Address")
        return
    }

    //Output
    fmt.Println("Reading " + protocol + " from " + myaddr.String())

    //Create the connection
    connection, err := net.ListenUDP(protocol, myaddr)
    if err != nil {
        fmt.Println(err)
    }

    //receive msg
    for {
        _, useraddr, err := connection.ReadFromUDP(msg)
        fmt.Println("msg from :", useraddr)

        if err != nil {
            fmt.Printf("Some error  %v", err)
            continue
        }
        go sendResponse(connection, useraddr)
    }
}

这是我的UDP服务器,我正在制作游戏。所以我想,如果客户端发送"让我们播放",服务器运行go sendresponse功能。如果它不是"让我们玩#34;它不会运行。

我想我应该比较msg,但我不知道如何。谢谢:))

1 个答案:

答案 0 :(得分:2)

也许,这样的事情:

//receive msg
msg := make([]byte, 1024)
for {
    n, useraddr, err := connection.ReadFromUDP(msg[:cap(msg)])
    msg = msg[:n]
    fmt.Println("msg from :", useraddr)
    if err != nil {
        fmt.Printf("Some error  %v", err)
        continue
    }
    if string(msg) == "let's play" {
        go sendResponse(connection, useraddr)
    }
}

表达式msg[:cap(msg)]msg缓冲区长度设置为其最大容量。

语句msg = msg[:n]msg缓冲区长度设置为读取的实际长度。

string(msg)表达式会将msg类型[]byte转换为string类型以进行比较。