标签:style blog ar color 使用 sp 数据 on div
好记性不如烂笔头o_O
slice切片不会开辟新的空间
a := []int{0,1,2,3} b := make([]int, 8) b = a[:] b[2] = 9 fmt.Println(a) fmt.Println(b) 输出: [0 1 9 3] [0 1 9 3]
string底层是用byte数组存的,并且是不可以改变的。
可以用 k := []rune(string) rune等效int32 k := []byte(string) 提取出数据(存于新开辟的空间)。不能使用 []int 提取。
[]byte 跟 [7]byte不能相互赋值。当函数的参数是 [7]byte的时候,就不能将 k := make([]byte, 7) 当做形参传递进去,会编译报错;只能var k [7]byte。还有一个很重要的现象:
package main
import "fmt"
type T struct { v []byte c int } func main() { var k = make([]byte, 7) t := T{k, 3} t.v[1] = 88 fmt.Println(k) fmt.Println(t) }
输出:
[0 88 0 0 0 0 0] {[0 88 0 0 0 0 0] 3}
package main
import "fmt"
type T struct { v [7]byte c int } func main() { var k [7]byte t := T{k, 3} t.v[1] = 88 fmt.Println(k) fmt.Println(t) }
输出:
[0 0 0 0 0 0 0] {[0 88 0 0 0 0 0] 3}
说明 [7]byte将整个数据给复制过去了,而[]byte只是复制了数组的信息。
下面看看给string赋值
package main import "fmt" func main() { //var k [7]byte var k1 = []byte{‘a‘,‘b‘,‘c‘,‘d‘} //s := string(k) s1 := string(k1) fmt.Println(s1) }
输出:abcd
将上述代码注释去掉之后会编译报错。
可以总结出 string 与 []byte之间可以相互强制类型转换。[]rune也可以,不过rune是int32的别名,当里面的一个单元存储的是中文字的时候,转换成string会占用3个字节。
标签:style blog ar color 使用 sp 数据 on div
原文地址:http://www.cnblogs.com/fishincat/p/4117125.html