Bien que peu performante, la seule solution lisible est
//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]
Exemple complet pour avoir un tableau d'octets de style 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)
}
Exemple complet pour avoir une chaîne de style go excluant les 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)
}
Cela alloue une tranche de tranche d'octets. Gardez donc un œil sur les performances en cas d'utilisation intensive ou répétée.
^@
ne s'affiche pas, mais il aurait été là si vous l'aviez testé dans le terminal ou quelque chose de similaire. La raison en est que Go n'arrête pas de convertir le tableau d'octets en chaîne lorsqu'il trouve un 0.len(string(bytes))
dans votre exemple est 5 et non 1. Cela dépend de la fonction de sortie, si la chaîne est entièrement (avec des zéros) imprimée ou pas.