2009-08-07 15:00:18 -06:00
|
|
|
// $G $D/$F.go && $L $F.$A && ./$A.out
|
|
|
|
|
|
|
|
// Copyright 2009 The Go Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
type Buffer int
|
|
|
|
func (*Buffer) Read() {
|
|
|
|
}
|
|
|
|
|
|
|
|
type Reader interface { Read() }
|
|
|
|
|
|
|
|
func f() *Buffer {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func g() Reader {
|
|
|
|
// implicit interface conversion in assignment during return
|
|
|
|
return f()
|
|
|
|
}
|
|
|
|
|
|
|
|
func h() (b *Buffer, ok bool) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func i() (r Reader, ok bool) {
|
|
|
|
// implicit interface conversion in multi-assignment during return
|
|
|
|
return h();
|
|
|
|
}
|
|
|
|
|
|
|
|
func fmter() (s string, i int, t string) {
|
|
|
|
return "%#x %q", 100, "hello"
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
b := g();
|
|
|
|
bb, ok := b.(*Buffer);
|
2009-09-15 13:42:24 -06:00
|
|
|
_, _, _ = b, bb, ok;
|
2009-08-07 15:00:18 -06:00
|
|
|
|
|
|
|
b, ok = i();
|
|
|
|
bb, ok = b.(*Buffer);
|
2009-09-15 13:42:24 -06:00
|
|
|
_, _, _ = b, bb, ok;
|
2009-08-07 15:00:18 -06:00
|
|
|
|
|
|
|
s := fmt.Sprintf(fmter());
|
|
|
|
if s != "0x64 \"hello\"" {
|
|
|
|
panicln(s);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|