fmt.Printf("%v\n", data_interface) , . , .
: http://golang.org/src/pkg/fmt/print.go?h=printArg#L708
printArg - :
return p.printReflectValue(reflect.ValueOf(arg), verb, plus, goSyntax, depth
"reflection": http://golang.org/pkg/reflect/ . p.printReflectValue : http://golang.org/src/pkg/fmt/print.go?h=printArg#L862 , . printValue .
, , . , , .
package main
import (
"fmt"
"reflect"
)
type Player string
type Board struct {
Tboard [9]string
Player1 Player
Player2 Player
}
func makeBoard() *Board {
b := &Board{Tboard: [9]string{}}
for x := 0; x < len(b.Tboard); x++ {
b.Tboard[x] = "X"
fmt.Println(b.Tboard[x])
}
b.Player1 = "George"
b.Player2 = "Tim"
fmt.Printf("Len: %v\n", len(b.Tboard))
fmt.Printf("Contents: %v\n", b)
fmt.Printf("Syntax: %#v\n", b)
fmt.Printf("Type: %T\n", b)
fmt.Println("Board:", b.Tboard)
return b
}
func main() {
myBoard := makeBoard()
v := reflect.ValueOf(*myBoard)
t := v.Type()
fmt.Printf("Value: %v %T\n", v, v)
fmt.Printf("Type: %v %T\n", t, t)
if t == reflect.TypeOf(*myBoard) {
var b2 Board
b2 = v.Interface().(Board)
fmt.Printf("v converted back to: %#v\n", b2)
} else {
fmt.Printf("t is not recognized")
}
}
, v - main.Board, , Board.
, , .