46 lines
		
	
	
		
			866 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			866 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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)
 | |
| }
 |