Go学习第六天

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 main

import "fmt"

type 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
	 pair<static type, value:"zhangsan">
	//a = "zhangsan"
	//var allType interface{}
	//
	//allType = a
	//str,_ := allType.(string)
	//fmt.Println(allType)
	//fmt.Println(str)

	// ================================================================================
	 1.打开文件流
	 tty: pair<type:*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: pair<type: , value: >
	//var r io.Reader
	 r: pair<type:*os.File, value:"/Users/a1234/Desktop/test/test.docx"文件描述符>
	//r = tty
	//
	 3.写入文件
	 w: pair<type: , value: >
	//var w io.Writer
	 w: pair<type:*os.File, value:"/Users/a1234/Desktop/test/test.docx"文件描述符>
	//w = r.(io.Writer)
	//
	//w.Write([]byte("w: pair<type:*os.File, value:\"/Users/a1234/Desktop/test/test.docx\"文件描述符>"))

	// ================================================================================
	// b: pair<type:BookOne, value:BookOne{}地址>
	b := &BookOne{}
	// b: pair<type: , value: >
	var r Reader
	// r: pair<type:BookOne, value:BookOne{}地址>
	r = b
	r.ReadBook()


	var w Writer
	// r: pair<type:BookOne, value:BookOne{}地址>
	w = r.(Writer)// r.(Writer)断言为什么会成功,因为w r具体的type是一致的
	w.WriterBook()
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值