github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/test/fixedbugs/bug184.go (about) 1 // run 2 3 // Copyright 2009 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 package main 8 9 import "fmt" 10 11 type Buffer int 12 13 func (*Buffer) Read() {} 14 15 type Reader interface { 16 Read() 17 } 18 19 func f() *Buffer { return nil } 20 21 func g() Reader { 22 // implicit interface conversion in assignment during return 23 return f() 24 } 25 26 func h() (b *Buffer, ok bool) { return } 27 28 func i() (r Reader, ok bool) { 29 // implicit interface conversion in multi-assignment during return 30 return h() 31 } 32 33 func fmter() (s string, i int, t string) { return "%#x %q", 100, "hello" } 34 35 func main() { 36 b := g() 37 bb, ok := b.(*Buffer) 38 _, _, _ = b, bb, ok 39 40 b, ok = i() 41 bb, ok = b.(*Buffer) 42 _, _, _ = b, bb, ok 43 44 s := fmt.Sprintf(fmter()) 45 if s != "0x64 \"hello\"" { 46 println(s) 47 panic("fail") 48 } 49 }