2014-09-25 11 views
7

Làm thế nào để in một bản đồ, cấu trúc hoặc bất cứ điều gì một cách dễ đọc?in biến có thể đọc được bằng golang

Với PHP bạn có thể để này

echo '<pre>'; 
print_r($var); 
echo '</pre>'; 

hoặc

header('content-type: text/plain'); 
print_r($var); 
+0

Nếu bạn đang tạo HTML, đừng làm điều này với các câu lệnh Fprintf() rõ ràng trừ khi bạn thực sự biết mình đang làm gì. Ưu tiên 'html/template', thoát đúng cách. Mã mà bạn đã viết ở trên là dễ bị tấn công tiêm tầm thường. Đừng làm thế. : P – dyoo

Trả lời

0

Bạn có thể sử dụng fmt.Println() để in. Bạn sẽ cần nhập gói "fmt" (xem ví dụ bên dưới). Nhiều loại dữ liệu có thể được in ra khỏi hộp. Nếu bạn muốn in một bản in có thể đọc được cho các loại tùy chỉnh, bạn cần xác định phương thức String() string cho loại đó.

Để thử ví dụ sau đây, bấm vào đây: http://play.golang.org/p/M6_KnRJ3Da

package main 

import "fmt" 

// No `String()` method 
type UnstringablePerson struct { 
    Age int 
    Name string 
} 

// Has a `String()` method 
type StringablePerson struct { 
    Age int 
    Name string 
} 

// Let's define a String() method for StringablePerson, so any instances 
// of StringablePerson can be printed how we like 
func (p *StringablePerson) String() string { 
    return fmt.Sprintf("%s, age %d", p.Name, p.Age) 
} 

func main() { 
    // Bobby's type is UnstringablePerson; there is no String() method 
    // defined for this type, so his printout will not be very friendly 
    bobby := &UnstringablePerson{ 
     Age: 10, 
     Name: "Bobby", 
    } 

    // Ralph's type is StringablePerson; there *is* a String() method 
    // defined for this type, so his printout *will* be very friendly 
    ralph := &StringablePerson{ 
     Age: 12, 
     Name: "Ralph", 
    } 
    fmt.Println(bobby) // prints: &{10 Bobby} 
    fmt.Println(ralph) // prints: Ralph, age 12 
} 
6

Sử dụng các gói Go fmt. Ví dụ,

package main 

import "fmt" 

func main() { 
    variable := "var" 
    fmt.Println(variable) 
    fmt.Printf("%#v\n", variable) 
    header := map[string]string{"content-type": "text/plain"} 
    fmt.Println(header) 
    fmt.Printf("%#v\n", header) 
} 

Output:

var 
"var" 
map[content-type:text/plain] 
map[string]string{"content-type":"text/plain"} 

Package fmt

import "fmt" 

Tổng quan

Gói cụ fmt định dạng I/O với các chức năng tương tự như printf và scanf C . Các 'động từ' định dạng có nguồn gốc từ C nhưng là đơn giản hơn.

+4

Sẽ tốt hơn nếu mã ví dụ của bạn cũng hiển thị '% + v' và'% v'. – AndrewN

0

Để gỡ lỗi tôi sử dụng này:

func printVars(w io.Writer, writePre bool, vars ...interface{}) { 
    if writePre { 
     io.WriteString(w, "<pre>\n") 
    } 
    for i, v := range vars { 
     fmt.Fprintf(w, "» item %d type %T:\n", i, v) 
     j, err := json.MarshalIndent(v, "", " ") 
     switch { 
     case err != nil: 
      fmt.Fprintf(w, "error: %v", err) 
     case len(j) < 3: // {}, empty struct maybe or empty string, usually mean unexported struct fields 
      w.Write([]byte(html.EscapeString(fmt.Sprintf("%+v", v)))) 
     default: 
      w.Write(j) 
     } 
     w.Write([]byte("\n\n")) 
    } 
    if writePre { 
     io.WriteString(w, "</pre>\n") 
    } 
} 

playground

1
fmt.Printf("%v", whatever) 

Trong Go là như print_r(), var_dump(), var_export() trong PHP. (Các %v là một phần quan trọng.)

Good Luck

2

Tôi nghĩ rằng trong nhiều trường hợp, việc sử dụng "% v" là đủ ngắn gọn:

fmt.Printf("%v", myVar) 

Từ trang tài liệu gói fmt của:

% v giá trị theo định dạng mặc định. khi in cấu trúc, lá cờ cộng (% + v) cho biết thêm tên trường

% # v một đại diện Go-cú pháp giá trị

Dưới đây là một ví dụ:

package main 

import "fmt" 

func main() { 
    // Define a struct, slice and map 
    type Employee struct { 
     id int 
     name string 
     age int 
    } 
    var eSlice []Employee 
    var eMap map[int]Employee 

    e1 := Employee{1, "Alex", 20} 
    e2 := Employee{2, "Jack", 30} 
    fmt.Printf("%v\n", e1) 
    // output: {1 Alex 20} 
    fmt.Printf("%+v\n", e1) 
    // output: {id:1 name:Alex age:20} 
    fmt.Printf("%#v\n", e1) 
    // output: main.Employee{id:1, name:"Alex", age:20} 

    eSlice = append(eSlice, e1, e2) 
    fmt.Printf("%v\n", eSlice) 
    // output: [{1 Alex 20} {2 Jack 30}] 
    fmt.Printf("%#v\n", eSlice) 
    // output: []main.Employee{main.Employee{id:1, name:"Alex", age:20}, main.Employee{id:2, name:"Jack", age:30}} 

    eMap = make(map[int]Employee) 
    eMap[1] = e1 
    eMap[2] = e2 
    fmt.Printf("%v\n", eMap) 
    // output: map[1:{1 Alex 20} 2:{2 Jack 30}] 
    fmt.Printf("%#v\n", eMap) 
    // output: map[int]main.Employee{1:main.Employee{id:1, name:"Alex", age:20}, 2:main.Employee{id:2, name:"Jack", age:30}} 
} 
Các vấn đề liên quan