Go写业务过程中遇到的实现问题

Jyang2016 发布于 07/19 06:50
阅读 322
收藏 0
Go

 在写业务的过程中,因为要做的就是按照预定义好的接口实现内容。然后实现方式一是原来代码中给的例子,但是我想:

  • 少写点内容;
  • 因为请求数据就这个函数会用到,所以放在函数内部定义;

请问,我这么写是不是会被锤爆。

package main

import (
	"net/http"
)

//http请求处理

type IHandler interface{
	Handle(r *http.Request, w http.ResponseWriter) error
}

/**
 * 实现方案一: 定义结构体;请求类型定义在函数外; 是写接口
 */
type SpecificHandler struct{
}

type SpecificRequest struct {
	//具体请求内容
}

func (h SpecificHandler)Handle(r *http.Request, w http.ResponseWriter) error{
	//读取request
	//业务
	return nil
}

func NewHandler1() IHandler {
	return SpecificHandler{}
}

/**
 * 实现方案二: 定义接口;请求定义在函数内;直接将函数作为接口
 */
type ICommonHandler func(r *http.Request, w http.ResponseWriter) error

func(iCommonHandler ICommonHandler) Handle(r *http.Request, w http.ResponseWriter) error {
	return iCommonHandler(r,w)
}

func NewHandler2() IHandler {
	return ICommonHandler(func(r *http.Request, w http.ResponseWriter) error{
		//请求定义在内部
		var specificReq struct {
			//请求内容
		}
		//读取请求
		//业务
		return nil
	})
}

 

加载中
0
mickelfeng
mickelfeng

你可以看net/http server.go文件;http.Handle、http.HandleFunc

IHandler 的原型是这个?

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

 

Jyang2016
Jyang2016
回复 @mickelfeng : 最后还是写成了一的样式。
mickelfeng
mickelfeng
回复 @Jyang2016 : 你就按照go的风写吧。
Jyang2016
Jyang2016
是看了这个才想这么写
0
mickelfeng
mickelfeng

第一种方案是面向接口编程;

主要有两点不太好:

因为必须要实现IHandler接口,Handle这个方法名不能修改,不能定义一个更有意义的名字

必须要新定义一个类型,才可以实现Handler接口,才能使用

第二种是接口型函数 ;

golang中很多代码,两种风格同时存在的。既可以面向接口,也可以函数式编程

Jyang2016
Jyang2016
嗯。
返回顶部
顶部