So drucken Sie die Werte von Slices

103

Ich möchte die Werte sehen, die in der Scheibe sind. Wie kann ich sie drucken?

projects []Project  
fnr
quelle
9
außerdem fmt.Println(projects)?
Not_a_Golfer
4
Außerdem: [] Projects ist ein Slice, kein Array: golang.org/blog/go-slices-usage-and-internals
elithrar
Warum habt ihr mir alle -1 gegeben?
fnr
2
@fnr sorry, aber die Rezensenten waren wahrscheinlich der Meinung, dass die Frage vom Dokument leicht gelöst werden konnte. Ich habe meine Antwort aktualisiert, um zu zeigen, dass sie nicht immer so offensichtlich ist. Sie können Ihre Frage hinterlassen, es ist eine gültige.
VonC
2
@fnr - a -1 auf dieser Site bedeutet die Frage: "zeigt keinen Forschungsaufwand; es ist unklar oder nicht nützlich". Ich sehe also, dass Sie Ihre Frage mit "go" und "arrays" markiert haben und wissen möchten, wie man sie druckt. Wenn ich auf Google.com nach "Tutorial-Arrays für Programmiersprachen" suche, finde ich eine Reihe von Ressourcen, einschließlich dieser, die möglicherweise hilfreich sind. Wenn dies hilft, zeigt dies, dass Sie vor dem Posten nicht viel recherchiert haben. Wenn dies nicht hilft, müssen Sie Websites wie diese, die Sie durchsucht haben, aufrufen und erklären, warum dies nicht hilfreich war.
Mike

Antworten:

170

Sie können versuchen %v, die %+voder %#vVerben von go fmt :

fmt.Printf("%v", projects)

Wenn Ihr Array (oder hier Slice ) struct(wie Project) enthält , sehen Sie deren Details.
Für mehr Präzision können Sie %#vdas Objekt mit der Go-Syntax drucken, wie bei einem Literal:

%v  the value in a default format.
    when printing structs, the plus flag (%+v) adds field names
%#v a Go-syntax representation of the value

Für Grundtypen fmt.Println(projects)reicht das aus.


Hinweis: Für ein Stück Zeiger, dh []*Project(anstelle von []Project), ist es besser, eine String()Methode zu definieren , um genau das anzuzeigen, was Sie sehen möchten (oder Sie sehen nur die Zeigeradresse).
Siehe dieses play.golang-Beispiel .

VonC
quelle
26

Für a []stringkönnen Sie verwenden strings.Join():

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
// output: foo, bar, baz
jgillich
quelle
17

Ich bevorzuge fmt.Printf("%+q", arr)welche drucken wird

["some" "values" "list"]

https://play.golang.org/p/XHfkENNQAKb

Pylinux
quelle
1
Wie bekomme ich ein Array mit Komma-Trennzeichen?
Shoba
¯ \ _ (ツ) _ / ¯ Wenn Sie eine kurze Lösung finden, fügen Sie diese bitte als Antwort auf diese Frage hinzu. Ich wette, das ist es, wonach die meisten Leute suchen.
Pylinux
4

Wenn Sie nur die Werte eines Arrays ohne Klammern anzeigen möchten, können Sie eine Kombination aus fmt.Sprint()und verwendenstrings.Trim()

a := []string{"a", "b"}
fmt.Print(strings.Trim(fmt.Sprint(a), "[]"))
fmt.Print(a)

Kehrt zurück:

a b
[a b]

Beachten Sie jedoch, dass bei dieser Lösung alle führenden Klammern ab dem ersten Wert und alle nachfolgenden Klammern ab dem letzten Wert verloren gehen

a := []string{"[a]", "[b]"}
fmt.Print(strings.Trim(fmt.Sprint(a), "[]")
fmt.Print(a)

Kehrt zurück:

a] [b
[[a] [b]]

Weitere Informationen finden Sie in der Dokumentation zu Strings.Trim ()

Eddie Curtis
quelle
fmt.Printf (strings.Trim (fmt.Sprintf (a), "[]") fehlt ein Paren auf der rechten Seite. Danke für das Snippet.
pdbrito
2

fmt.Printf()ist in Ordnung, aber manchmal verwende ich gerne ein hübsches Druckpaket .

import "github.com/kr/pretty"
pretty.Print(...)
akond
quelle
0

(Es wurde ein Konto erstellt, um eine vorhandene Antwort zu kommentieren, aber ich kann erst kommentieren, wenn ich genügend Mitarbeiter habe.)

Wenn Sie die Informationen in einem Slice in demselben Format anzeigen möchten, in dem Sie sie eingeben würden (einige wie ["eins", "zwei", "drei"]), finden Sie hier ein Codebeispiel, das zeigt, wie das geht ::

https://play.golang.org/p/vOF6xZ__Otr

Gamelub
quelle
3
Willkommen bei Stack Overflow! Solange Ihre Antwort etwas Neues zum Thema beiträgt, gehört sie in den Antwortbereich. Sie müssen es nicht rechtfertigen, indem Sie sagen, dass Ihr Repräsentant zu niedrig ist. Ihr Beitrag ist genau dort, wo er hingehört :) Abgesehen davon ist es im Allgemeinen vorzuziehen, den von Ihnen verwendeten Code direkt in die Antwort aufzunehmen, anstatt als Link zu einer anderen Site. Fühlen Sie sich frei, den Link in zu lassen, aber kopieren Sie den Code auch in Ihre Antwort. Vielen Dank!
Das_Geek
0

Sie können das Pretty Slice-Paket verwenden:

package main

import pretty "github.com/inancgumus/prettyslice"

func main() {
    nums := []int{1, 9, 5, 6, 4, 8}
    odds := nums[:3]
    evens := nums[3:]

    nums[1], nums[3] = 9, 6
    pretty.Show("nums", nums)
    pretty.Show("odds : nums[:3]", odds)
    pretty.Show("evens: nums[3:]", evens)
}

Dieser Code wird wie folgt produziert und ausgegeben:

Geben Sie hier die Bildbeschreibung ein


Weitere Informationen finden Sie unter: https://github.com/inancgumus/prettyslice

Inanc Gumus
quelle