前言:
当前我们对“slices是什么”大约比较关心,各位老铁们都需要剖析一些“slices是什么”的相关资讯。那么小编同时在网上收集了一些对于“slices是什么””的相关内容,希望朋友们能喜欢,咱们快快来了解一下吧!在Go 语言中, Slices (切片)是比较重要的数据类型, 比arrays (数组)更强大, 在实际编程过程中也更常用;
基本使用
package mainimport "fmt"func main() { //使用内置函数make 初始化一个size 为3 的切片 s := make([]string, 3) fmt.Println("长度:", len(s), "容量:", cap(s)) fmt.Println("s:", s) fmt.Printf("s 的地址:%p \n", &s) s[0] = "a" s[1] = "b" s[2] = "c" fmt.Println("s:", s) fmt.Println("s[1]:", s[1]) //使用内置函数append 追加一个元素 s = append(s, "d") fmt.Println("长度:", len(s), "容量:", cap(s))//注意此处容量变化 fmt.Println("s:", s) fmt.Printf("s 的地址:%p \n", &s)}//长度: 3 容量: 3//s: [ ]//s 的地址:0xc00011a020 //s: [a b c]//s[1]: b//长度: 4 容量: 6//s: [a b c d]//s 的地址:0xc00011a020切片操作
此处切 为动词...
//切片操作, 左包右不包, 如`[1:3]`表示从索引1到3, 包含1不包含3 s2 := []string{"a", "b", "c", "d"} fmt.Println(s2[:2]) fmt.Println(s2[1:3]) fmt.Println(s2[2:]) fmt.Println(s2[2:3])//[a b]//[b c]//[c d]//[c]多维切片
构建一个二维字符串切片, 4x4 大小, 值为标记坐标;
//二维字符串切片, 4x4 s2d := make([][]string, 4) for i := 0; i < len(s2d); i++ { s2d[i] = make([]string, 4) for j := 0; j < len(s2d[i]); j++ { //strings.Join([]string{strconv.Itoa(i), strconv.Itoa(j)}, "-") 速度比fmt 快 p := fmt.Sprintf("%d-%d", i, j) s2d[i][j] = p } } for _, row := range s2d { fmt.Println(row) }//[0-0 0-1 0-2 0-3]//[1-0 1-1 1-2 1-3]//[2-0 2-1 2-2 2-3]//[3-0 3-1 3-2 3-3]基于切片实现一个简单的先进先出队列
package mainimport "fmt"//定义一个结构体type FIFOQueue struct { elements []int}//Push 函数func (q *FIFOQueue) Push(e int) { q.elements = append(q.elements, e)}//Pop 函数func (q *FIFOQueue) Pop() (e int) { x := q.elements[0] q.elements = q.elements[1:] return x}//是否为空func (q *FIFOQueue) Empty() bool { return len(q.elements) == 0}//当前长度func (q *FIFOQueue) Length() int { return len(q.elements)}//可以被其他包调用的New 函数func NewQueue() *FIFOQueue { q := FIFOQueue{ elements: make([]int, 0), } return &q}func main() { q := NewQueue() fmt.Println("is empty:", q.Empty()) q.Push(1) q.Push(2) q.Push(3) fmt.Println("is empty:", q.Empty()) fmt.Println("length:", q.Length()) for { fmt.Println("element:", q.Pop()) if q.Empty() { break } }}
注: `golang` 中并发编程理念是: 不要通过共享内存来通信,而要通过通信来共享内存.
一般使用`channel` 进行通信, 而不是使用锁机制.
区别于`java`, `java` 中的队列结构都会明确告知是否线程安全, 上文示例未考虑这些.
#Golang# #切片#
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #slices是什么