Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mencetak senarai 2 di Golang?
editor php Baicao akan menunjukkan kepada anda cara mencetak 2 senarai di Golang. Di Golang, kita boleh menggunakan fungsi Println dalam pakej fmt untuk mencetak senarai. Mula-mula, kita perlu menentukan dan memulakan dua senarai secara berasingan, dan kemudian gunakan fungsi Println untuk mencetaknya. Dengan menggunakan gelung dan pembolehubah indeks, kita boleh melelakan elemen senarai satu demi satu dan mencetaknya. Dengan cara ini, kita boleh mencetak kandungan 2 senarai di Golang dengan mudah.
Saya agak risau dengan masalah ini. Idea saya adalah untuk mempunyai fungsi yang mencetak dua lajur. Yang pertama adalah untuk kunci, yang mempunyai lebar tetap. Yang kedua ialah nilai, yang mungkin merupakan rentetan yang sangat panjang yang lebarnya bergantung pada lebar semasa terminal.
Contoh yang saya mahukan:
key1 value1value1value1value1 key2 value2value2value2value2value2value2value2value2value2value2value2 value2value2value2value2value2value2value2value2value2value2value2 value2value2value2value2value2value2
Hasil terbaik yang saya perolehi setakat ini ialah menggunakan lipgloss untuk menetapkan lebar tetap untuk lajur pertama.
func printmetadata(metadata map[string]string, color string) { style := lipgloss.newstyle().width(32).foreground(lipgloss.color(color)) for k, v := range metadata { fmt.println(style.render(k) + v) } }
Hasilnya serupa dengan:
Key1 Value1Value1Value1Value1 Key2 Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2
Jadi, bagaimanakah cara saya memformat rentetan mengikut kehendak saya? Saya boleh menggunakan kedua-dua perpustakaan standard dan perpustakaan luaran, jadi sebarang cadangan adalah dialu-alukan.
Saya mencipta fungsi untuk ini. Fungsi ini mengambil dua parameter, yang pertama ialah pembolehubah pemetaan untuk lajur, dan yang kedua ialah berapa banyak aksara untuk mengisi setiap baris. Ia hanya menukar kandungan nilai kunci dengan ruang menjadi pembolehubah baharu dan kemudian mencetak nilai kunci. Tetapi jika anda mempunyai kerja dengan nilai yang tidak diubah suai, anda boleh menggunakan pembolehubah yang tidak diubah suai.
package main import ( "fmt" "errors" "strings" "sort" ) func main() { a := map[string]string{ "key1": strings.repeat("value1", 50), "key2": strings.repeat("value2", 50), "key3": strings.repeat("value3", 50), } err := columner(a, 30) if err != nil { fmt.println(err) } } func columner(m map[string]string, charamount int) error{ var keys []string var keylens []int // to avoid index panics and gathering keys for later usage for key, value := range m { if charamount > len(value) || charamount < 1{ return errors.new("error: charamount neither be greather than length of key's value nor below 1") } keys = append(keys, key) keylens = append(keylens, len(key)) } sort.ints(keylens) for i := 0; i < len(keys); i++ { // for storing updated value of key var value2 string value := m[keys[i]] // will used while extracting substring of key's value as first index firsti := 0 // last index for extract substring from key's value. the len of substring will be same as charamount charamount2 := charamount // will be used to advance next substring of key's value advance := charamount2 // spaces between between key and value // key value spacing := strings.repeat(" ", 20 + (keylens[0] - len(keys[i]))) // var for adjusting spaces of gap between key and value of next line // key value // value // to // key value // value spacingu := spacing + strings.repeat(" ", len(keys[i]) + 1) // this loop will be run as long as there is no substring left which exceed next line for j := 0; j < len(value); j += advance { // adjusting spaces of gap between key and value of next line if j > 0 { spacing = spacingu } // add space between key and value, then extract substring, then add spaces to the next line of the // next substring of key's value value2 += spacing + value[firsti:charamount2] + "\n" // finish loop when there is no substring that can be exceed to next line if ((len(value) - charamount2) < advance) || ((len(value) - charamount2) == advance) { break } // changing first index to start index of next substring of key's value firsti = charamount2 // advancing to next substring of key's value charamount2 += advance } // add last remaining substring of key's value to variable which will be show as formatted. value2 += spacing + value[charamount2:] // show formatted key and value fmt.println(keys[i], value2, "\n") } return nil }
Berikut ialah output sampel:
Key1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Value1Value1Value1Value1Value1 Key2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2 Key3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3 Value3Value3Value3Value3Value3
Tetapi sila ambil perhatian ini, susunan kunci dan nilai mungkin berbeza pada setiap pelaksanaan kerana jenis peta tidak tertib apabila mencetak dalam gelung for dengan kunci, pasangan nilai.
Atas ialah kandungan terperinci Bagaimana untuk mencetak senarai 2 di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!