阅读 Go 实战:Web 入门 遇到的坑
问题1
阅读教程8.4 删除按钮 如果你顺着教程来你就会发现,打开 /articles/1
详情页
会有一个错误
2022/02/14 13:13:42 template: show.gohtml:20:17: executing "show.gohtml" at <RouteName2URL "articles.delete" "id" $idString>: error calling RouteName2URL: runtime error: invalid memory address or nil pointer dereference
而这个问题的解决方案在8.5
在此之前我们的代码结构是8.3
如果按照小白来说卡住就会从头开始阅读文章看那个地方有错,但是往上看再多也是没问的, 因为作者放到8.5用了解决 Link() 方法, 但是前面有个 Name2URL方法也需要用到. 也就是说以8.3的代码结构无法正常运行Name2URL方法方法
问题2
阅读教程 8.4 Article 模型,可以看见顺着教程来的话你的ID类型为uint64
阅读教程 8.5 重构文章列表页, 但是到了8.5重构文章列表页用了 strconv.FormatInt 而不是用 strconv.FormatUint 方法,不知道是不是我教程看漏了还是 Article.ID 类型改变了,而且我也没明白a那里来的
于是我稍作修改才能正常运行,可能是我敲错
goblog\resources\views\articles\show.gohtml
问题3
顺着教程做到 8.4你会发现有的代码不注释掉压根没法运行
读后感,我读了8章, 1-6章顺着下了没问题, 但是 7-8章有问题,大部分时间用来找bug了, 感觉比以前laravel教程 和 vue教程有点需要改进的…
问题4
8.9 重构中间件, 如果仔细和8.5 对比会发现这里没有 route.SetRoute(router) 这行代码, 如果少了 route.SetRoute(router)
如果没有就会出现这种错误
2022/02/14 14:44:59 template: index.gohtml:11:32: executing "index.gohtml" at <$article.Link>: error calling Link: runtime error: invalid memory address or nil pointer dereference
所以完整的因该是这样的
package main
import (
"goblog/app/middlewares"
"goblog/bootstrap"
"goblog/pkg/logger"
"goblog/pkg/route"
"net/http"
)
/**
* 主方法
*/
func main() {
bootstrap.SetupDB() //数据库初始化
router := bootstrap.SetupRoute() //路由初始化
route.SetRoute(router)
err := http.ListenAndServe(":3000", middlewares.RemoveTrailingSlash(router))
logger.LogError(err)
}
推荐文章: