pair和reflect

This commit is contained in:
wandoubaba 2024-11-18 12:25:02 +08:00
parent 320ca10ac9
commit b872f182f3
2 changed files with 77 additions and 0 deletions

View File

@ -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<type: Book, value: book{}地址>
b := &Book{}
// r: pair<type: , value: >
var r Reader
// r: pair<type: Book, value: book{}地址>
r = b
r.ReadBook()
var w Writer
// r: pair<type: Book, value: book{}地址>
w = r.(Writer) // 此处的断方为什么会成功因为w r的具体type是一致的
w.WriteBook()
}

View File

@ -0,0 +1,37 @@
package main
import (
"fmt"
"io"
"os"
)
func main() {
var a string
// pair<statictype: string, value: "aceld">
a = "aceld"
// pair<type: string, value "aceld">
var allType interface{}
allType = a
str, _ := allType.(string)
fmt.Println(str)
// type: pair<type:*os.File, value: "/dev/tty"文件描述符>
tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0)
if err != nil {
fmt.Println("open file error", err)
return
}
// r: pair<type: , value: >
var r io.Reader
// r: pair<type:*os.File , value:"/dev/tty"文件描述符>
r = tty
// w: pair<type: , value: >
var w io.Writer
// w: pair<type:*os.File, value:"/dev/tty"文件描述符>
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"))
}