前端程序员用前端的习惯对 Golang 进行的一次小小封装尝试

前端程序员用前端的习惯对 Golang 进行的一次小小封装尝试

技术杂谈小彩虹2021-08-25 23:57:54290A+A-

Golang 作为谷歌推出的一门后端语言,一出生就万众瞩目,笔者作为一个在互联网行业沉沉(就没浮起来过)的前端小菜鸡当然难逃它的魅力,于是便积极地投身到学习 Go 语言的浪潮中去了,可是摸摸索索的学了好久,始终不得其门,犹如王野道长的师叔们看风后气门秘诀一般,一看就晕,一看就忘,所以总想着要找一个切入点去上手练习它,忽然有一天,一个奇怪的想法窜入脑门,“为啥不让 Go 变得更 ‘前端’ 一点呢?”,于是 duang~ duang~ duang~,有了它:

gono

github

下面开始正文介绍这个小家伙吧。

学习一门新语言,很多人的习惯都是启动一个 Web 服务作为开始,那么看看 Go 如何启动一个 Web 服务吧!

package main

import (
	"io"
	"log"
	"net/http"
)

func main() {
	// Hello world, the web server

	helloHandler := func(w http.ResponseWriter, req *http.Request) {
		io.WriteString(w, "Hello, world!\n")
	}

	http.HandleFunc("/hello", helloHandler)
	log.Fatal(http.ListenAndServe(":8080", nil))
}

NO,NO,NO 这样的书写方式对前端来说很别扭,它就像是原生的 Node 一样,有一点点繁琐...,看看 gono 怎样快速启动一个服务吧!

package main

import (
	"gono"
	_ "./routes"
)

// var conf = structs.InitParams{
// Proxy: false,
// }

func main()  {
	gn := gono.Init()
	gn.Listen(9000)
}

神奇的是,现在 9000 端口已经启动了你想要的服务啦~而且!请注意这句

_ "./routes"

笔者的目录结构如下:

在 test.go 中就可以把抽离出来的路由模块全部导入进去了,在自己的路由模块的 init 中将函数注入进去就可以将路由导入给 gono 啦

路由逻辑部分

GET 请求的拦截

package routes

import (
	"gono/router"
	"gono/utils"
	"fmt"
) 

// 模拟路由拆分
// get 方法
func init(){
	router.G("/").Then(func(ctx *utils.Ctx) {
		ctx.Body = 112233
		query := ctx.Query
		for key, val := range query {
			fmt.Println("key: " + key + ", value: ", val)
		}
	}).Then(func(ctx *utils.Ctx)  {
		fmt.Println("你好,世界")
	}).Then(func(ctx *utils.Ctx)  {
		fmt.Println("hello, world")
	})
}

POST 请求的拦截

package routes

import (
	"gono/utils"
	"gono/router"
	"fmt"
) 

// 模拟路由拆分
func init()  {
	PostUser()
}
// post 方法
func PostUser() {
	router.P("/user").Then(func(ctx *utils.Ctx) {
		ctx.Body = map[string]interface{} {
			"name": "emine",
			"age": 20,
		}

		query := ctx.Query
		for key, val := range query {
			fmt.Println("key: " + key + ", value: ", val)
		}

		ctx.Extra = "我是要透传给下一个 then 的信息"
	}).Then(func(ctx *utils.Ctx) {
		fmt.Println(ctx.Extra)
	})
}

大伙儿看看!有没有一丝青春回来了的感觉!!这个 .GET/.POST,这个链式 Then 是不是像极了爱情,呸,像极了 JQ 或者是 Axios 还有 Koa 的样子!!!

目前来说 Then 里边的回调方法的入参 "ctx" 上边暴露了

  • Body - 类似 koa ,返回体的内容
  • Query - 请求携带的参数,在此处获取,是一个 map 结构
  • Extra - 额外信息,可以通过它将信息传递给下一个 Then

请注意:使用链式的 Then ,入参函数会顺序执行,后边的 Then 会覆盖前边的赋值

看看测试的情况吧~

  1. GET 请求:

  1. POST 请求:

嘿嘿,总的来说,纸上得来终觉浅,绝知此事要躬行~ 大家也可以尝试尝试呀

PS: 来自贫困山区的孩子 Emine 从来没有得到过 star 的关怀,希望大家顺手给个 star 吧,

交友地址:github.com/Luooojunnn/…

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示 | 支付宝红包
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们