วิธีพิมพ์ค่าของชิ้น


103

ฉันต้องการดูค่าที่อยู่ในชิ้นส่วน ฉันจะพิมพ์ได้อย่างไร?

projects []Project  

10
นอกจากนี้fmt.Println(projects)?
Not_a_Golfer

4
นอกจากนี้: [] โปรเจ็กต์
elithrar

ทำไมคุณถึงให้ฉัน -1?
fnr

2
@fnr ขออภัย แต่ผู้ตรวจสอบอาจรู้สึกว่าคำถามนั้นแก้ไขได้ง่ายโดยเอกสาร ฉันได้อัปเดตคำตอบเพื่อแสดงว่ามันไม่ชัดเจนเสมอไป คุณสามารถทิ้งคำถามไว้ได้มันเป็นคำถามที่ถูกต้อง
VonC

2
@fnr - a -1 ในไซต์นี้หมายถึงคำถาม: "ไม่ได้แสดงถึงความพยายามในการวิจัย แต่ไม่ชัดเจนหรือไม่มีประโยชน์" ดังนั้นฉันเห็นคุณติดแท็กคำถามของคุณ "go" และ "อาร์เรย์" และต้องการทราบ "วิธีการพิมพ์" ถ้าฉันไปที่ Google.com และค้นหา "go programming language tutorial arrays" ฉันพบแหล่งข้อมูลมากมายรวมถึงสิ่งนี้ซึ่งดูเหมือนว่าอาจช่วยได้ ดังนั้นหากวิธีนี้ช่วยได้แสดงว่าคุณไม่ได้ค้นคว้าข้อมูลก่อนโพสต์มากนัก หากวิธีนี้ไม่ได้ผลคุณต้องเรียกไซต์เช่นนี้ที่คุณค้นหาและอธิบายว่าเหตุใดจึงไม่เป็นประโยชน์
Mike

คำตอบ:


172

คุณสามารถลอง%v, %+vหรือ%#vคำกริยาของfmt ไป :

fmt.Printf("%v", projects)

หากอาร์เรย์ของคุณ (หรือที่นี่ slice ) มีstruct(like Project) คุณจะเห็นรายละเอียด
เพื่อความแม่นยำยิ่งขึ้นคุณสามารถใช้%#vพิมพ์วัตถุโดยใช้ Go-syntax สำหรับลิเทอรัล:

%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

สำหรับประเภทพื้นฐานfmt.Println(projects)ก็เพียงพอแล้ว


หมายเหตุ: สำหรับส่วนของพอยน์เตอร์นั่นคือ[]*Project(แทน[]Project) คุณควรกำหนดString()วิธีการเพื่อให้แสดงสิ่งที่คุณต้องการเห็นได้ชัดเจน (หรือคุณจะเห็นเฉพาะที่อยู่ของตัวชี้)
ดูตัวอย่าง play.golangนี้



18

ฉันชอบfmt.Printf("%+q", arr)ที่จะพิมพ์

["some" "values" "list"]

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


1
วิธีรับอาร์เรย์ด้วยตัวคั่นลูกน้ำ ??
Shoba

¯ \ _ (ツ) _ / ¯หากคุณพบวิธีแก้ปัญหาสั้น ๆ โปรดเพิ่มเป็นคำตอบสำหรับคำถามนี้ ฉันกำลังเดิมพันนั่นคือสิ่งที่คนส่วนใหญ่กำลังมองหา
Pylinux

4

หากคุณต้องการดูค่าของอาร์เรย์โดยไม่มีวงเล็บคุณสามารถใช้การรวมกันของfmt.Sprint()และstrings.Trim()

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

ผลตอบแทน:

a b
[a b]

โปรดทราบว่าด้วยวิธีนี้วงเล็บนำหน้าจะสูญหายไปจากค่าแรกและวงเล็บต่อท้ายจะสูญหายไปจากค่าสุดท้าย

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

ผลตอบแทน:

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

สำหรับข้อมูลเพิ่มเติมโปรดดูเอกสารสำหรับstrings.Trim ()


fmt.Printf (strings.Trim (fmt.Sprintf (a), "[]") ไม่มีแผงด้านขวามือขอบคุณสำหรับข้อมูลโค้ด
pdbrito


1

หากคุณต้องการดูข้อมูลในรูปแบบเดียวกันกับที่คุณใช้พิมพ์ (บางอย่างเช่น["one", "two", "three"]) นี่คือตัวอย่างโค้ดที่แสดงวิธีการดำเนินการ:

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
}

ไปที่ Playground


0

ฉันเขียนแพ็คเกจชื่อ Pretty Slice คุณสามารถใช้เพื่อแสดงภาพชิ้นส่วนและอาร์เรย์สำรองของพวกเขาเป็นต้น

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

รหัสนี้จะผลิตและส่งออกเช่นนี้:

ป้อนคำอธิบายภาพที่นี่


สำหรับรายละเอียดเพิ่มเติมโปรดอ่าน: https://github.com/inancgumus/prettyslice

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.