阅读 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)
}
总结的挺好
这章的体验很糟糕 第一遍跟着教材走 兜兜转转绕晕了
问题2 中提及的内容,在我现在看的文档中已经是如下描述。所以至少 FormatUint的事情已经解释了。
至于Link 本身的实现,我觉得应该是:
为什么一会儿是a 而方法的接收者在文章中写成了article呢。是因为方法的代码是从main.go中拷贝过来的,当时在main中的定义时,接收者是a:
谢谢大佬,我在8.3困了半天 :joy: 这两章体验对新手真的不太好
我改了半天 原来你这里已经都总结好了 :joy:
买了(根本没学🤣😂🤣)还有 你可以提交建议和修改哦