骡马市电玩城 当前位置:首页>骡马市电玩城>正文

骡马市电玩城

发布时间:2018-09-20

原标题:GO开发:接口

五年来,发展的欣欣向荣。虽然没有再出史莱克七怪那样惊才绝艳的小怪物,但也算是功成名就,出了不少实力不俗的年轻魂师,给天斗帝国皇室增添了一批新生代魂师。

【真人娱乐注册送现金】,真人娱乐游戏送48彩金*最权威的官方网站*

朱允?傻阃罚?把嗤蹩悸堑闹苋??耸拢??ń桓?幕适灏炖恚??蹙粑槐A簦?废?浞獾赜当??ǎ?獾氐乃笆战挥苫Р抗芾聿Ψⅰ!
“我要找贝卡斯。”负责看守公司的人当然不可能放杏子和武藤双六进去了。

刘皓也有点恍然,难道洛奇亚一直不出手,回想一下他的那一次真真正正展现超神兽力量的玫击空中爆破造成破坏力之大实在是令人难以想象,难怪他不愿意动手了,就是被那个想要收藏他的人攻击之后才动怒爆发一下,只可惜那个时侯他挨了那么多次玫击都差不多极限了,打了两次空中爆破而且不是针对三圣鸟的大多数都射在空气或者是大海上的就结束了。

接口

接口定义

Interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。

type example interface{
        Method1(参数列表) 返回值列表
        Method2(参数列表) 返回值列表
        …
        var a example
        a.Method1()
}

interface类型默认是一个指针

接口实现:

a. Golang中的接口,不需要显示的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。因此,golang中没有implement类似的关键字

b. 如果一个变量含有了多个interface类型的方法,那么这个变量就实现了多个接口。

c.如果一个变量只含有了1个interface的方部分方法,那么这个变量没有实现这个接口。

接口嵌套

一个接口可以嵌套在另外的接口,如下所示

 type ReadWrite interface {
               Read(b Buffer) bool
               Write(b Buffer) bool
} 
type Lock interface {
               Lock()
               Unlock() 
} 
type File interface {
               ReadWrite
               Lock 
               Close() 
} 

实例:

package main

import "fmt"

type Reader interface {
   Read()
}

type Writer interface {
   Write()
}

type ReadWriter interface {
   Reader
   Writer
}

type File struct {
}

func (f *File) Read() {
   fmt.Println("read data")
}

func (f *File) Write() {
   fmt.Println("write data")
}

func Test(rw ReadWriter) {
   rw.Read()
   rw.Write()
}

func main() {
   var f *File
   Test(f)

   var b interface{}
   b = f
   v, ok := b.(ReadWriter)
   fmt.Println(v, ok)
}

类型断言

由于接口是一般类型,不知道具体类型,如果要转成具体类型,可以采用以下方法进行转换:

/*
var t int
var x interface{}
x = t
y = x.(int)   //转成int

var t int
var x interface{}
x = t
y, ok = x.(int)   //转成int,带检查
*/
package main

import "fmt"

type Student struct {
    Name string
    Sex  string
}

func Test(a interface{}) {
    b, ok := a.(Student)
    if ok == false {
        fmt.Println("convert failed")
        return
    }
    //b += 3
    fmt.Println(b)
}

func main()  {
    var a interface{}
    var b int
    a = b
    c := a.(int)
    fmt.Printf("%d %T
",a,a)
    fmt.Printf("%d %T
",b,b)
    fmt.Printf("%d %T
",c,c)

    var st Student = Student{
        Name: "stu01",
        Sex:  "female",
    }
    Test(st)
    fmt.Printf("%T
",st)
}

类型断言,采用type switch方式

空接口Interface{}

nterface{},接口中一个方法也没有,所以任何类型都实现了空接口,也就是任何变量都可以赋值给空接口。

var a int
var b interface{}
b  = a

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

 type Stringer interface {
        String() string 
}
var v MyStruct
if sv, ok := v.(Stringer); ok {
       fmt.Printf(“v implements String(): %s
”, sv.String()); 
} 

实现一个通用的链表类

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
   }
}

func main() {
   var link Link
   for i := 0; i < 10; i++ {
      //intLink.InsertHead(i)
      link.InsertTail(fmt.Sprintf("str %d", i))
   }
   link.Trans()
}      

编辑:石龙北

发布:2018-09-20 00:43:24

当前文章:http://thrksw.com/html/html/201207/10/72667.html

时时彩平台注册送84元现金可提现 AG gaming开户 时时彩个位软件 大嬴家国际 bet-5678.com 金盈网上娱乐 传奇娱乐怎么样现金手机版 奔驰线上娱乐官方网站

55833 77703 26981 30808 70307 3610434163 51016 21209

责任编辑:建平杜扁

随机推荐