关于 Go 学习历程疑问

由于篇幅微长,还请在阅的大牛能看完文章且给予相应的指点;帖子不设最佳答案,所有评者皆最佳,万分感谢!

由于不是计科专业,但是偶遇到 Go 也在努力想成为一名 Gopher ,学习了两个月,基本内容,语法,已经有了初步掌握,但还仍有许多不懂之处。想去动手做一些项目,无奈却不知道如何下手,期望的方向是微服务与 web 开发,初步掌握基础后试着学了 Gin 框架,照猫画虎也能写出一些简单的页面,但是对深入的 ->验证,登陆,CRUD,中间件,等等… 仍旧一窍不通。

这几天实在迷茫,学习动力一直有,几乎起早摸黑,热衷于敲代码,但是一直不知道在干些什么,没有进步,没有收取新知识,这样下去估计真会达到《从入门到放弃》一境界😂。

总结了许多不足之处;例如对 Kubernetes 实在是大有兴趣,但是兴趣往往总是被扼杀,想真正掌握又不得不拥有 Linux 知识,这又不得不翻开新的篇幅。

所以在此希望借鉴一下各位大佬走过的历程,这样也能少走一些弯路。
例如:

  • Web 开发需要具备哪些知识
  • MVC 结构是否适合新人,还有哪些其他优秀的结构
  • 中间件主要作用是什么
  • mysqlDriver 和 grom 有什么区别
  • 需要学到什么情程度能够自主开发一个设计相对合理功能满足基本使用的 web 站点
  • 建议的学习流程是什么
  • 概括多年开发经验的心得 😊

学无止境~ 请指教

讨论数量: 9
Mericustar

我给你一个左右互搏的玩法:

1:用 go 写一个本地读写数据的功能(简单用 map 存 k v 即可),然后用 go 自带的,“单元测试”,“基准测试”进行性能测试,达到这一步算是基本 go 应用,单进程开发,测试能力

2:把1中的功能,做成 HTTP/TCP 服务,不管是用 gin 绑定 handler,还是直接用 go 的 net 包都行,总之做出来之后,再写一个 go 程序去访问这个服务,最终可以达到 1 的程序提供读写 k v 的服务,2 的程序可以读写 k v,别忘了单元测试和基准测试,达到这一步算是 go 服务器框架等集成 API 的应用能力

3:把 2 的程序做成并发的,并发量越大越好,然后想办法测试每一次请求的耗时多长,比如 2 的程序我做成每秒1w次向 1 请求读/写 k v,然后计算这 1w 次全都跑完要多久,单次最短/最长要多久,80%跑完要多久等等一些你觉得可以衡量性能的指标,达到这一步算是 go 并发的编程能力

4:优化 1 和 3 以减少 3 的请求的响应时间,提高性能,go 程序性能优化的能力,可以使用一些辅助手段比如 go 官方的 pprof,或者是一些设计模式,程序设计思想比如:时间轮,多路复用,无锁编程等等

5:1 中简单的 map 可能已经不够用了,随便想一些比较复杂的数据,比如账号体系,购物车,订单等等,最直接点把你玩的游戏的整个你能想到的数据全都抽象出来,把存储的载体换成 redis/mysql 然后重构 1,继续提供单纯的读/写服务或者可以考虑提供更加复杂的服务比如多数据联合查找,多数据同时修改,排序等等,以 go 程序为核心联合其他数据库提供综合数据服务的能力,必要时需要学习数据库相关知识,比如 mysql 你为了提高效率要设计索引,外键等

6:重复2~4,思考一下如果现在有 M 个 1 程序和 N 个 3 程序都在运行,此时你该如何保证 1 程序这个群体被 3 程序这个群体平均访问(比如 1 只有 3 个在运行,3 却有 30 个,那如何保证每一个 1 都能比较平均的被 3 访问到?然后继续重复2~4,集群开发的能力,延伸一点可以上 docker/k8s 等等

7:到这一步你差不多已经有自己的想法了,你可以把 5 的程序,按服务再拆分成不同的程序,然后整个串联起来比如:拆分了下单的程序,支付的程序,发货的程序,那现在有用户程序,用户程序分别要跟这三个程序交互,再复杂一点你可以了解一下“有状态服务”和“无状态服务”,结合需求和技术成本的架构整体设计能力


最后,不要纠结于“前端”展示向的问题,做服务器后端考虑的是如何更快,更稳定,更少成本提供服务。如果你有兴趣,可以看看 go 有几个客户端库,实在手痒可以自己去试一试用 vt100 做控制台的 UI 开发,也是蛮有意思的,会涉及到一些计算机图形学的基本知识(比如屏幕像素点等同终端一个字符,如何显示不同的图形,当然终端毕竟是有限制的,很多时候只能显示正正方方的图形比如表格)

1年前 评论
Scrooge (楼主) 1年前

先做一个东西出来,不用想那么复杂。不断的优化你会发现越到复杂需要的基础越多.这个时候你再去学习复杂的

1年前 评论
Mericustar

我给你一个左右互搏的玩法:

1:用 go 写一个本地读写数据的功能(简单用 map 存 k v 即可),然后用 go 自带的,“单元测试”,“基准测试”进行性能测试,达到这一步算是基本 go 应用,单进程开发,测试能力

2:把1中的功能,做成 HTTP/TCP 服务,不管是用 gin 绑定 handler,还是直接用 go 的 net 包都行,总之做出来之后,再写一个 go 程序去访问这个服务,最终可以达到 1 的程序提供读写 k v 的服务,2 的程序可以读写 k v,别忘了单元测试和基准测试,达到这一步算是 go 服务器框架等集成 API 的应用能力

3:把 2 的程序做成并发的,并发量越大越好,然后想办法测试每一次请求的耗时多长,比如 2 的程序我做成每秒1w次向 1 请求读/写 k v,然后计算这 1w 次全都跑完要多久,单次最短/最长要多久,80%跑完要多久等等一些你觉得可以衡量性能的指标,达到这一步算是 go 并发的编程能力

4:优化 1 和 3 以减少 3 的请求的响应时间,提高性能,go 程序性能优化的能力,可以使用一些辅助手段比如 go 官方的 pprof,或者是一些设计模式,程序设计思想比如:时间轮,多路复用,无锁编程等等

5:1 中简单的 map 可能已经不够用了,随便想一些比较复杂的数据,比如账号体系,购物车,订单等等,最直接点把你玩的游戏的整个你能想到的数据全都抽象出来,把存储的载体换成 redis/mysql 然后重构 1,继续提供单纯的读/写服务或者可以考虑提供更加复杂的服务比如多数据联合查找,多数据同时修改,排序等等,以 go 程序为核心联合其他数据库提供综合数据服务的能力,必要时需要学习数据库相关知识,比如 mysql 你为了提高效率要设计索引,外键等

6:重复2~4,思考一下如果现在有 M 个 1 程序和 N 个 3 程序都在运行,此时你该如何保证 1 程序这个群体被 3 程序这个群体平均访问(比如 1 只有 3 个在运行,3 却有 30 个,那如何保证每一个 1 都能比较平均的被 3 访问到?然后继续重复2~4,集群开发的能力,延伸一点可以上 docker/k8s 等等

7:到这一步你差不多已经有自己的想法了,你可以把 5 的程序,按服务再拆分成不同的程序,然后整个串联起来比如:拆分了下单的程序,支付的程序,发货的程序,那现在有用户程序,用户程序分别要跟这三个程序交互,再复杂一点你可以了解一下“有状态服务”和“无状态服务”,结合需求和技术成本的架构整体设计能力


最后,不要纠结于“前端”展示向的问题,做服务器后端考虑的是如何更快,更稳定,更少成本提供服务。如果你有兴趣,可以看看 go 有几个客户端库,实在手痒可以自己去试一试用 vt100 做控制台的 UI 开发,也是蛮有意思的,会涉及到一些计算机图形学的基本知识(比如屏幕像素点等同终端一个字符,如何显示不同的图形,当然终端毕竟是有限制的,很多时候只能显示正正方方的图形比如表格)

1年前 评论
Scrooge (楼主) 1年前
DianWang

:joy:面向工作编程吧,从实际业务中学习,找搞go的工作,从初级做起,长文的那个,你没个半年门都入不了

1年前 评论
Scrooge (楼主) 1年前
Mericustar 1年前
landy_yao 1年前

file

这或许能够帮助到你。

1年前 评论

网络知识要掌握牢固 + 动手写一个东西 + 小强心态。额外的你也顾忌不过来。 如果不知道写什么,去b站或者油管上找那种实战视频。 多用几遍你就能明白疑问所在了。如果对一件事似懂非懂,练习是最好的解决办法。一味地看,是看不会的。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!