Go学习第六天

Golang变量内置pair结构详细说明Go学习第六天_第1张图片

  • 变量包括(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
	//a = "zhangsan"
	//var allType interface{}
	//
	//allType = a
	//str,_ := allType.(string)
	//fmt.Println(allType)
	//fmt.Println(str)

	// ================================================================================
	 1.打开文件流
	 tty: pair
	//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
	//var r io.Reader
	 r: pair
	//r = tty
	//
	 3.写入文件
	 w: pair
	//var w io.Writer
	 w: pair
	//w = r.(io.Writer)
	//
	//w.Write([]byte("w: pair"))

	// ================================================================================
	// b: pair
	b := &BookOne{}
	// b: pair
	var r Reader
	// r: pair
	r = b
	r.ReadBook()


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





你可能感兴趣的:(Go学习笔记,golang,学习,开发语言)