Pengumpulan Sampah dan Penggunaan Penunjuk yang Betul dalam Go
Masalah:
Anda bekerja dengan bahasa dengan struktur data yang berbeza, seperti Python, dan anda ingin berhijrah ke Go. Anda tidak pasti cara memanfaatkan penunjuk dengan betul dalam program Go.
Secara khusus, anda mempunyai situasi di mana:
Soalan:
Bagaimanakah anda boleh menggunakan penunjuk dengan berkesan untuk memetakan teg kepada URL imej dalam program Go? Apakah pertimbangan yang perlu diambil untuk memastikan kutipan sampah dan pengurusan ingatan yang betul?
Jawapan:
1. Elakkan Menyimpan Penunjuk ke Medan:
2. Nilai Rentetan Berkelakuan Seperti Penunjuk:
3. Gunakan Interner Rentetan:
Kod Contoh:
<code class="go">package main import ( "encoding/json" "fmt" "os" "reflect" ) type Image struct { URL string Description string Tags []*Tag } type Tag struct { Name string Rank int } // this function mimics json.NewDecoder(resp.Body).Decode(&parsedJSON) func searchImages() []*Image { parsedJSON := []*Image{ &Image{ URL: "https://c8.staticflickr.com/4/3707/11603200203_87810ddb43_o.jpg", Description: "Ocean islands", Tags: []*Tag{ &Tag{"ocean", 1}, &Tag{"water", 2}, &Tag{"blue", 3}, &Tag{"forest", 4}, }, }, &Image{ URL: "https://c3.staticflickr.com/1/48/164626048_edeca27ed7_o.jpg", Description: "Bridge over river", Tags: []*Tag{ &Tag{"bridge", 1}, &Tag{"river", 2}, &Tag{"water", 3}, &Tag{"forest", 4}, }, }, } return parsedJSON } func main() { result := searchImages() cache := map[string]string{} tagToUrlMap := make(map[string][]string) for _, image := range result { imageURL := intern(image.URL, cache) for _, tag := range image.Tags { tagName := intern(tag.Name, cache) tagToUrlMap[tagName] = append(tagToUrlMap[tagName], imageURL) } } cache = nil enc := json.NewEncoder(os.Stdout) enc.SetIndent("", " ") if err := enc.Encode(tagToUrlMap); err != nil { panic(err) } } func intern(s string, cache map[string]string) string { if s2, ok := cache[s]; ok { return s2 } // New string, store it cache[s] = s return s }</code>
Sumber Tambahan:
Atas ialah kandungan terperinci Bagaimanakah saya boleh memetakan tag ke URL imej dengan cekap menggunakan penunjuk dalam Go sambil memastikan pengumpulan sampah yang betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!