英文:
Why does this piece of Golang code not work?
问题
_, error := connection.Read(buffer)
buffer := make([]byte, BUFFER_SIZE)
splited := strings.Split(string(buffer), " ")
switch splited[0] {
case "TEST":
connection.Write([]byte("TEST CONNECTION OK"))
log.Printf("TEST COMMAND")
break;
如果我在客户端写入"TEST",服务器将不会进入case语句。但是,如果我从客户端发送"TEST SOMETHING",服务器将按预期进入该语句。这是Go语言的一个错误吗?
<details>
<summary>英文:</summary>
_, error := connection.Read(buffer)
buffer := make([]byte, BUFFER_SIZE)
splited := strings.Split(string(buffer), " ")
switch splited[0] {
case "TEST":
connection.Write([]byte("TEST CONNECTION OK"))
log.Printf("TEST COMMAND")
break;
If I write "TEST" in client, the server will not enter the case statement. But if I send "TEST SOMETHING" from client, the server will enter it as expected. Is this a bug of go-lang?
</details>
# 答案1
**得分**: 1
打印出你的分割缓冲区切片,它仍然包含它初始化时的空字节:
```go
buffer := make([]byte, 32)
copy(buffer, []byte("TEST"))
splited := strings.Split(string(buffer), " ")
fmt.Printf("%#v\n", splited)
打印结果:
[]string{"TEST\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"}
英文:
Print out your split buffer slice, it still contains the null bytes with which it was initialized:
http://play.golang.org/p/CW45hPBZ-e
buffer := make([]byte, 32)
copy(buffer, []byte("TEST"))
splited := strings.Split(string(buffer), " ")
fmt.Printf("%#v\n", splited)
Prints:
[]string{"TEST\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论