day9接口 类型断言
parent
07d6217fa6
commit
907c9622a6
|
@ -0,0 +1,31 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// 类型断言
|
||||||
|
|
||||||
|
var w io.Writer
|
||||||
|
w = os.Stdout
|
||||||
|
f := w.(*os.File) // success: f == os.Stdout
|
||||||
|
//c := w.(*bytes.Buffer) // panic: interface holds *os.File, not *bytes.Buffer
|
||||||
|
fmt.Println(f)
|
||||||
|
rw := w.(io.ReadWriter)
|
||||||
|
w = rw
|
||||||
|
fmt.Printf("(%T, %[1]v)\n", w)
|
||||||
|
// 被断言的接口值的动态类型不能是nil,否则会引发panic
|
||||||
|
w = nil
|
||||||
|
// panic: interface conversion: interface {} is nil, not io.ReadWriter
|
||||||
|
//rw = w.(io.ReadWriter) /
|
||||||
|
fmt.Printf("(%T, %[1]v)\n", w)
|
||||||
|
|
||||||
|
// 判断断言是否成功可以使用comma-ok断言
|
||||||
|
w = os.Stdout
|
||||||
|
f, ok := w.(*os.File) // success: f == os.Stdout, ok == true
|
||||||
|
fmt.Println(ok)
|
||||||
|
f.WriteString("hello, world") // 向控制台输出hello, world
|
||||||
|
}
|
Loading…
Reference in New Issue