Cách in giá trị của các lát


103

Tôi muốn xem các giá trị trong phần này. Làm thế nào tôi có thể in chúng?

projects []Project  

9
ngoài ra fmt.Println(projects)?
Not_a_Golfer

4
Ngoài ra: [] Dự án là một lát, không phải là một mảng: golang.org/blog/go-slices-usage-and-internals
elithrar

Tại sao tất cả các bạn cho tôi -1?
fnr

2
@fnr xin lỗi, nhưng những người đánh giá có lẽ cảm thấy câu hỏi này được tài liệu giải quyết dễ dàng. Tôi đã cập nhật câu trả lời của mình để cho thấy nó không phải lúc nào cũng rõ ràng. Bạn có thể để lại câu hỏi của mình, nó là một câu hỏi hợp lệ.
VonC

2
@fnr - a -1 trên trang web này có nghĩa là câu hỏi: "không cho thấy nỗ lực nghiên cứu; nó không rõ ràng hoặc không hữu ích". Vì vậy, tôi thấy bạn đã gắn thẻ câu hỏi của mình là "go" và "array" và muốn biết "cách in" chúng. Nếu tôi truy cập Google.com và tìm kiếm "mảng hướng dẫn ngôn ngữ lập trình", tôi sẽ tìm thấy một số tài nguyên bao gồm tài nguyên này , có vẻ như nó có thể hữu ích. Vì vậy, nếu điều này có ích, nó cho thấy bạn đã không nghiên cứu nó nhiều trước khi đăng. Nếu điều này không hữu ích, bạn cần phải gọi ra các trang web như thế này mà bạn đã tìm kiếm và giải thích lý do tại sao nó không hữu ích.
Mike

Câu trả lời:


171

Bạn có thể thử %v, %+vhoặc %#vđộng từ của fmt đi :

fmt.Printf("%v", projects)

Nếu mảng của bạn (hoặc lát cắt ở đây ) chứa struct(giống như Project), bạn sẽ thấy chi tiết của chúng.
Để chính xác hơn, bạn có thể sử dụng %#vđể in đối tượng bằng cú pháp Go, như đối với một chữ:

%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

Đối với các loại cơ bản, fmt.Println(projects)là đủ.


Lưu ý: đối với một phần của con trỏ, nghĩa là []*Project(thay vì []Project), bạn nên xác định một String()phương thức để hiển thị chính xác những gì bạn muốn xem (hoặc bạn sẽ chỉ thấy địa chỉ con trỏ).
Xem ví dụ play.golang này .


26

Đối với một []string, bạn có thể sử dụng strings.Join():

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

17

Tôi thích fmt.Printf("%+q", arr)cái nào sẽ in hơn

["some" "values" "list"]

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


1
Làm cách nào để lấy mảng có dấu phân cách bằng dấu phẩy ??
Shoba

¯ \ _ (ツ) _ / ¯ Nếu bạn tìm thấy giải pháp ngắn, vui lòng thêm nó làm câu trả lời cho câu hỏi này. Tôi cá rằng đó là điều mà hầu hết mọi người đang tìm kiếm.
Pylinux

4

Nếu bạn chỉ muốn xem các giá trị của một mảng không có dấu ngoặc, bạn có thể sử dụng kết hợp fmt.Sprint()strings.Trim()

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

Lợi nhuận:

a b
[a b]

Hãy lưu ý rằng với giải pháp này, bất kỳ dấu ngoặc đứng đầu nào sẽ bị mất khỏi giá trị đầu tiên và bất kỳ dấu ngoặc kép nào sẽ bị mất khỏi giá trị cuối cùng

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

Lợi nhuận:

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

Để biết thêm thông tin, hãy xem tài liệu về chuỗi.Trim ()


fmt.Printf (string.Trim (fmt.Sprintf (a), "[]") bị thiếu dấu ngoặc ở phía bên tay phải. Cảm ơn vì đoạn mã.
pdbrito

2

fmt.Printf()cũng được, nhưng đôi khi tôi thích sử dụng gói in đẹp .

import "github.com/kr/pretty"
pretty.Print(...)

0

(Đã tạo tài khoản để bình luận về câu trả lời hiện có, nhưng tôi không thể bình luận cho đến khi có đủ đại diện)

Nếu bạn muốn xem thông tin trong Slice ở cùng định dạng mà bạn sử dụng để nhập nó vào (một số như ["một", "hai", "ba"]), đây là một ví dụ mã cho thấy cách thực hiện điều đó :

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


3
Chào mừng bạn đến với Stack Overflow! Miễn là câu trả lời của bạn đóng góp một cái gì đó mới cho chủ đề, nó sẽ thuộc về phần câu trả lời. Không cần phải biện minh cho điều đó bằng cách nói rằng đại diện của bạn quá thấp; Bài đăng của bạn ở đúng nơi nó thuộc về :) Điều đó đang được nói, thường được ưu tiên đưa bất kỳ mã nào bạn đang sử dụng trực tiếp vào câu trả lời hơn là một liên kết đến một trang web khác. Vui lòng để lại liên kết, nhưng hãy sao chép mã vào câu trả lời của bạn. Cảm ơn!
Das_Geek

0

Bạn có thể sử dụng gói 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)
}

Mã này sẽ được sản xuất và xuất ra như thế này:

nhập mô tả hình ảnh ở đây


Để biết thêm chi tiết, vui lòng đọc: https://github.com/inancgumus/prettyslice

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.