Golang 高阶函数(函数作为输入参数或者返回值)的写法

72 阅读1分钟

func qpStr(c *gin.Context, s string, f func(c *gin.Context, s string) string) string {
	return f(c, s)
}

func qpInt(c *gin.Context, s string, f func(c *gin.Context, s string) int) int {
	return f(c, s)
}

func qpBool(c *gin.Context, s string, f func(c *gin.Context, s string) bool) bool {
	return f(c, s)
}

func qs(c *gin.Context, s string) string {
	r := ""
	if c.Request.URL.Query().Get(s) != "" {
		r = c.Request.URL.Query().Get(s)
	}
	return r
}

func qi(c *gin.Context, s string) int {
	r, str := 0, ""
	if c.Request.URL.Query().Get(s) != "" {
		str = c.Request.URL.Query().Get(s)
		i, _err := strconv.Atoi(str)

		if _err != nil {
			r = 0
		} else if _err == nil {
			r = i
		}
	}
	return r
}

func qb(c *gin.Context, s string) bool {
	return c.Request.URL.Query().Get(s) == "true"
}

return &QueryParameter{

		Cycle:   qpStr(c, QPContrastCycle, qs),
		OverView: qpBool(c, QPVerView, qb),
		PageNum:  qpInt(c, QPPageNum, qi),
		PageSize: qpInt(c, QPPageSize, qi),

}

> 不使用高阶函数前,实现方式
image.png