Sebbene non estremamente performante, l'unica soluzione leggibile è
//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]
Esempio completo per avere un array di byte in stile 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)
}
Esempio completo per avere una stringa di stile go escludendo i 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)
}
Ciò alloca una fetta di fetta di byte. Quindi tieni d'occhio la performance se viene usata pesantemente o ripetutamente.
^@
non si vede , ma sarebbe stato lì se lo avessi testato nel terminale o qualcosa di simile. La ragione di ciò è che Go non smette di convertire l'array di byte in una stringa quando trova uno 0.len(string(bytes))
nell'esempio è 5 e non 1. Dipende dalla funzione di output, se la stringa è stampata completamente (con zeri) o no.