golang 接口相关知识

1.一个简单的实现

package main

import (
	"errors"
	"fmt"
)

type IDatabase interface{
	Connect() error // 接口不指定参数,返回error
	Disconnect() error
}

type Mysql struct{
	DBname string
	isConnect bool
}

// 实现IDatabase接口
func (mysql *Mysql)Connect()error{
	fmt.Println("mysql name",mysql.DBname)
	mysql.isConnect = true
	if mysql.isConnect{
		fmt.Println("mysql Connect!")
		return nil
	}
	return errors.New("Connect failure!")
}

func (mysql *Mysql)Disconnect()error{
	mysql.isConnect = false
	if !mysql.isConnect{
		fmt.Println("mysql DisConnect!")
		return nil
	}
	return errors.New("Disconnect failure!")	
	
}

type Redis struct{
	DBname string
	isConnect bool
}

func (redis *Redis)Connect()error{
	fmt.Println("redis name:",redis.DBname)
	redis.isConnect = true
	if redis.isConnect{
		fmt.Println("redis Connect!")
		return nil
	}
	return errors.New("Connect failure!")	
}

func (redis *Redis)Disconnect()error{
	redis .isConnect = false
	if !redis .isConnect{
		fmt.Println("redis DisConnect!")
		return nil
	}
	return errors.New("Disconnect failure!")	

}

func HandleDB(db IDatabase){
	//fmt.Println(db.DBname)
	db.Connect()
	db.Disconnect()
}

func main(){
	//面向对象编程
	mysql :=&Mysql{
		DBname:"mysql",
		isConnect:false,
	}

	redis:=Redis{
		DBname:"Redis",
		isConnect:false,
	}
	
	// 传给结构的参数必须是 引用
	HandleDB(mysql) 
	HandleDB(&redis)
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值