为什么这段 Golang 代码不起作用?

huangapple go评论76阅读模式
英文:

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), &quot; &quot;)
	switch splited[0] {
	case &quot;TEST&quot;:
		connection.Write([]byte(&quot;TEST CONNECTION OK&quot;))
		log.Printf(&quot;TEST COMMAND&quot;)
		break;

If I write &quot;TEST&quot; in client, the server will not enter the case statement. But if I send &quot;TEST  SOMETHING&quot; 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(&quot;TEST&quot;))

splited := strings.Split(string(buffer), &quot; &quot;)

fmt.Printf(&quot;%#v\n&quot;, splited)

Prints:
[]string{&quot;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&quot;}

huangapple
  • 本文由 发表于 2014年11月24日 19:44:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/27104075.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定