diff --git a/bilibili/aceid/struct/pair/test.go b/bilibili/aceid/struct/pair/test.go new file mode 100644 index 0000000..2554415 --- /dev/null +++ b/bilibili/aceid/struct/pair/test.go @@ -0,0 +1,40 @@ +package main + +import "fmt" + +type Reader interface { + ReadBook() +} + +type Writer interface { + WriteBook() +} + +// 具体类型 +type Book struct { +} + +func (this *Book) ReadBook() { + fmt.Println("Read a Book") +} + +func (this *Book) WriteBook() { + fmt.Println("Write a Book") +} + +func main() { + // b: pair + b := &Book{} + + // r: pair + var r Reader + // r: pair + r = b + + r.ReadBook() + + var w Writer + // r: pair + w = r.(Writer) // 此处的断方为什么会成功?因为w r的具体type是一致的 + w.WriteBook() +} diff --git a/bilibili/aceid/struct/reflect/test.go b/bilibili/aceid/struct/reflect/test.go new file mode 100644 index 0000000..eea75b7 --- /dev/null +++ b/bilibili/aceid/struct/reflect/test.go @@ -0,0 +1,37 @@ +package main + +import ( + "fmt" + "io" + "os" +) + +func main() { + var a string + // pair + a = "aceld" + + // pair + var allType interface{} + allType = a + str, _ := allType.(string) + fmt.Println(str) + + // type: pair + tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0) + if err != nil { + fmt.Println("open file error", err) + return + } + + // r: pair + var r io.Reader + // r: pair + r = tty + // w: pair + var w io.Writer + // w: pair + w = r.(io.Writer) + w.Write([]byte("HELLO THIS is A TEST!!!\n")) + r.(io.Writer).Write([]byte("HELLO THIS is A TEST, too!!!\n")) +}