go项目发送接口设计流程
¶Go发送接口设计的整体结构
¶service层实现
分为以下三个部分
-
接口的定义
1
2
3
4
5
6
7
8
9type (
IDatasync interface {//定义一个interface(接口类型)的IDatasync
Func1(ctx context.Context) (err error)//前面的括号是入参,后面的括号是出参
Func2(ctx context.Context) (err error)
Func3(ctx context.Context) (err error)
}
)
//只定义抽象的接口名称,接口入参出参类型
//数据实现层的接口的数量,名称,入参出参都要和这一致 -
全局变量以及单例模式的定义实现
1
2
3
4
5
6
7
8
9
10var (
localDatasync IDatasync//定义全局变量
)
func Datasync() IDatasync {//全局访问点,当系统其他地方需要调用接口方法是通过这个方法.Func1(ctx context.Context)
if localDatasync == nil {
panic("implement not found for interface IDatasync, forgot register?")
}
return localDatasync
} -
注册具体方法实现
1
2
3func RegisterDatasync(i IDatasync) {
localDatasync = i
}//将逻辑实现层中的方法具体实现注册进来
¶逻辑实现层的具体实现
¶接口实现的注册
1 | type sDatasync struct{} |
注意由于GO语言是包级作用域,因此如果接口过多,要分成多分文件去写,那么在同一包下的其他文件不用实现上面的注册,直接进行接口实现就行
¶接口的实现
1 | // 在 Go 语言里,`func` 后面的 `(s *sDatasync)` 被称作方法接收器(Method Receiver), |
代码中提到的utils包主要作用是实现一些非获取数据的其他功能,如加解密数据,数据发送等
¶目标服务器地址以及请求api的定义
通过const定义相关常量