Go語言(container介紹)

2021-06-28 20:45:44 字數 2254 閱讀 2617

今天,mayuyu來介紹go語言中乙個重要的東西,叫做container。具體原始碼可以參考go語言的源**,如下

路徑:/usr/local/go/src/pkg/container

github上的路徑為:

container的結構如下

可以看出包含三部分:heap,list和ring。下面分別介紹

1. heap

heap即為堆,是一種常用的資料結構,在原始碼裡面,提供了介面,在實際使用時需要實現。

下面是乙個關於heap使用的例項。

**:

package main

import (

"fmt"

"container/heap"

)//heap提供了介面,需要自己實現如下方法

type heap int

//構造的是小頂堆,大頂堆只需要改一下下面的符號

func (h *heap) less(i, j int) bool

func (h *heap) swap(i, j int)

func (h *heap) len() int

func (h *heap) pop() inte***ce{}

func (h *heap) push(x inte***ce{})

func (h *heap) remove(idx int) inte***ce{}

func main()

heap.init(h)

//向heap中插入元素

h.push(5)

h.push(2)

h.push(1)

h.push(8)

h.push(4)

h.push(6)

h.push(2)

//輸出heap中的元素,相當於乙個陣列,原始陣列

fmt.println(h)

//這裡必須要reheapify,建立好堆了

heap.init(h)

//小頂堆對應的元素在陣列中的位置

fmt.println(h)

//移除下標為5的元素,下標從0開始

h.remove(5)

//按照堆的形式輸出

for h.len() > 0

fmt.println()

}

2. listlist型別是雙向鍊錶,具體用法如下

**:

package main

import (

"fmt"

"container/list"

)func main()

//遍歷雙向鍊錶ls中的所有字母

for it := ls.front(); it != nil; it = it.next()

fmt.println()

}

3. ringring是乙個環形鍊錶,具體用法可以參考如下**

**:

package main

import (

"fmt"

"container/ring" //閉環包引入,詳見/usr/local/go/src/pkg/container/ring

)func main()

//迴圈列印閉環中的元素值

r.do(

func(p inte***ce{}))

//獲得當前元素之後的第5個元素

r5 := r.move(5)

fmt.println(r5)

fmt.println(r)

//鏈結當前元素r與r5,相當於刪除了r與r5之間的元素

r1 := r.link(r5)

fmt.println(r1)

fmt.println(r)

}

Go語言介紹

2 go安裝 2.2 解壓 3 hello world 4 執行方法 go是一門編譯型語言,go語言的工具鏈將源 及其依賴轉換成計算機的機器指令 譯註 靜態編譯 go 是乙個開源的程式語言,它能讓構造簡單 可靠且高效的軟體變得容易。go 語言被設計成一門應用於搭載 web 伺服器,儲存集群或類似用途...

Go語言介紹

go語言是谷歌2009發布的第二款開源程式語言。go語言專門針對多處理器系統應用程式的程式設計進行了優化,使用go編譯的程式可以媲美c或c 的速度,而且更加安全 支援並行程序。1 可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔乙個檔案上去就完成了。2 靜態型別語言,但是有動...

Go基礎程式設計 Go語言介紹

2009年11月10日,go語言正式成為開源程式語言家庭的一員。go語言 或稱golang 是雲計算時代的c語言。go語言的誕生是為了讓程式設計師有更高的生產效率,go語言專門針對多處理器系統應用程式的程式設計進行了優化,使用go編譯的程式可以媲美c或c 的速度,而且更加安全 支援並行程序。開發人員...