43 lines
643 B
Go
43 lines
643 B
Go
// +build ignore
|
|
|
|
// This is a slice of the fmt package.
|
|
|
|
package main
|
|
|
|
type pp struct {
|
|
field interface{}
|
|
}
|
|
|
|
func newPrinter() *pp {
|
|
return new(pp)
|
|
}
|
|
|
|
func Fprintln(a ...interface{}) {
|
|
p := newPrinter()
|
|
p.doPrint(a, true, true)
|
|
}
|
|
|
|
func Println(a ...interface{}) {
|
|
Fprintln(a...)
|
|
}
|
|
|
|
func (p *pp) doPrint(a []interface{}, addspace, addnewline bool) {
|
|
print(a[0]) // @types S | string
|
|
stringer := a[0].(interface {
|
|
String() string
|
|
})
|
|
|
|
stringer.String()
|
|
print(stringer) // @types S
|
|
}
|
|
|
|
type S int
|
|
|
|
func (S) String() string { return "" }
|
|
|
|
func main() {
|
|
Println("Hello, World!", S(0))
|
|
}
|
|
|
|
// @calls (*main.pp).doPrint -> (main.S).String
|