Mặc dù không thực sự hiệu quả, giải pháp duy nhất có thể đọc được là
//split by separator and pick the first one.
//This has all the characters till null excluding null itself.
retByteArray := bytes.Split(byteArray[:], []byte{0}) [0]
// OR
//If you want a true C-like string including the null character
retByteArray := bytes.SplitAfter(byteArray[:], []byte{0}) [0]
Ví dụ đầy đủ để có một mảng byte kiểu C:
package main
import (
"bytes"
"fmt"
)
func main() {
var byteArray = [6]byte{97,98,0,100,0,99}
cStyleString := bytes.SplitAfter(byteArray[:], []byte{0}) [0]
fmt.Println(cStyleString)
}
Ví dụ đầy đủ để có chuỗi kiểu đi không bao gồm null:
package main
import (
"bytes"
"fmt"
)
func main() {
var byteArray = [6]byte{97,98,0,100,0,99}
goStyleString := string( bytes.Split(byteArray[:], []byte{0}) [0] )
fmt.Println(goStyleString)
}
Điều này phân bổ một lát byte. Vì vậy, hãy theo dõi hiệu suất nếu nó được sử dụng nhiều hoặc lặp đi lặp lại.
^@
không hiển thị, nhưng nó sẽ ở đó nếu bạn kiểm tra nó trong thiết bị đầu cuối hoặc một cái gì đó tương tự. Lý do cho điều này là vì Go không ngừng chuyển đổi mảng byte thành chuỗi khi tìm thấy 0.len(string(bytes))
trong ví dụ của bạn là 5 chứ không phải 1. Nó phụ thuộc vào hàm đầu ra, liệu chuỗi có được in đầy đủ (có số không) không hay không.