Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cipta struktur GO hanya jika syarat tertentu dipenuhi

Cipta struktur GO hanya jika syarat tertentu dipenuhi

WBOY
WBOYke hadapan
2024-02-08 21:05:49992semak imbas

仅当满足特定条件时才创建 GO 结构

Editor PHP Zimo akan memperkenalkan anda kepada ciri penting, iaitu penciptaan struktur GO dalam keadaan tertentu. Ciri ini membolehkan kami menentukan sama ada untuk mencipta struktur GO mengikut keperluan, dengan itu meningkatkan kecekapan dan prestasi program. Dengan menggunakan ciri ini secara rasional, kita boleh mengelakkan penciptaan struktur GO yang tidak perlu, mengurangkan penggunaan memori dan tekanan pengumpulan sampah, dan meningkatkan kecekapan menjalankan program. Dalam artikel ini, kami akan memperincikan cara menggunakan ciri ini dan memberikan beberapa contoh aplikasi praktikal.

Kandungan soalan

Coretan kod go saya adalah seperti berikut:

type mystruct struct {
   a int
}

if a == nil {
        cond = 0
        var a_mystruct_obj mystruct  // if this condition is satified then only create this a_mystruct_obj obj
    } else if b == nil {
        cond = 1
        var b_mystruct_obj mystruct  // if this condition is satified then only create this b_mystruct_obj obj

    } else {
        cond = 2 // // if this condition is satified then create both the above structure objects  a_mystruct_obj & b_mystruct_obj.
         // is having the below declaration again in else a valid go code ?
        var a_mystruct_obj mystruct
        var b_mystruct_obj mystruct
    }

Saya mempunyai latar belakang c++. Ini akan menjadi mudah dalam c++. Adakah terdapat peruntukan memori dinamik dalam pergi? Bagaimanakah saya boleh mencapai ini secara berterusan?

Adakah mengisytiharkan 2 lagi dalam kod go yang lain yang sah?

var A_mystruct_obj MyStruct
    var B_mystruct_obj MyStruct

Atau adakah saya perlu mempunyai beberapa jenis polimorfisme masa jalan di sini.

Kemas kini:

Saya cuba melakukan ini tetapi ia tidak menyusun seperti yang diharapkan.

https://go.dev/play/p/ioq81aexgjn

dikemaskini lagi

Saya cuba ini dan nampaknya berkesan. Adakah ini okay?

https://go.dev/play/p/r_ywzmkgrps


Jawapan betul


Terdapat dua masalah dalam kod anda:

  1. Pembolehubah anda diisytiharkan dalam skop yang disertakan, jadi ia tidak boleh diakses dari luar skop tersebut (if/else klausa)
  2. Pembolehubah anda diisytiharkan sebagai nilai

Apabila anda menyelesaikan masalah pertama, iaitu dengan mengalihkan perisytiharan pembolehubah ke akses kod selepas penyataan if 子句范围之外,以使它们可以被 if:

    var a_mystruct_obj mystruct
    var b_mystruct_obj mystruct
    if a == nil {
        cond = 0
        // initialise a_mystruct
    } else if b == nil {
        cond = 1
        // initialise b_mystruct
    } else {
        cond = 2
        // initialise a_mystruct and b_mystruct
    }

Kini kedua-dua pembolehubah diisytiharkan dan kedua-dua pembolehubah menggunakan klausa mana dalam pernyataan mystruct 进行初始化,无论到达 if yang baru ditetapkan.

Untuk menyelesaikan masalah ini, tukar pembolehubah kepada penunjuk dan tetapkan nilai yang diingini dalam cabang yang sepadan bagi pernyataan if:

    var a_mystruct_obj *mystruct
    var b_mystruct_obj *mystruct
    if a == nil {
        cond = 0
        a_mystruct_obj = &mystruct{}
    } else if b == nil {
        cond = 1
        b_mystruct_obj = &mystruct{}
    } else {
        cond = 2
        a_mystruct_obj = &mystruct{}
        b_mystruct_obj = &mystruct{}
    }

Petua bonus: anda pada masa hadapan akan berterima kasih kerana memfaktorkan semula ini menjadi sepasang pernyataan, tentukan sama ada anda memerlukan a atau b atau kedua-duanya, kemudian mudahkan kompaun ab 或两者,然后简化您的复合 if 语句作为两个单独语句,分别初始化 ab pernyataan bertindak sebagai dua

berasingan

pernyataan, masing-masing memulakan a atau b:

    var A_mystruct_obj *MyStruct
    var B_mystruct_obj *MyStruct

    areq := a == nil || (..condition 2..) 
    breq := b == nil || (..condition 2..) 
    if areq {
        A_mystruct_obj = &MyStruct{}
    }
    if breq {
        B_mystruct_obj = &MyStruct{}
    }
Tujuannya adalah untuk mengelakkan pertindihan logik (prinsip kering: a 和/或 b 是否需要的问题与初始化 abJangan ulangi diri sendiri

) dan pemisahan kebimbangan. Iaitu, pisahkan persoalan bila

diperlukan. em> Diperlukan. condition 2

Nota: Tidak mungkin untuk lebih spesifik tentang cara menyatakan 🎜 kerana ia tidak jelas daripada kod yang anda siarkan tentang syaratnya. 🎜

Atas ialah kandungan terperinci Cipta struktur GO hanya jika syarat tertentu dipenuhi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam