// For more tutorials: https://blog.learngoprogramming.com // // Copyright © 2018 Inanc Gumus // Learn Go Programming Course // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ // package main import ( "fmt" "unsafe" ) func main() { // empty := "" // dump(empty) hello := "hello" dump(hello) dump("hello") dump("hello!") for i := range hello { dump(hello[i : i+1]) } dump(string([]byte(hello))) dump(string([]byte(hello))) dump(string([]rune(hello))) } // StringHeader is used by a string value // In practice, you should use: reflect.Header type StringHeader struct { // points to a backing array's item pointer uintptr // where it starts length int // where it ends } // dump prints the string header of a string value func dump(s string) { ptr := *(*StringHeader)(unsafe.Pointer(&s)) fmt.Printf("%q: %+v\n", s, ptr) }