我正在尝试使用Go语言从WebSockets连接中解析一个字符串。我正在实现连接的两端,因此数据格式的规范仅取决于我。由于这是一个简单的应用程序(通常用于学习),我想到了ActionId Data,其中ActionId是一个uint8。BackendHandler是WebSocket连接中每个请求的处理程序。平台资讯kuba:~$ echo {$GOARCH,$GOOS,`6g -V`}amd64 linux 6g version release.r60.3 9516代码:const ( // Specifies ActionId's SabPause = iota)func BackendHandler(ws *websocket.Conn) { buf := make([]byte, 512) _, err := ws.Read(buf) if err != nil { panic(err.String()) } str := string(buf) tmp, _ := strconv.Atoi(str[:0]) data := str[2:] fmt.Println(tmp, data) switch tmp { case SabPause: // Here I get `parsing "2": invalid argument` // when passing "0 2" to websocket connection minutes, ok := strconv.Atoui(data) if ok != nil { panic(ok.String()) } PauseSab(uint8(minutes)) default: panic("Unmatched input for BackendHandler") }}所有输出:(请注意我用于检查的Println)0 2panic: parsing "2": invalid argument [recovered] panic: runtime error: invalid memory address or nil pointer dereference仅在定义了错误代码的地方(取决于平台),我找不到从中启动此错误的代码。我希望能得到一些改进代码的一般想法,但主要是我想解决转换问题。这与我的缓冲区->字符串转换和切片操作有关(我不想使用SplitAfter方法)吗?编辑此代码重现了该问题:package mainimport ( "strconv" "io/ioutil")func main() { buf , _ := ioutil.ReadFile("input") str := string(buf) _, ok := strconv.Atoui(str[2:]) if ok != nil { panic(ok.String()) }}该文件input必须包含0 2\r\n(取决于文件结尾,在其他操作系统上可能看起来有所不同)。可以通过添加重新切片的结束索引来固定此代码,方法是:_, ok := strconv.Atoui(str[2:3])
1 回答
- 1 回答
- 0 关注
- 259 浏览
添加回答
举报
0/150
提交
取消