今天,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 的速度,而且更加安全 支援並行程序。開發人員...