r1笔记day20_01 Go Interface4

判断一个变量是否实现了指定接口:

定义一个接口变量,然后将类型赋值给接口变量,再用 ok去判断是否实现了指定接口。有点像 interface里面装了int一样,虽然type输出是int,但是是用 空的interface{} 装的。

func main() {
	//定义一个变量,由于file实现了rw方法,使用,可以调用接口的方法。
	var f File
	Test(&f)
	var t interface{}
	t = f    //空的接口来接收
	if v, ok := t.(ReadWriter); ok {
		fmt.Println(ok, v)
	}
}

go实现一个通用的链表类接口

F:.
└─main
        link.go
        main.go

link.go

package main

import "fmt"

type LinkNode struct {
	data interface{}
	next *LinkNode
}

type Link struct {
	head *LinkNode
	tail *LinkNode
}

//头部插入
func (p *Link) InsertHead(data interface{}) {
	node := &LinkNode{
		data: data,
		next: nil,
	}
	if p.tail == nil && p.head == nil {
		p.tail = node
		p.head = node
		return
	}
	node.next = p.head
	p.head = node
}

//尾部插入
func (p *Link) InsertTail(data interface{}) {
	node := &LinkNode{
		data: data,
		next: nil,
	}
	if p.tail == nil && p.head == nil {
		p.tail = node
		p.head = node
		return
	}
	p.tail.next = node
	p.tail = node
}

func (p *Link) Trans() {
	q := p.head
	for q != nil {
		fmt.Println(q.data)
		q = q.next
	}
}

main.go(也就是写一个测试的)

package main

import "fmt"

func main() {
	fmt.Println("=============HEAD====int==============")
	var intLinkhead Link
	for i := 0; i < 10; i++ {
		intLinkhead.InsertHead(i)
	}
	intLinkhead.Trans()
	fmt.Println("=============TAIL===string===============")
	var intLinktail Link
	for i := 0; i < 10; i++ {
		intLinktail.InsertTail(fmt.Sprintf("str %d", i))
	}
	intLinktail.Trans()
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值