Does Golang do any conversion when casting a byte slice to a string?
byte, casting, go, slice, string
Solution
The Go Programming Language Specification
String types
A string type represents the set of string values. A string value is a (possibly empty) sequence of bytes.
Conversions
Conversions to and from a string type
Converting a slice of bytes to a string type yields a string whose successive bytes are the elements of the slice.
string([]byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}) // "hellø"
string([]byte{}) // ""
string([]byte(nil)) // ""
type MyBytes []byte
string(MyBytes{'h', 'e', 'l', 'l', '\xc3', '\xb8'}) // "hellø"
Converting a value of a string type to a slice of bytes type yields a slice whose successive elements are the bytes of the string.
[]byte("hellø") // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
[]byte("") // []byte{}
MyBytes("hellø") // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
A string value is a (possibly empty) sequence of bytes. A string value may or may not represent Unicode characters encoded in UTF-8. There is no interpretation of the bytes during the conversion from `byte` slice to `string` nor from `string` to `byte` slice. Therefore, the bytes will not be changed and the conversions will not fail.
Problem
Does Golang do any conversion or somehow try to interpret the bytes when casting a byte slice to a string? I've just tried with a byte slice containing a null byte and it looks like it still keep the string as it is. ``` var test []byte test = append(test, 'a') test = append(test, 'b') test = append(test, 0) test = append(test, 'd') fmt.Println(test[2] == 0) // OK ``` But how about strings with invalid unicode points or UTF-8 encoding. Could the casting fail or the data be corrupted?