示例:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36  | 
						package main import ( 	"fmt" 	"unsafe" ) func main() { 	substr() } type String struct  { 	str *byte 	length int } func (s *String) String() string { 	return fmt.Sprintf("str: %p\nlen: %d", s.str, s.length) } func inspectString(s *string) { 	a := (*String)(unsafe.Pointer(s)) 	fmt.Printf("%s\n", a.String()) } // 变量a的地址比变量b的地址大16字节,一方面体现了栈是向下走的,先分配a,在分配b // 另一方面,也体现了字符串变量占用的内存大小是16字节,一个指针和一个int // 变量b的str指针比变量a的str指针大2,说明b没有产生新的字符串内容 func substr() { 	a := "12345" 	b := a[2:4] 	println("a:", &a) 	inspectString(&a) 	println("b:", &b) 	inspectString(&b) }  | 
					
- 这里的字符串b复用了字符串a的一部分,使得
- 截取操作很快
 - 字符串a离开作用域而字符串b没有离开作用域的话,a不能被gc