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
功能。如果不是“让我们玩”,它将不会运行。
我想我应该比较msg
,但我不知道如何。谢谢 :)
解决方案
也许,是这样的:
//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
。
推荐阅读
- asp.net-mvc - EF 6,MVC 模型绑定 - HttpPost 上缺少对控制器的引用
- r - 连接匹配行的特定列
- c - C 中的 HashTable,无法添加节点,出现不兼容的指针类型错误
- javascript - 如何更改伪元素的样式?
- javascript - 如何在 useState 中更新对象中一个键的值
- reactjs - 从 Promise(ReactJS 和 Axios)中提取图像数据
- python - 我可以更改 Pandas 中均值函数的 dtype 吗?我想把它改成int类型
- docker - 无法通过 Internet 访问我的本地 kubernetes 服务
- flutter - 仅当热重新加载页面时,设置状态才不会更改值
- swift - 无法格式化 UITableView 的部分标题