Dilimlerin değerleri nasıl yazdırılır


103

Dilimdeki değerleri görmek istiyorum. Bunları nasıl yazdırabilirim?

projects []Project  

10
yanı sıra fmt.Println(projects)?
Not_a_Golfer

4
Ayrıca: [] Projeler bir dizi değil, bir dilimdir: golang.org/blog/go-slices-usage-and-internals
elithrar

Neden hepiniz bana -1 verdiniz?
fnr

2
@fnr üzgünüm, ancak gözden geçirenler muhtemelen sorunun doktor tarafından kolayca çözülebileceğini düşündüler. Cevabımı her zaman açık olmadığını göstermek için güncelledim. Sorunuzu bırakabilirsiniz, geçerli bir sorudur.
VonC

2
@fnr - Bu sitedeki bir -1 şu soru anlamına gelir: "araştırma çabası göstermiyor; açık değil veya kullanışlı değil". Görüyorum ki sorunuzu "git" ve "diziler" olarak etiketlemişsiniz ve bunların "nasıl yazdırılacağını" bilmek istiyorsunuz. Ben Google.com gidip arama yaparsanız "dil öğretici diziler programlama gitmek" Ben de dahil olmak üzere bir dizi kaynak bulmak bu için daha iyi olur gibi görünüyor hangi. Yani bu yardımcı olursa, yayınlamadan önce fazla araştırmadığınızı gösterir. Bu işe yaramazsa, aradığınız buna benzer siteleri aramanız ve neden yardımcı olmadığını açıklamanız gerekir.
Mike

Yanıtlar:


172

Deneyebilirsin %v, %+vya %#vait fiiller go fmt :

fmt.Printf("%v", projects)

Diziniz (veya burada dilim ) struct(beğenmek Project) içeriyorsa , ayrıntılarını göreceksiniz.
Daha fazla kesinlik %#viçin, değişmez değerde olduğu gibi, nesneyi Go sözdizimini kullanarak yazdırmak için kullanabilirsiniz :

%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

Temel tipler fmt.Println(projects)için yeterlidir.


Not: bir işaretçi dilimi için, yani []*Project(yerine []Project), String()görmek istediğiniz şeyi tam olarak görüntülemek için bir yöntem tanımlamanız daha iyidir (veya yalnızca işaretçi adresini göreceksiniz).
Bu play.golang örneğine bakın .


27

Bir için []stringşunları kullanabilirsiniz strings.Join():

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

18

fmt.Printf("%+q", arr)Hangisinin basılacağını tercih ederim

["some" "values" "list"]

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


1
Virgül ayırıcılı dizi nasıl elde edilir?
Shoba

¯ \ _ (ツ) _ / ¯ Kısa bir çözüm bulursanız, lütfen bu sorunun cevabını ekleyin. Bahse girerim çoğu insanın aradığı şey budur.
Pylinux

4

Bir dizinin değerlerini köşeli parantez olmadan görmek istiyorsanız, bir fmt.Sprint()vestrings.Trim()

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

İadeler:

a b
[a b]

Ancak bu çözümle baştaki parantezlerin ilk değerden ve sondaki parantezlerin son değerden itibaren kaybolacağını unutmayın.

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

İadeler:

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

Daha fazla bilgi için dizelerle ilgili belgelere bakın.


fmt.Printf (strings.Trim (fmt.Sprintf (a), "[]") sağ tarafta
parantez


1

Bir dilimdeki bilgileri yazmak için kullandığınız formatla aynı biçimde görüntülemek istiyorsanız (buna benzer bir şey ["one", "two", "three"]), işte bunun nasıl yapılacağını gösteren bir kod örneği:

package main

import (
    "fmt"
    "strings"
)

func main() {
    test := []string{"one", "two", "three"}     // The slice of data
    semiformat := fmt.Sprintf("%q\n", test)     // Turn the slice into a string that looks like ["one" "two" "three"]
    tokens := strings.Split(semiformat, " ")    // Split this string by spaces
    fmt.Printf(strings.Join(tokens, ", "))      // Join the Slice together (that was split by spaces) with commas
}

Oyun Alanına Git


0

Pretty Slice adında bir paket yazdım. Dilimleri ve destek dizilerini vb. Görselleştirmek için kullanabilirsiniz.

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)
}

Bu kod şu şekilde üretilecek ve çıkacaktır:

görüntü açıklamasını buraya girin


Daha fazla ayrıntı için lütfen okuyun: https://github.com/inancgumus/prettyslice

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.