Son derece yüksek performans göstermese de okunabilir tek çözüm
//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]
C stili bayt dizisine sahip olmak için tam örnek:
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)
}
Null'lar hariç go stili bir dizeye sahip olmak için tam örnek:
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)
}
Bu bir dilim dilim bayt ayırır. Bu nedenle, yoğun veya tekrar tekrar kullanılıyorsa performansa dikkat edin.
^@
gösterilmez, ancak terminalde veya benzer bir şeyde test ederseniz orada olurdu. Bunun sebebi Go'nun,len(string(bytes))
örneğinizde 0 değil, 1 olduğunu 0 bulduğunda bayt dizisini bir dizeye dönüştürmeyi durdurmamasıdır . Dizenin tamamen (sıfırlarla) yazdırılıp yazdırılmadığı çıkış işlevine bağlıdır. ya da değil.