Apakah ada masalah konkurensi yang sering Anda lihat di kode Go?

Sebuah posting singkat, nilai utamanya adalah komentar (saya harap).

Saya beralih ke Go baru-baru ini. Sejauh ini saya telah mencatat tiga masalah:

  • time.Ticker tidak berhenti: garis yang dilewati defer tick.Stop()

  • Komentar pada tipe perpustakaan mengatakan itu "secara bersamaan aman", tetapi tidak mengatakan dengan tepat bagaimana metode dapat dipanggil atau dari goroutine mana. Defaultnya dapat dianggap "metode jenis apa pun dapat dipanggil dari mana saja dalam urutan apa pun", tetapi dalam praktiknya hal ini tidak berlaku untuk sebagian besar jenis thread-safe: mereka memiliki beberapa siklus hidup (start-stop), atau semantik hanya mendukung satu penulis: mutasi metode dapat dipanggil hanya dari satu goroutine, atau keduanya.

  • Intinya terkait dan sebagian tumpang tindih dengan yang sebelumnya: ada bidang dalam struktur sync.Mutex, tetapi tidak ada komentar yang menjelaskan apa yang dilindungi, dan yang terpenting mengapa (misalnya, "akses ke bidang ini harus dilindungi, karena ditulis dari ini dan itu dari goroutine dan dibaca dari goroutine net/httpserver ").



    Perhatikan bahwa bahkan dalam sumber golang / go, yang biasanya tidak dikomentari (selain yang dokumenter), semua mutex dalam sub net/- paket memiliki komentar pendek.

Sebuah pertanyaan untuk orang-orang yang telah menulis di Go lebih lama - masalah apa yang Anda perhatikan secara teratur, selama peninjauan, mempelajari kode lama, atau kode pustaka?



Posting ini adalah terjemahan lintas posting dari posting di Reddit .




All Articles