Meskipun tidak terlalu berkinerja, satu-satunya solusi yang dapat dibaca adalah
//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]
Contoh lengkap untuk memiliki array byte gaya-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)
}
Contoh lengkap untuk memiliki string gaya go tidak termasuk nulls:
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)
}
Ini mengalokasikan sepotong byte. Jadi perhatikan kinerja jika digunakan banyak atau berulang kali.
^@
itu tidak muncul, tetapi pasti sudah ada di sana jika Anda mengujinya di terminal atau yang serupa. Alasan untuk ini, adalah bahwa Go tidak berhenti mengubah array byte ke string ketika menemukan 0.len(string(bytes))
dalam contoh Anda adalah 5 dan tidak 1. Itu tergantung pada fungsi output, apakah string sepenuhnya (dengan nol) dicetak atau tidak.