golang面向接口
go语言是一门面向接口的编程语言
1.接口的定义和实现
1.1接口定义
接口是一个或多个方法的集合
/* @FileName: main.go @Time : 2020/3/1 20:08 @Author : Cocktail_py */
package main
import (
"awesomeProject/dbinterface/mysql"
"fmt"
)
//定义一个数据库接口 具有读写功能
type Database interface {
Read() map[string]string
Write(form map[string]string) string
}
func main() {
var db Database
db = &mysql.Database{ }
//fmt.Println(db)
fmt.Println(db.Read())
db.Write(map[string]string{ "name": "Cocktail_py", "course": "golang"})
fmt.Println(db.Read())
}
1.2接口实现
接口的实现是隐式的
只要实现接口里的方法
/* @FileName: database.go @Time : 2020/3/1 20:08 @Author : Cocktail_py */
package mysql
type Database struct {
Content map[string]string
}
//实现Read功能
func (db *Database) Read() map[string]string {
return db.Content
}
//实现Write功能
func (db *Database) Write(form map[string]string) string {
db.Content = form
return "ok"
}
2.接口的值类型
interface{} 支持任何类型
接口变量包含:实现者的类型,实现者的值
/* @FileName: queue3.go @Time : 2020/3/1 21:08 @Author : Cocktail_py */
package queue3
//interface{} 支持任何类型
type Queue []interface{ }
func (q *Queue)Push(v interface{ }) {
*q= append(*q,v)
}
func (q *Queue)Pop()interface{ } {
head := (*q)[0]
*q = (*q)[1:]
//Type Switch
//接口变量包含:实现者的类型,实现者的值
switch head.(type) {
case int:
return head.(int)
case string:
return head.(string)
default:
panic("Not correct value")
}
return head
}
func (q * Queue) IsEmpty() bool {
return len(*q) == 0
}
3.接口的组合
/* @FileName: main.go @Time : 2020/3/1 20:08 @Author : Cocktail_py */
package main
import (
"awesomeProject/dbinterface/dbqueue"
)
//定义一个Database接口
type Database interface {
Read() map[string]string
Write(form map[string]string) string
}
//定义一个Database接口
type Queue interface {
Pop() int
Push(int)
}
//DBQueue为Database接口与Database接口的组合
type DBQueue interface {
Database
Queue
}
func getValue(dbq DBQueue) {
dbq.Read()
}
func main() {
db := &dbqueue.DbQueue{ }
getValue(db)
}
实现dbqueue所有功能
/* @FileName: dbqueue.go @Time : 2020/3/1 20:08 @Author : Cocktail_py */
package dbqueue
type DbQueue struct {
Content map[string]string
}
func (d DbQueue) Read() map[string]string {
panic("implement me")
}
func (d DbQueue) Write(form map[string]string) string {
panic("implement me")
}
func (d DbQueue) Pop() int {
panic("implement me")
}
func (d DbQueue) Push(int) {
panic("implement me")
}
还没有评论,来说两句吧...