当然是非常简陋版,这里的路线及方法完全按照来的 7天实现web框架

在这里将写代码时发现的知识点及注意事项写在下面


*加在类型前面指的是他接受的是内存地址,将变量及属性解析成内存地址的方法是在变量前面加上&
也可以利用反射更改变量值,代码如下:

re:=reflect.ValueOf(&x)
re=re.Elem()
re.SetInt(100)

[notice]这一段代码的作用和使用内存地址更改变量是一样的,只不过是用了反射操作内存地址指针的作用[/notice]


Go中的私有方法及变量开头字母通通小写,公告方法及变量开头字母通通使用大写
[notice]注意:在写web服务的api时,返回一个json形式,调用的架构里面的属性也得定义为公共的,否则其他方法里面读取不到里面的值,返回json就没有值,只会是{}[/notice]


Go中的map方法
我们统一采用&在结构体前面的写法,这样是为了将某个结构体指针指向结构体的内存地址

&Engine{router: make(map[string]HandlerFunc)}

[notice]在这里你会发现是使用的make来引用map[/notice]
你会发现当我使用Engine{}获取的变量只是一个拥有Engine的变量类型
当我用make是返回的是引用
当我用new时返回的是指针,这里new的使用方法时new(Engine)
[notice]通常我建议是使用make方法来定义的[/notice]

// Engine 架构定义一个属性为map
type Engine struct {
    router map[string]HandlerFunc
}

// New 返回生成map的Engine架构内存地址
func New() *Engine {
    return &Engine{router: make(map[string]HandlerFunc)}
}

map键值使用[key]的操作获取到指定的key键值的值。
_, ok := map1[key1] // 如果key1存在则ok == true,否则ok为false


//这里定义一个字符串值赋值给router的map属性key是字段的名称,同时将addRoute方法插入到Engine中
func (engine *Engine) addRoute(method string,patten string,handler HandlerFunc)  {
    key:=method+"-"+patten
    engine.router[key]=handler
}

// Run 生成一个持续化的网络监听路由
func (engine *Engine)Run(add string)(err error)  {
    return http.ListenAndServe(add,engine)
}

这里我们需要注意的是这个方法里面的engine方法还需要一个ServeHTTP的方法,而我们需要按照我们的要求重写这个方法。

func (engine *Engine)ServeHTTP(w http.ResponseWriter,r *http.Request)  {
    key:=r.Method+"-"+r.URL.Path
    if handler,ok:=engine.router[key];ok{
        handler(w,r)
    }else{
        //不存在这个路径返回404
        _, err := fmt.Fprint(w,"404 文件不存在哦",r.URL)
        if err != nil {
            return
        }
    }
}

go利用GET获取连接中的value值

return c.R.URL.Query().Get(key)

这一段语句是将返回得到架构的url地址进行解析,而Get,可以获取请求url连接后面的值
假设key是a,则在http://localhost:8080/api/service/get?a=a1 这个连接里面获取到a1,key是a,对应的到的值是a1,当然当多个a为key值时,他会获取多个key所对应的多个value值。


[notice-block]记得使用FromValue之前先使用 r.PareseFrom[/notice-block]
C所对应的架构

type Context struct {
    W http.ResponseWriter
    R *http.Request
    //分别是path路径 method请求类型 statuscode标识码
    Path string
    Method string
    StatusCode int
}

//WriteHeader(),这是设置的返回的状态码


Header().Set(key,value)
设置请求返回的header值,如增加token,“dsfgsdgdfg",在头部增加这么一个属性

最后修改:2021 年 06 月 14 日
如果觉得我的文章对你有用,请随意赞赏
百度推送成功 必应推送成功