GolangMap Pengenalan dan Contoh Aplikasi
Golang ialah bahasa pengaturcaraan yang dibangunkan oleh Google dan digunakan secara meluas dalam pembangunan web, pengkomputeran awan, sistem terbenam dan bidang lain. Antaranya, Map ialah struktur data di Golang, digunakan untuk menyimpan pasangan nilai kunci. Artikel ini akan memperkenalkan penggunaan asas GolangMap dan contoh aplikasi praktikalnya.
Penggunaan asas GolangMap
Golang’s Map ialah koleksi pasangan nilai kunci yang tidak tersusun, di mana kunci dan nilai boleh terdiri daripada sebarang jenis. Kaedah pengisytiharan dan permulaan Peta adalah seperti berikut:
//声明一个Map var map1 map[string]int //初始化Map map1 = make(map[string]int) //或者声明并初始化Map map2 := make(map[string]int)
Antaranya, contoh pertama mengisytiharkan Peta tidak diinisialisasi, dan contoh kedua mengisytiharkan dan memulakan Peta, yang boleh digunakan mengikut keperluan. Untuk menambah pasangan nilai kunci dalam Peta, anda boleh menggunakan kaedah berikut:
//添加键值对 map1["one"] = 1 map1["two"] = 2 map1["three"] = 3
Untuk mengakses nilai yang sepadan dengan kunci dalam Peta, anda boleh menggunakan kaedah berikut:
//访问键对应的值 value := map1["one"]
Jika anda mengakses nilai yang tidak wujud kunci, nilai sifar jenis itu akan dikembalikan. Jika anda perlu menentukan sama ada kunci itu wujud, anda boleh menggunakan kaedah berikut:
//判断键是否存在 value, ok := map1["four"] if ok { fmt.Println("the value of four is", value) } else { fmt.Println("four does not exist in the map") }
Antaranya, nilai pulangan kedua ialah jenis bool, menunjukkan sama ada kunci itu wujud.
Contoh aplikasi GolangMap
Dalam aplikasi praktikal, GolangMap boleh digunakan untuk menyelesaikan banyak masalah Beberapa contoh akan diperkenalkan di bawah.
Katakan kita kini perlu mengira bilangan kali setiap perkataan muncul dalam artikel Kita boleh menggunakan Peta untuk mencapai ini:
package main import ( "fmt" "strings" ) func main() { text := "A happy family is but an earlier heaven." words := strings.Fields(text) wordCount := make(map[string]int) for _, word := range words { wordCount[word]++ } for word, count := range wordCount { fmt.Printf("%s:%d ", word, count) } }
Antaranya, rentetan.Fields(teks. ) boleh membahagikan teks kepada Senarai perkataan kemudiannya dilalui melalui senarai perkataan, mengira bilangan kejadian setiap perkataan, dan akhirnya mengeluarkan setiap perkataan dan bilangan kejadiannya.
Andaikan kita perlu melaksanakan sistem caching yang boleh menyimpan beberapa objek dalam ingatan untuk meningkatkan prestasi program. Kita boleh menggunakan Map untuk mencapai:
package main import ( "fmt" "sync" "time" ) type Cache struct { sync.RWMutex data map[string]interface{} } func NewCache() *Cache { return &Cache{data: make(map[string]interface{})} } func (c *Cache) Get(key string) (interface{}, bool) { c.RLock() defer c.RUnlock() val, ok := c.data[key] return val, ok } func (c *Cache) Set(key string, value interface{}) { c.Lock() defer c.Unlock() c.data[key] = value } func main() { cache := NewCache() cache.Set("key1", "value1") cache.Set("key2", "value2") fmt.Println(cache.Get("key1")) fmt.Println(cache.Get("key2")) time.Sleep(time.Second * 2) fmt.Println(cache.Get("key1")) cache.Set("key2", "new value2") fmt.Println(cache.Get("key2")) }
Antaranya, fungsi NewCache() digunakan untuk memulakan objek Cache kosong, fungsi Get() digunakan untuk mendapatkan nilai yang sepadan dengan kunci tertentu, dan fungsi Set() digunakan untuk menambah atau mengubah suai kunci tertentu Nilai yang sepadan dengan kunci. Dalam fungsi main(), kami mula-mula menambah dua pasangan nilai kunci, kemudian mengeluarkan nilainya, dan kemudian tunggu 2 saat untuk mengeluarkan nilai salah satu kunci sekali lagi Anda boleh melihat bahawa cache belum tamat tempoh, dan kemudian diubah suai nilai kunci yang sepadan, dan akhirnya mengeluarkan nilai kunci.
Andaikan kita perlu melaksanakan baris gilir mesej yang boleh menyimpan beberapa mesej dalam ingatan untuk mencapai pemprosesan tak segerak. Kita boleh menggunakan Map untuk mencapai:
package main import ( "fmt" "sync" ) type MessageQueue struct { sync.Mutex data map[int]string index int } func NewMessageQueue() *MessageQueue { return &MessageQueue{data: make(map[int]string)} } func (mq *MessageQueue) Enqueue(msg string) { mq.Lock() defer mq.Unlock() mq.index++ mq.data[mq.index] = msg } func (mq *MessageQueue) Dequeue() string { mq.Lock() defer mq.Unlock() msg, ok := mq.data[1] if !ok { return "" } delete(mq.data, 1) for i := 2; i <= mq.index; i++ { mq.data[i-1] = mq.data[i] } mq.index-- return msg } func main() { mq := NewMessageQueue() mq.Enqueue("hello") mq.Enqueue("world") mq.Enqueue("golang") fmt.Println(mq.Dequeue()) fmt.Println(mq.Dequeue()) fmt.Println(mq.Dequeue()) fmt.Println(mq.Dequeue()) }
Antaranya, fungsi NewMessageQueue() digunakan untuk memulakan objek MessageQueue kosong, fungsi Enqueue() digunakan untuk menambah mesej pada baris gilir mesej, dan fungsi Dequeue() ialah digunakan untuk mendapatkan baris gilir mesej A mesej. Dalam fungsi main(), kami mula-mula menambah 3 mesej pada baris gilir mesej, kemudian mengeluarkannya dalam urutan, dan akhirnya mengeluarkan mesej yang tidak wujud.
Ringkasan
GolangMap ialah struktur data dalam Golang yang boleh digunakan untuk menyimpan pasangan nilai kunci. Dalam aplikasi praktikal, GolangMap boleh digunakan untuk menyelesaikan banyak masalah praktikal, seperti mengira bilangan kejadian perkataan, melaksanakan caching, melaksanakan baris gilir mesej, dsb. Artikel ini memperkenalkan penggunaan asas GolangMap dan beberapa contoh aplikasi praktikal saya harap ia akan membantu pelajar Golang.
Atas ialah kandungan terperinci Memahami dan menggunakan contoh GolangMap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!