성능이 좋지는 않지만 읽을 수있는 유일한 솔루션은
//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 스타일 바이트 배열을 갖는 전체 예 :
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을 제외한 go 스타일 문자열을 갖는 전체 예 :
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)
}
이것은 바이트 슬라이스 조각을 할당합니다. 많이 사용하거나 반복적으로 사용하는 경우 성능을 주시하십시오.
^@
표시되지 않지만 터미널이나 비슷한 곳에서 테스트하면 거기에 있었을 것입니다. 그 이유는 Go가 0len(string(bytes))
을 찾을 때 바이트 배열을 문자열로 변환하는 것을 멈추지 않기 때문입니다.이 예에서 5는 1이 아니라 5입니다. 문자열이 완전히 (0으로) 인쇄되었는지 여부에 따라 출력 함수에 따라 다릅니다. 또는 아닙니다.