golang: bagaimana untuk menentukan urutan langkah

PHPz
Lepaskan: 2024-02-10 14:27:09
ke hadapan
925 orang telah melayarinya

golang: bagaimana untuk menentukan urutan langkah

editor php Banana akan memperkenalkan anda cara mentakrifkan urutan langkah dalam Golang. Dalam pembangunan perisian, selalunya perlu melakukan beberapa siri operasi atau tugasan dalam susunan tertentu. Golang menyediakan cara yang ringkas dan cekap untuk mentakrif dan melaksanakan urutan langkah. Dengan menggunakan goroutine dan saluran, kami boleh melaksanakan berbilang langkah serentak dan memastikan bahawa ia dilaksanakan dalam susunan yang ditentukan. Dalam artikel ini, kami akan meneroka cara untuk mentakrifkan urutan langkah dan menunjukkan penggunaannya menggunakan kod contoh. Sama ada anda seorang pemula Golang atau pembangun berpengalaman, artikel ini akan memberikan anda maklumat berharga dan petua praktikal. Mari lihat!

Kandungan soalan

Saya nak tulis ujian protokol. Idea semasa saya adalah untuk menentukan urutan langkah. Setiap langkah termasuk triggerexpectation - 例如触发 msga 并期望 msgb.

type series struct {
  steps []step
}
Salin selepas log masuk

Apa yang saya tidak suka tentang ini series 不明确:我必须按顺序创建切片,然后希望它永远不会混乱,并依赖它,或者 sort ialah ia kemudiannya perlu melaksanakan fungsi isihan, yang sama sekali tidak perlu.

Apakah reka bentuk yang baik yang mentakrifkan secara rasmi series dan menjadikannya eksplisit dengan cara ini?

Idea terbaik saya sekarang ialah mencipta peta dengan indeks int:

type Series struct {
   Steps map[int]Step
}

series := Series{
   Steps: map[int]Step{
     0: Step{},
     1: Step{},
     2: Step{},
     ...
   }
}
Salin selepas log masuk

Pilihan lain mungkin ialah membina sendiri senarai pautan. go Tidak dilaksanakan (setahu saya). Rasanya pelik perlu membina sendiri untuk ini. Tetapi penyelesaian sedemikian juga kehilangan sedikit fungsi eksplisit: pada asasnya, anda sentiasa perlu menyemak imbas senarai terpaut untuk mendapatkan keseluruhan jujukan (cth. "apa itu langkah 4").

Penyelesaian

Selain menggunakan peta, anda masih boleh menggunakan kepingan dan menggunakan Keying Teks kompaun:

var steps = []step{
    0: step{},
    1: step{},
    ...
}
Salin selepas log masuk

Spesifikasi: Teks majmuk Penerangan terperinci:

compositelit  = literaltype literalvalue .
literaltype   = structtype | arraytype | "[" "..." "]" elementtype |
                slicetype | maptype | typename [ typeargs ] .
literalvalue  = "{" [ elementlist [ "," ] ] "}" .
elementlist   = keyedelement { "," keyedelement } .
keyedelement  = [ key ":" ] element .
key           = fieldname | expression | literalvalue .
fieldname     = identifier .
element       = expression | literalvalue .
Salin selepas log masuk

Seperti yang anda lihat, bahagian keyedelement 可能包含可选的 key ":".

...Kunci ditafsirkan sebagai nama medan untuk literal struct, indeks untuk literal tatasusunan dan kepingan, dan kunci untuk literal peta.

Perhatikan bahawa anda boleh mencampurkan elemen berkunci dan "tidak berkunci", dan ia tidak perlu berturut-turut. Selain itu, jika kunci tiada daripada hirisan literal, indeks akan menjadi indeks + 1 sebelumnya.

type step struct{}

var steps = []*step{
    0:       &step{},
    1:       &step{},
    &step{}, // implicit index: 2
    5:       &step{},
}
fmt.println(steps)
Salin selepas log masuk

Output di atas (cuba di pergi taman permainan):

[0x559008 0x559008 0x559008 <nil> <nil> 0x559008]
Salin selepas log masuk

Kunci mereka juga mungkin "tidak teratur", bermakna ini juga sah:

var steps = []*Step{
    5:       &Step{},
    0:       &Step{},
    1:       &Step{},
    &Step{}, // implicit index: 2
}
Salin selepas log masuk

Keluaran ini adalah sama. Cubalah di pergi taman permainan.

Atas ialah kandungan terperinci golang: bagaimana untuk menentukan urutan langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!