この方法が推奨されて行くメモリコピー操作が発生しますが、利点は、損失が生じ、安全でパフォーマンスになり、この損失に対処する一般的なビジネスはごくわずかです。ただし、パフォーマンスを最適化したいときコピーが、しばしばそうであるならば、unsafe.Pointerを導入する必要があります。
func main() {
var s = []byte("我永远喜欢藤原千花.jpg")
Res := *(*string)(unsafe.Pointer(&s))
fmt.Println(Res)
}
効率がより速く変換起こるのタイプのメモリコピーよりも、しかし犠牲に危険な慣行である、基礎となるデータを、公開されますので、文字列は、unsafe.Pointerメモリコピー処理が発生しないことにより、偽造します。
スライスは、この方法と文字列の変換により、我々は彼らの基本的な構造SliceHeaderとStringHeaderを見ることができる理由については:
type SliceHeader struct {
Data uintptr
Len int
Cap int
}
type StringHeader struct {
Data uintptr
Len int
}
两种类型只差了一个字段Cap(容量),前面剩余的字段都是内存对齐的,所以可以直接转换