建设部网站官网证书编号,企业网站管理系统项目文档,设置网站域名解析和网站主机绑定,学做衣服的网站Golang变量内置pair结构详细说明
变量包括#xff08;type, value#xff09;两部分type 包括 static type和concrete type. 简单来说 static type是你在编码是看见的类型(如int、string)#xff0c;concrete type是runtime系统看见的类型类型断言能否成功#xff0c;取决…Golang变量内置pair结构详细说明
变量包括type, value两部分type 包括 static type和concrete type. 简单来说 static type是你在编码是看见的类型(如int、string)concrete type是runtime系统看见的类型类型断言能否成功取决于变量的concrete type而不是static type. 因此一个 reader变量如果它的concrete type也实现了write方法的话它也可以被类型断言为writer. value是实际变量值type是实际变量的类型。一个interface{}类型的变量包含了2个指针一个指针指向值的类型【对应concrete type】另外一个指针指向实际的值【对应value】。 type: static || concrete 要么是静态类型要么是具体类型 pair type value package mainimport fmttype Reader interface {ReadBook()
}type Writer interface {WriterBook()
}// 具体类型-结构体
type BookOne struct {
}// 重写ReadBook
func (this *BookOne) ReadBook() {fmt.Println(Read a Book)
}
// 重写WriterBook
func (this *BookOne) WriterBook() {fmt.Println(Writer a Book)
}func main() {// //var a string pairstatic type, value:zhangsan//a zhangsan//var allType interface{}////allType a//str,_ : allType.(string)//fmt.Println(allType)//fmt.Println(str)// 1.打开文件流 tty: pairtype:*os.File, value:/Users/a1234/Desktop/test/test.docx文件描述符//tty, err : os.OpenFile(/Users/a1234/Desktop/test/test.txt, os.O_RDWR, 0)//if err ! nil {// fmt.Println(open file error, err)// return//}// 2.读取文件 r: pairtype: , value: //var r io.Reader r: pairtype:*os.File, value:/Users/a1234/Desktop/test/test.docx文件描述符//r tty// 3.写入文件 w: pairtype: , value: //var w io.Writer w: pairtype:*os.File, value:/Users/a1234/Desktop/test/test.docx文件描述符//w r.(io.Writer)////w.Write([]byte(w: pairtype:*os.File, value:\/Users/a1234/Desktop/test/test.docx\文件描述符))// // b: pairtype:BookOne, value:BookOne{}地址b : BookOne{}// b: pairtype: , value: var r Reader// r: pairtype:BookOne, value:BookOne{}地址r br.ReadBook()var w Writer// r: pairtype:BookOne, value:BookOne{}地址w r.(Writer)// r.(Writer)断言为什么会成功因为w r具体的type是一致的w.WriterBook()
}