【青训营】Go Web开发入门指南<前半{一个原生的服务器}(第三届字节跳动青训营后端专场2022/5/7始)| 青训营笔记

233 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

Go Web开发入门指南<前半

{( **第三届字节跳动青训营后端专场

  1. Go语言上手-基础语言 1)、Go语言原理与应用实践** )}

学习心得: ① 目前只有python语言的学习经验,大部分结构内部理解并不透彻,更多情况下的还是把他当成一种(科研)工具在用。 /n ②文章的完全掌握至少需要一整天的全身心投入,对于我目前普通状态下可能会比较困难,且学业压力大,任务重,因此无法达到青训营导师所期待的进度,只能安慰自己:非科班大一,能学多少学多少吧。

疑惑: ①为什么我学理工科方面的新东西时始终没有那种突然领悟贯通的感觉呢

从原生Web框架开始

首先从Go原生框架做起,从内存存储到io操作,到数据库存储,一步步升级

一个原生服务器

关于Golang原生web框架(该代码源于源文章):
作者:可乐可乐可
链接:juejin.cn/post/696103… 来源:稀土掘金\

package main

import (
   "fmt"
   "go-web-tutorial/handler"
   "log"
   "net/http"
)

func main() {
   fmt.Println("Starting the server ...")
   helloHandler := handler.NewHelloHandler()
   http.Handle("/hello", helloHandler)
   // 创建服务器,ListenAndServe若服务器宕机,会返回异常
   log.Fatal(http.ListenAndServe("localhost:8080", nil))
}

package handler

import (
	"bytes"
	"fmt"
	"net/http"
)

type HelloHandler struct {
	m map[string]string
}

func NewHelloHandler() *HelloHandler {
	return &HelloHandler{m: make(map[string]string)}
}

// 回声服务器,返回接受的body,
// 实现Handler接口
func (h HelloHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
	b := request.Body
	buf := bytes.Buffer{}
	buf.ReadFrom(b)
	b.Close()
	s := buf.String()
	fmt.Printf("get request: \nMethod:%s\n%s\n%s\n", request.Method, request.RequestURI, s)
	writer.Write(buf.Bytes())
}



这段代码中实现了一个简易的后端,读取了body的值,但还太简单,

  1. 路由拦截下来后才能得知请求方法
  2. 我们需要手动处理io,
  3. 读取io后body需要手动映射到实例中,
  4. 链接上的参数需要我们手动使用正则取下来
  5. 路由分组问题,比如 /test/t /test/t2
  6. 返回值需要我们手动处理为[]byte类型

这段代码中:

我们实现了一个简易的后端,读取了body的值,但是这个后端太简单了,

  1. 路由拦截下来后才能得知请求方法
  2. 我们需要手动处理io,
  3. 读取io后body需要手动映射到实例中,
  4. 链接上的参数需要我们手动使用正则取下来
  5. 路由分组问题,比如 /test/t /test/t2
  6. 返回值需要我们手动处理为[]byte类型