• 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
    

      

     

  • 相关阅读:
    The password has to have a minimum of 6 characters, including at least 1 small letter, 1 uppercase letter and 1 number
    Angular i18n的技术分享、踩过的坑
    转: .Net 4.0 ExpandoObject 使用
    min_square
    KALMAN PYTHON
    双系统安装 win + ubuntu
    docker
    drl
    shell
    导航定位方案
  • 原文地址:https://www.cnblogs.com/saryli/p/11674329.html
Copyright © 2020-2023  润新知