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