V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jellyspot
V2EX  ›  程序员

初学者,学完了 golang 的基础知识,但是不知道下一步该怎么走,各位大佬还请指点一二

  •  
  •   jellyspot · 245 天前 · 2788 次点击
    这是一个创建于 245 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基础知识都学完了,但是感觉不会用,也写不出什么东西,也不知道该写什么,看那些纯 go 代码的项目依然看不懂。

    我不是做开发工作的,学语言只是个爱好,想提高下自己,现在有如下几个问题想请教下:

    1 、工作当中天天都是 k8s ,istio ,prometheus 这些的运维支持,想着能看懂些源码,能更深的知道底层原理,不知道这个期望是不定的有点高了,目前感觉压根看不懂,也不知道该从何看起。

    2 、有没有什么练手的项目,能让我把 go 的理论知识放到实践中,写出些小东西

    3 、go 内置的很多包都是怎么用起来的,比如 net/http 可以用来做简单的 web 服务,但是你们是怎么知道先用哪个函数,后用哪个方法,最后实现目标。或者说我现在想要实现某个功能,但不知道有哪个内置函数能实现,你们都是怎么知道的,都是网上现查或者凭经验的吗?

    29 条回复    2023-08-27 18:13:11 +08:00
    hefish
        1
    hefish  
       245 天前
    第三条 换成是我的话,我就谷歌。
    cocomiko
        2
    cocomiko  
       245 天前   ❤️ 1
    内置的包怎么用问 chatgpt 呀,先让 chatgpt 用 go 给你写一段代码,照着改就行了
    duluosheng
        3
    duluosheng  
       245 天前
    尝试写一个 Web 后端服务,比如简单的 CRUD + Gin 。
    coolair
        4
    coolair  
       245 天前
    放弃,学 Rust 。
    ClericPy
        5
    ClericPy  
       245 天前   ❤️ 2
    如果是两年前, 可能会有一套一套的答案, 但是时代变了...

    1. 注册一个 chatgpt 或同类大语言模型工具, 问你要问的问题会有个大致方向
    2. 把软件开发原则和设计模式了解个的大概, 疯狂阅读源码, 知道他们哪些设计符合原则, 哪些不符合, 哪些是折衷方案

    其他假大空的就不提了, 软件开发这一行除非是大脑非常好使那类人直指本质地从计算机科学层面一点就通, 大多数人都是靠大量的阅读代码和自己写代码里沉淀出来的. 方法论的东西不能死记, 至少知道什么是对什么是错.
    yaott2020
        6
    yaott2020  
       245 天前 via Android
    讲一下我的:

    我想写一个 http server --> google 如何用 golang 写一个 http server --> 找到例子,自己改一改 --> 发现太简陋,想要路由功能 --> google golang 路由功能 --> 找到 gin 框架 --> 找 gin 文档学习学习 --> 自己跟着文档写一个 --> ...

    总的来说,你要知道自己想干嘛,然后去找有没有相关实现,总有先人有解决方案给你参考,然后不断实现,不断优化。你自然就知道该怎么办了
    archxm
        7
    archxm  
       245 天前 via Android
    送外卖
    privil
        8
    privil  
       245 天前
    @cocomiko #2 会瞎编的。
    mikaelson
        9
    mikaelson  
       245 天前
    op 给点 k8s 资料和建议,正在学习中。。。
    FightPig
        10
    FightPig  
       245 天前
    自己写个小项目,边写边练
    rbe
        11
    rbe  
       245 天前
    1. 没有开发背景的话,这个目标有点高了,如果一定要看最好从千行以内的小项目看起。大型项目需要有足够的设计模式、go 语言最佳实践的经验才容易把握脉络;

    2. 个人经验练手项目最好从有实际意义,从自身出发能落地的目标入手。比如用程序简化一下日常做的一些数据处理操作,转换一下文档的格式之类的。小项目不断扩展就可能变得对自己非常有意义;

    3. 可以试下 github copilot ,可以有效的解决只学了语法,不知道实践中大家是怎么写的这个问题。很多时候一个 func 名字写完,copilot 就会提示你用什么包的什么方法完成什么任务了。这时候再回头去查下包的项目地址,逐渐就能积累经验了。
    em70
        12
    em70  
       245 天前
    既然是爱好,你到底爱的是什么呢?如果爱得是写代码本身,可以去复刻其他的项目,争取做得一模一样。如果爱的是创造自己的作品,那么还需要产品经理知识,要去琢磨市场需求,用户体验
    jellyspot
        13
    jellyspot  
    OP
       244 天前   ❤️ 8
    @mikaelson k8s 这个东西真的内容太多了,没有啥系统性的资料,里面各种知识点真的没法说,太多了,最好的就是看官方文档,并且结合工作当中的实践慢慢积累,才能由浅入深,只是看文档想掌握深点,个人感觉很困难。

    如果你不是专做这行,只是把它当作你应用部署的底层平台的话可以给你个简单的流程做参考:
    1 、云服务商买一套,或者自己搭建个 k8s 环境
    2 、运行起来一套简单的前后端分离服务,这里主要练习的是多个镜像启动多个不同的 workload ,然后怎么能互相访问对接,这个环节能掌握清楚 workload service ingress 都是干嘛的,该怎么用,怎么关联
    3 、你会发现当你测试环境发生重启,或者 pod 重建后,数据库数据都没了,这会你就应该研究数据持久化了,pv pvc 的概念就出来了
    5 、然后你又创建了个前端服务,想修改个前端页面的配置文件参数,比如网页的 title ,其他都一模一样,但是每个服务一个镜像,太麻烦了,容器里直接修改,重建就没了,配置文件放 pv pvc ,太小题大做,这会 configmap 出现了。连接数据库的配置文件,密钥明文,太 low 了,secret 出现了
    6 、前端页面镜像有 bug ,必须要重打镜像了,cicd 出现了,你是选择 docker build 还是 jenkins ,新的知识又增加了
    7 、更新 workload 的镜像,问题又来了,服务会不会受损,多副本就不会受损吗?如何优雅终止,健康检查,无损更新?
    8 、服务高峰期怎么应对,手动扩副本数太傻,hpa 来了

    如果你想深点,做些 k8s 运维或者技术支持的,那么除了上面的必须熟悉,下面的东西必知必会
    1 、清楚 k8s 的工作逻辑,master 的三大件是干嘛的,kubelet ,kube-proxy ,coredns 都是干嘛的,比如执行个创建或查询一个 workload ,系统组件之间怎么通讯的,创建一个 pod 后,容器网络和外界是怎么打通的,k8s 资源调度和分配逻辑是什么
    2 、自己搭建一套 k8s 集群,多 master 的最好,master 和 worker 节点分开(一定是自己搭建,不要购买云服务商现成的容器服务,自己搭建过程你会收获不少东西)
    3 、熟练使用 kubectl 命令进行各种查询分析
    4 、清楚 rbac 的功能和使用

    剩下的太多太多了,说不完了,
    等你发现 k8s 了解差不多了,发现总得有个监控吧,prometheus 出现了
    流量治理,服务分析也得有吧,istio 来了
    日志得持久化保存下吧,els 来了
    学了那么多了,得给老板展示下漂亮帅气的监控吧,得研究 grafana 了。
    服务都上 k8s 了,集群越来越重要,万一哪天 etcd 崩了怎么办,备份总得有吧,etcd 原理和备份恢复得研究下吧。
    想自建镜像仓库了? harbor 研究下。
    这个云平台太贵了,业务想换个云平台,集群要迁移,velero 走起
    想给 pod 限速了,想给集群加审计了。。。。

    就到这吧
    jellyspot
        14
    jellyspot  
    OP
       244 天前
    @rbe 很受用,感谢分享
    jellyspot
        15
    jellyspot  
    OP
       244 天前
    @yaott2020 我现在就这么来的,但是发现很多函数传参,我都搞不清该传什么,网上看个例子,他传的我也看不懂,还是不明白为什么就这么写。。。
    mikaelson
        16
    mikaelson  
       244 天前
    @jellyspot #13 搞运维的,一直都用 docker ,k8s 没机会接触,想好好学学 k8s 。。。老哥用心了,回复了这么多。感谢。非常认真的阅读了你的回复。
    jellyspot
        17
    jellyspot  
    OP
       244 天前
    @em70 就是想平常能写些能用到的小工具,另外 go 写的软件,有些时候用的时候,想了解下原理,想看看源码,基本就这个需求
    jellyspot
        18
    jellyspot  
    OP
       244 天前
    @mikaelson 忘了说了,其实那些云服务商的文档中,有很多最佳实践,可以挨个过一过练一练,比单纯了解 k8s 原理要好很多
    sgwk
        19
    sgwk  
       244 天前
    做个最简单的接口写起,gin+crud ,比如查询天气之类的。
    jellyspot
        20
    jellyspot  
    OP
       244 天前
    @mikaelson 搞运维还有个要点,容器网络结构和容器网络抓包分析最好掌握,要不遇到容器里面的疑似网络问题没法定位
    levelworm
        21
    levelworm  
       244 天前 via Android
    自己做项目吧。运维不需要自动化吗?
    em70
        22
    em70  
       244 天前
    @jellyspot #17 OK,那你平时需要用到什么小工具呢,繁琐的手工劳动都可以自动化,先找个目标,做什么个简单小工具出来,不会做不要紧,问题一个个解决,不要逃避,不要放弃,有问题就问,等做好你就入门了,然后下一个

    PS:发现需求,大于技术,大于产品,大于 everything
    jellyspot
        23
    jellyspot  
    OP
       244 天前
    @em70 受教了,感谢
    seers
        24
    seers  
       244 天前
    我是因为在用阿里云的 k8s ,平时可以用 go 调用阿里云 api 写点小工具,你也可以这里切入
    OK1writer
        25
    OK1writer  
       244 天前
    @mikaelson 同问
    AEDaydreamer
        26
    AEDaydreamer  
       244 天前
    如果自己没有思路的话可以看看这个
    https://github.com/codecrafters-io/build-your-own-x
    huiwang520
        27
    huiwang520  
       244 天前
    rus4db
        28
    rus4db  
       244 天前   ❤️ 1
    项目驱动,问题驱动。
    不要拿着锤子找钉子。
    wqtacc
        29
    wqtacc  
       244 天前
    转岗或者换个研发工作,你会快速进步
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2979 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:58 · PVG 20:58 · LAX 05:58 · JFK 08:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.