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);
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);
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
}
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"}
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.
Sẽ tốt hơn nếu mã ví dụ của bạn cũng hiển thị '% + v' và'% v'. – AndrewN
Để 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")
}
}
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
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}}
}
https://github.com/davecgh/go-spew
Go-spew thực hiện một máy in khá sâu cho các cấu trúc dữ liệu Go để hỗ trợ gỡ lỗi.
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