Maison > Article > développement back-end > Comment imprimer une liste de 2 en Golang ?
l'éditeur php Baicao vous montrera comment imprimer 2 listes dans Golang. Dans Golang, nous pouvons utiliser la fonction Println du package fmt pour imprimer la liste. Tout d’abord, nous devons définir et initialiser les deux listes séparément, puis utiliser la fonction Println pour les imprimer. En utilisant une boucle et une variable d'index, nous pouvons parcourir les éléments de la liste un par un et les imprimer. De cette façon, nous pouvons facilement imprimer le contenu de 2 listes dans Golang.
Je suis un peu troublé par ce problème. Mon idée est d'avoir une fonction qui imprime deux colonnes. Le premier concerne les clés, qui ont une largeur fixe. La seconde est la valeur, qui peut être une chaîne très longue dont la largeur dépend de la largeur actuelle du terminal.
Un exemple de ce que je veux :
key1 value1value1value1value1 key2 value2value2value2value2value2value2value2value2value2value2value2 value2value2value2value2value2value2value2value2value2value2value2 value2value2value2value2value2value2
Le meilleur résultat que j'ai obtenu jusqu'à présent est d'utiliser du brillant à lèvres pour définir une largeur fixe pour la première colonne.
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) } }
Le résultat est similaire à :
Key1 Value1Value1Value1Value1 Key2 Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2 Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2Value2
Alors, comment formater une chaîne comme je le souhaite ? Je peux utiliser à la fois la bibliothèque standard et les bibliothèques externes, donc toutes les suggestions sont les bienvenues.
J'ai créé une fonction pour cela. Cette fonction prend deux paramètres, le premier est une variable de mappage pour la colonne et le second est le nombre de caractères avec lesquels remplir chaque ligne. Il modifie simplement le contenu de la valeur de la clé avec des espaces dans une nouvelle variable, puis imprime la valeur de la clé. Mais si vous travaillez avec des valeurs non modifiées, vous pouvez utiliser des variables non modifiées.
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 }
Voici un exemple de sortie :
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
Mais veuillez noter ceci, l'ordre des clés et des valeurs peut être différent à chaque exécution car les types de cartes ne sont pas ordonnés lors de l'impression dans une boucle for avec des paires clé-valeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!