Go语言学习Day06

今天学习了接口等东西。

package main

import (
	"fmt"
	"math"
)

type I interface {
	M()
}

type T struct {
	S string
}

func (t *T)M(){
	fmt.Println(t.S)
}

type F float64

func (t F)M(){
	fmt.Println(t)
}

func describe(i I){
	fmt.Printf("(%v,%T)\n",i,i)
}

func main(){
	var i I

	i = &T{"Hello"}
	describe(i)
	i.M()

	i = F(math.Pi)
	describe(i)
	i.M()
}

接下来是今天的学习代码:

package main

import (
	"fmt"
)

type I interface {
	M()
}

type T struct {
	S string
}

func (t *T)M(){
	if t==nil{
		fmt.Println("<nil>")
		return
	}
	fmt.Println(t.S)
}

func main(){
	var i I
	var t *T
	i = t
	describe(i)
	i.M()

	i = &T{"hello"}
	describe(i)
	i.M()

}

func describe(i I)  {
	fmt.Printf("(%v,%T)\n",i,i)
}

package main

import "fmt"

type I interface {
	M()
}

func main(){
	var i I
	describe(i)
	i.M() //当未具体实现接口的方法时候,会自动报错

}

func describe(i I)  {
	fmt.Printf("(%v,%T)\n",i,i)
}
package main
import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := strings.NewReader("Hello, Reader!")

	b := make([]byte, 8)
	for {
		n, err := r.Read(b)
		fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
		fmt.Printf("b[:n] = %q\n", b[:n])
		if err == io.EOF {
			break
		}
	}
}
//接口断言
//即判断数据类型
package main

import (
	"fmt"
)

func main(){
	var i interface{} = "hello"
	s:=i.(string)
	fmt.Println(s)

	s,ok :=i.(string)
	fmt.Println(s,ok)
	f,ok := i.(float64)
	fmt.Println(f,ok)
}

package main

import "fmt"

func do(i interface{}) {
	switch v := i.(type) {
	case int:
		fmt.Printf("Twice %v is %v\n", v, v*2)
	case string:
		fmt.Printf("%q is %v bytes long\n", v, len(v))
	default:
		fmt.Printf("I don't know about type %T!\n", v)
	}
}

func main() {
	do(21)
	do("hello")
	do(true)
}
package main

import "fmt"

//声明接口
type I interface {
	M()
}

//声明结构体
type T struct {
	S string
}

//类型T实现了M方法,但无需显示调用
func (t T)M(){
	fmt.Println(t.S)
}

func main() {
	var i I = T{"hello"}
	i.M()
}

就是现在基础教程还剩最后一个并发还没学,在我看来,这可能是Go语言的灵魂了,等有时间再好好总结一下Go关于接口的一些重要知识点!接下来要取准备搞Python的项目了,希望今天能把这一块拿下来,加油加油加油!!!

猜你喜欢

转载自blog.csdn.net/Giser_D/article/details/92375405