Вы не предоставили небольшую скомпилируемую и работающую программу для иллюстрации вашей проблемы.Также вы не предоставили полных и значимых диагностических сообщений для печати.
Я думаю, у вас есть строка с нулевым символом в конце в стиле C.Например, для упрощения вашего кода,
package main
import (
"fmt"
"strconv"
)
func main() {
buf := make([]byte, 512)
buf = []byte("0 2\x00") // test data
str := string(buf)
tmp, err := strconv.Atoi(str[:0])
if err != nil {
fmt.Println(err)
}
data := str[2:]
fmt.Println("tmp:", tmp)
fmt.Println("str:", len(str), ";", str, ";", []byte(str))
fmt.Println("data", len(data), ";", data, ";", []byte(data))
// 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())
}
_ = minutes
}
Вывод:
parsing "": invalid argument
tmp: 0
str: 4 ; 0 2 ; [48 32 50 0]
data 2 ; 2 ; [50 0]
panic: parsing "2": invalid argument
runtime.panic+0xac /home/peter/gor/src/pkg/runtime/proc.c:1254
runtime.panic(0x4492c0, 0xf840002460)
main.main+0x603 /home/peter/gopath/src/so/temp.go:24
main.main()
runtime.mainstart+0xf /home/peter/gor/src/pkg/runtime/amd64/asm.s:78
runtime.mainstart()
runtime.goexit /home/peter/gor/src/pkg/runtime/proc.c:246
runtime.goexit()
----- goroutine created by -----
_rt0_amd64+0xc9 /home/peter/gor/src/pkg/runtime/amd64/asm.s:65
Если вы добавите мои диагностические операторы печати в свой код, что вы увидите?
Примечаниечто ваше tmp, _ := strconv.Atoi(str[:0])
утверждение, вероятно, неверно, поскольку str[:0]
эквивалентно str[0:0]
, что эквивалентно пустому string
""
.
Я подозреваю, что ваша проблема в том, что вы игнорируетеn
возвращаемое значение от ws.Read
.Например (я думаю, включая диагностические сообщения),
buf := make([]byte, 512)
buf = buf[:cap(buf)]
n, err := ws.Read(buf)
if err != nil {
panic(err.String())
}
fmt.Println(len(buf), n)
buf = buf[:n]
fmt.Println(len(buf), n)
Кроме того, попробуйте использовать этот код для установки tmp
,
tmp, err := strconv.Atoi(str[:1])
if err != nil {
panic(err.String())
}