Heim >Backend-Entwicklung >Golang >Wie drucke ich eine 2er-Liste in Golang?
php-Editor Baicao zeigt Ihnen, wie Sie 2 Listen in Golang drucken. In Golang können wir die Println-Funktion im fmt-Paket verwenden, um die Liste zu drucken. Zuerst müssen wir die beiden Listen separat definieren und initialisieren und sie dann mit der Funktion Println ausdrucken. Mithilfe einer Schleife und einer Indexvariablen können wir die Elemente der Liste einzeln durchlaufen und ausdrucken. Auf diese Weise können wir den Inhalt von 2 Listen in Golang problemlos ausdrucken.
Dieses Problem macht mir etwas Sorgen. Meine Idee ist, eine Funktion zu haben, die zwei Spalten druckt. Die erste ist für Tasten, die eine feste Breite haben. Der zweite ist der Wert, der eine sehr lange Zeichenfolge sein kann, deren Breite von der aktuellen Breite des Terminals abhängt.
Ein Beispiel für das, was ich will:
key1 value1value1value1value1 key2 value2value2value2value2value2value2value2value2value2value2value2 value2value2value2value2value2value2value2value2value2value2value2 value2value2value2value2value2value2
Das beste Ergebnis, das ich bisher erzielt habe, ist die Verwendung von Lipgloss, um eine feste Breite für die erste Spalte festzulegen.
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) } }
Das Ergebnis ist ähnlich wie:
Key1 Value1Value1Value1Value1 Key2 Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2
Wie formatiere ich also eine Zeichenfolge nach meinen Wünschen? Ich kann sowohl die Standardbibliothek als auch externe Bibliotheken verwenden, daher sind alle Vorschläge willkommen.
Ich habe hierfür eine Funktion erstellt. Diese Funktion benötigt zwei Parameter: Der erste ist eine Zuordnungsvariable für die Spalte und der zweite gibt an, mit wie vielen Zeichen jede Zeile gefüllt werden soll. Es ändert lediglich den Wertinhalt des Schlüssels mit Leerzeichen in eine neue Variable und gibt dann den Schlüsselwert aus. Wenn Sie jedoch mit unveränderten Werten arbeiten, können Sie auch unveränderte Variablen verwenden.
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 }
Hier ist eine Beispielausgabe:
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
Bitte beachten Sie jedoch, dass die Reihenfolge der Schlüssel und Werte bei jeder Ausführung unterschiedlich sein kann, da Kartentypen beim Drucken in einer for-Schleife mit Schlüssel-Wert-Paaren ungeordnet sind.
Das obige ist der detaillierte Inhalt vonWie drucke ich eine 2er-Liste in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!