47 lines
		
	
	
		
			981 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			981 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright © 2018 Inanc Gumus
 | 
						|
// Learn Go Programming Course
 | 
						|
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
 | 
						|
//
 | 
						|
// For more tutorials  : https://learngoprogramming.com
 | 
						|
// In-person training  : https://www.linkedin.com/in/inancgumus/
 | 
						|
// Follow me on twitter: https://twitter.com/inancgumus
 | 
						|
 | 
						|
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)
 | 
						|
}
 |