首页 > 解决方案 > 如何将切片与字符串进行比较?

问题描述

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功能。如果不是“让我们玩”,它将不会运行。

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

标签: go

解决方案


也许,是这样的:

//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


推荐阅读