Rumah  >  Artikel  >  pembangunan bahagian belakang  >  golang: bagaimana untuk menentukan urutan langkah

golang: bagaimana untuk menentukan urutan langkah

PHPz
PHPzke hadapan
2024-02-10 14:27:09930semak imbas

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
}

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{},
     ...
   }
}

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{},
    ...
}

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 .

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)

Output di atas (cuba di pergi taman permainan):

[0x559008 0x559008 0x559008 <nil> <nil> 0x559008]

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

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

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!

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