用了golang框架是否降低了开发效率

tablecell · 2021-09-06 08:55:33 · 2167 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-09-06 08:55:33 的主题,其中的信息可能已经有所发展或是发生改变。

golang的框架只是在net/http上加上了 get/post 分类,把http.ResponseWriter, http.Request合并成一个

常用的操作封装到String/HTML/JSON 如果需要用不常用的方法,还是要调用Write/Request / Header() 该写的hundlefunc一行都少不了

如果使用框架中有些细节与预期不符,给作者提issue 你认为是bug,作者认为这是feature 比如 参考 net/http
/hello/name/ 是不匹配 /hello/name 这样的路由的

package main
import (
    "fmt"
    "net/http"
)
func main() {
    http.HandleFunc("/hello/name", func (w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Welcome to my website!")
    })
   http.ListenAndServe(":8080", nil)
}

$curl http://localhost:8080/hello/name/

Not found

但是很多框架 要么是算成匹配成功,反回200,有的是301,有的302 提issue 回复这是feature,不服来战,然后就卡壳了

bufulaizhan.jpg


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2167 次点击  
加入收藏 微博
7 回复  |  直到 2021-09-07 03:54:33
focusonline
focusonline · #1 · 3年之前

看不懂楼主在说什么... 例子的代码和测试完全不符合, 一个监听80端口, 一个访问8080...

tablecell
tablecell · #2 · 3年之前

1楼 @focusonline 8080是另外一个框架的端口,完整的代码

package main
import "github.com/yarf-framework/yarf"
type Hello struct {
    yarf.Resource
}
func (h *Hello) Get(c *yarf.Context) error {
    c.Render("Hello, " + c.Param("name"))
    return nil
}
func main() {
    y := yarf.New()
    hello := new(Hello)
    y.Add("/hello/:name", hello)
    y.Start(":8080")
}

$ http://localhost:8080/hello/world/

focusonline
focusonline · #3 · 3年之前
tablecelltablecell #2 回复

1楼 @focusonline 8080是另外一个框架的端口,完整的代码 ``` package main import "github.com/yarf-framework/yarf" type Hello struct { yarf.Resource } func (h *Hello) Get(c *yarf.Context) error { c.Render("Hello, " + c.Param("name")) return nil } func main() { y := yarf.New() hello := new(Hello) y.Add("/hello/:name", hello) y.Start(":8080") } ``` $ http://localhost:8080/hello/world/

你的用法不对, 你这里是把name当path使用了, $curl http://localhost:8080/hello/name/ 但是你定的不是这样的 /hello/:name 尾部增加一个/结果是不一样的?

tablecell
tablecell · #4 · 3年之前

3楼 @focusonline 定的路由是

/hello/:name

期望

但是很多框架封装了net/http以后就不一样了

focusonline
focusonline · #5 · 3年之前
tablecelltablecell #4 回复

3楼 @focusonline 定的路由是 ` /hello/:name ` 期望 - $curl http://localhost:8080/hello/jack 返回200 - $curl http://localhost:8080/hello/jack/ 返回404 net/http 也是这样处理的 但是很多框架封装了net/http以后就不一样了 - $curl http://localhost:8080/hello/jack 返回200 - $curl http://localhost:8080/hello/jack/ 有的是返回200 有的返回301 有的返回302

哦你是这个意思.我用过的框架不多,用法也比较简单没有把变量和路径混在一起你, 你试过几种? 有没有试过gin?

saberlong
saberlong · #6 · 3年之前

不知道你又没有注意到过,访问很多网站时,会自动去掉最后的/。</br> 而golang自带的是简单的map实现的路由,无法支持。</br> 框架是用前缀树之类的实现,所以支持了。</br> 不过我是不太喜欢这种自动重定向的功能的, 所以常常会显示设置一个handler</br>

tablecell
tablecell · #7 · 3年之前
saberlongsaberlong #6 回复

不知道你又没有注意到过,访问很多网站时,会自动去掉最后的/。
而golang自带的是简单的map实现的路由,无法支持。
框架是用前缀树之类的实现,所以支持了。
不过我是不太喜欢这种自动重定向的功能的, 所以常常会显示设置一个handler

去掉还是加上 google/baidu对 seo 有不同的理解, 但是按常规,扩展以后的行为应该跟内置的类库规则一致 就象开放扩展,关闭修改的原则一样,不然就会出现开发新增一个功能,测试发现原来没问题的地方冒出两个新问题 需要不停地做回归测试,不停地在原地打转 开发效率变成往前走一步,往后退两步

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传