Selain arrays dan maps, Go memiliki beberapa koleksi lagi yang tersedia di bawah paket kontainer. Kita akan melihat paket container/list sebagai contoh.
Package List
Library container/list mengimplementasikan list yang tertaut ganda. list tertaut atau sering kita bilang Linked List adalah tipe struktur data yang terlihat seperti ini:

Setiap node dari list berisi nilai (1, 2, atau 3 dalam kasus ini) dan penunjuk ke node (titik) berikutnya. Karena ini adalah list yang ditautkan ganda (double linked list), setiap node juga akan memiliki pointer ke node sebelumnya. list ini dapat dibuat dengan program dibawah ini.
package main
import ("fmt" ; "container/list")
func main() {
var x list.List
x.PushBack(1)
x.PushBack(2)
x.PushBack(3)
for e := x.Front(); e != nil; e=e.Next() {
fmt.Println(e.Value.(int))
} }
Maka bisa kita lihat hasilnya jika kita jalankan program diatas
➜ 12-libary-container-sort git:(main) ✗ go run main.go
1
2
3
Nilai nol untuk list adalah list kosong (*list juga dapat dibuat menggunakan list.New). Nilai ditambahkan ke list menggunakan fungsi PushBack. Kita mengulang setiap item dalam list dengan mendapatkan element pertama, dan mengikuti semua tautan sampai kita mencapai nil.
Package Sort
Packag sort berisi fungsi untuk menyortir data sesuai dengan kebutuhkan kita. Ada beberapa fungsi penyortiran yang telah ditentukan sebelumnya (untuk int dan float). Berikut ini contoh cara mengurutkan data kita.
package main
import (
"fmt"
"sort"
)
type Orang struct {
Nama string
Umur int
}
type ByNama []Orang
func (this ByNama) Len() int {
return len(this)
}
func (this ByNama) Less(i, j int) bool {
return this[i].Nama < this[j].Nama
}
func (this ByNama) Swap(i, j int) {
this[i], this[j] = this[j], this[i]
}
func main() {
kids := []Orang{
{"Jill", 9},
{"Jack", 10},
}
sort.Sort(ByNama(kids))
fmt.Println(kids)
}
Fungsi Sort didalam sort package mengambil sort.Interface dan mengurutkannya. Sort.Interface membutuhkan 3 metode: Len, Less dan Swap. Untuk menentukan pengurutan kita sendiri, kita membuat tipe baru (ByName) dan membuatnya setara dengan sepotong dengan sepotong dari apa yang ingin kita urutkan. Kemudian kita mendefinisikan 3 metode.
Kita juga bisa mengurutkan data kids tersebut berdasarkan usia. Maka, kita juga perlu mendefinisikan tipe ByUmur agar sorting-nya disesuaikan dengan umur dari data orang-orang. Berikut dibawah ini perlu kita tambahkan.
type ByUmur []Orang
func (this ByUmur) Len() int {
return len(this)
}
func (this ByUmur) Less(i, j int) bool {
return this[i].Umur < this[j].Umur
}
func (this ByUmur) Swap(i, j int) {
this[i], this[j] = this[j], this[i]
}