为了账号安全,请及时绑定邮箱和手机立即绑定

将io字符串转换为int Atoi无效参数

将io字符串转换为int Atoi无效参数

Go
呼如林 2021-04-28 13:49:44
我正在尝试使用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
提交
取消
意见反馈 帮助中心 APP下载
官方微信