zoukankan      html  css  js  c++  java
  • golang 学习笔记 -- struct interface的使用

    一个 interface 类型定义了一个方法集做接口。 

    区分goalng的方法和函数

    func go() {
        fmt.Println('go to home')
    }
    

     这是函数

    type car struct{
        name string
        num  int
    }
     
    func (g car) move(){
        fmt.Println("driver car ,xiaorui.cc ")
    }
    

    car是一个结构,后面的move()函数是car结构体的一个方法。 如果move的方法类型是g *car,那么g是指针。 初始化了car后,可以直接用car的对象调用move方法。

    另外在golang里某个函数想调用其他函数有这么几个用法。 方法,基于方法的interface接口,直接传参传对象。

    //使用type定义一个interface
     
    type Xiaorui interface {
        Play()
        Start(msg string)
    }
     
    // 定义a为空接口
    var a interface{}
    var i int = 5
    s := "Hello world"
    // a可以存储任意类型的数值
    a = i
    a = s
    

    一个函数把interface{}作为参数,那么他可以接受任意类型的值作为参数,如果一个函数返回interface{},那么也就可以返回任意类型的值。

    这是一个golang interface的实例代码。

    package main
    
    import "fmt"
    
    type S struct {
    	i int
    }
    
    func (p *S) Get() int {
    	return p.i
    }
    func (p *S) Put(v int) {
    	p.i = v
    }
    
    type I interface {
    	Get() int
    	Put(int)
    }
    
    func f1(p I) {
    	fmt.Println(p.Get())
    	p.Put(888)
    }
    
    func f2(p interface{}) {
    	switch t := p.(type) {
    	case int:
    		fmt.Println("this is int number")
    	case I:
    		fmt.Println("I:", t.Get())
    	default:
    		fmt.Println("unknow type")
    	}
    }
    
    //指针修改原数据
    func dd(a *S) {
    	a.Put(999)
    	fmt.Println(a.Get(), "in dd func")
    }
    
    //临时数据
    func aa(a S) {
    	a.Put(2222)
    	fmt.Println(a.Get(), "in aa func")
    }
    
    func main() {
    	var s S
    	s.Put(333)
    	fmt.Println(s.Get())
    	f1(&s)
    	fmt.Println(s.Get())
    	f2(&s)
    	dd(&s)
    	fmt.Println(s.Get())
    	aa(s)
    	fmt.Println(s.Get())
    
    }
    

      运行后的结果是:

    333
    333
    888
    I: 888
    999 in dd func
    999
    2222 in aa func
    999
    

      

     

  • 相关阅读:
    bzoj1066: [SCOI2007]蜥蜴(最大流)
    bzoj4551: [Tjoi2016&Heoi2016]树(树链剖分)
    bzoj2663: [Beijing wc2012]灵魂宝石(二分+匈牙利)
    bzoj2150: 部落战争(匈牙利)
    bzoj1797: [Ahoi2009]Mincut 最小割(最小割+强联通tarjan)
    bzoj3993: [SDOI2015]星际战争(网络流)
    bzoj3504: [Cqoi2014]危桥(网络流)
    bzoj3212: Pku3468 A Simple Problem with Integers(线段树)
    bzoj4590: [Shoi2015]自动刷题机(二分答案)
    [WC2013]糖果公园
  • 原文地址:https://www.cnblogs.com/saryli/p/11674329.html
Copyright © 2011-2022 走看看