即墨网站建设电话,建设银行网上营业厅官方网站下载,如何做酒网站,郑州网站建设品牌一、前言
大家好#xff0c;这里是白泽。有一些同学提问#xff0c;希望在自己的简历上增加一些有含金量的项目经历#xff0c;最好能够去参与一些开源项目的开发#xff0c;但由于对一个庞大的开源项目缺乏认知#xff0c;难以着手。同时也担心自己能力不足#xff0c;…一、前言
大家好这里是白泽。有一些同学提问希望在自己的简历上增加一些有含金量的项目经历最好能够去参与一些开源项目的开发但由于对一个庞大的开源项目缺乏认知难以着手。同时也担心自己能力不足不知道自己写的代码是否会被接纳。
这里我总结了遇到的一些问题
如何找到适合我自己的开源项目白泽你能帮帮我吗确定了项目在项目中如何找到自己能做的需求白泽你能帮帮我吗找到了需求如何阅读开源项目的代码白泽你能帮帮我吗写完了代码提交代码的流程是什么样的白泽你能帮帮我吗
必须能 耐心看完这篇文章你会发现其实参与开源并不遥不可及。在文章的后半部分白泽将分享自己在不同社区参与的一些开源和之前在 Gitea (GitHub40.3k) 公司实习的一段时光。 公众号 「白泽talk」白泽开源了一个 Go 学习仓库包含我写作的 Go 各阶段学习文章、读书笔记、电子书、简历模板等欢迎 star。最近在仓库中一并开源了一个挂机冒险游戏《模拟龙生》正在迭代中欢迎大家试玩欢迎 pr。 白泽目前正在打造一个氛围良好的行业交流群游戏交流群文章的更新也会提前预告欢迎加入622383022。 二、如何参与开源
2.1 如何找到适合自己的开源项目
2.1.1 项目检索
出发点首先选择的开源仓库需要适配自己的方向最好是自己在做什么项目会用到某开源项目比较有价值再去尝试了解和贡献。 为了学习而学习非上上之选最好是有需求为出发点。 信息检索渠道GitHub 中文社区 在 GitHub 中文社区点击左侧菜单栏的索引便可以跳转至分类检索目录选择自己感兴趣的方向。 2.1.2 后端项目推荐 下面这些绝大部分都是白泽参与过开源或者深度使用过的仓库十分推荐
Kitex高性能、扩展性强的 Golang RPC 框架。star 6.5k 字节跳动Hertz一个高可用性、高性能和高扩展性的 Golang HTTP 框架star 4.5k 字节跳动Gitea这个项目的目标是以最简单、最快捷、最省力的方式建立一个自我托管的 Git 服务。star 40.3kWoodpecker一个简单而强大的 CI/CD 引擎具有很强的可扩展性。star 3.4k 推荐的理由 首先 Kitex、Hertz 是字节云原生开源社区 cloudwego 中Go 语言的两个核心框架当然还有 Rust 的 Volo 框架。白泽自己也是 Hertz 一位认证的 Committer。 围绕这两个仓库的生态十分丰富社区活跃度很高加上字节背书又比较年轻去年才开源年满两周年初期学习成本不会非常高并且 Go 云原生相关也是当下发展的热门方向所以学习的性价比还是比较高的。 社区仓库有飞书群二维码 Gitea 是我去实习之后开始接触的这个仓库用户极多非常活跃社区版也有 Gitea 的员工把持维护核心开发者在群聊中回复及时基本可以随时交流也是很棒的一个社区 社区仓库有Q群二维码 Woodpecker 是 CI 引擎用 Go 的协程控制容器启动去运行各种任务代码检查、单元测试、构建…面向的是真正的一个发挥 Go 语言协程性能的工作场景因此学习 Go 它是十分合适的。 《使用 Woodpecker 与 Gitea 搭建纯开源的 CI 流程极限降本》 我的这篇文章就讲了如何整合 Woodpecker 与 Gitea。
2.2 在开源仓库接受需求
以 HTTP 框架 Hertz 主仓库为例我们进入 Issues 查看有哪些代办的事项。 这里看到打有 good first issue 的 tag 的需求就是新手可以尝试参与的。同时关注一下右侧的评论数如果没有人评论说明这个需求还是无人认领状态你可以去评论 please assign me获得提问者的开发授权。 白泽找到了一个非常适合新手的任务“为项目编写单测”详见这个 issue # 257 Issue 描述
单测必须是有意义的推荐为单元测试添加注释每一个单测都必须使用断言而不是 print 验证
2.3 阅读开源仓库代码
可以参考白泽之前写作的关于分析 Kitex 框架的文章下文先以查看这个单测需求为场景进行分析
《Kitex源码阅读——脚手架代码是如何通过命令行生成的(一)》《Kitex源码阅读——脚手架代码是如何通过命令行生成的(二)》
克隆 Hertz 代码到本地
git clone gitgithub.com:cloudwego/hertz.git针对这个添加单测的 issuepkg/route 部分还没有分配那么我们进入这部分的代码进行查看
// HTTP 框架 Hertz 的核心结构内的核心字段就是 *route.Engine
type Hertz struct {*route.EnginesignalWaiter func(err chan error) error
}由 Hertz 结构体内包含了 route.Engine 可知pkg/route 包中的内容是整个 Hertz 框架的核心涉及大量内容或许这也是这部分需求没有被社区同学分配掉的原因。 查看一下当前模块的单测覆盖率与85%目标值的差距
# /pkg/router
baizebaizedeMacBook-Air route % go test -cover ./...
go: downloading github.com/cloudwego/netpoll v0.5.0
? github.com/cloudwego/hertz/pkg/route/consts [no test files]
? github.com/cloudwego/hertz/pkg/route/param [no test files]
# 只相差百分之0.2
ok github.com/cloudwego/hertz/pkg/route 2.732s coverage: 84.8% of statements
baizebaizedeMacBook-Air route % 单元测试单测文件以 xx_test.go 命名通过调用 xx.go 当中的方法与一个预定义的值进行 assert 断言相同则通过测试补充单元测试直到满足85%的阈值我们就可以着手提交 pr 了
func TestConnectionClose(t *testing.T) {engine : NewEngine(config.NewOptions(nil))atomic.StoreUint32(engine.status, statusRunning)engine.Init()engine.GET(/foo, func(c context.Context, ctx *app.RequestContext) {ctx.String(consts.StatusOK, ok)})conn : mock.NewConn(GET /foo HTTP/1.1\r\nHost: google.com\r\nConnection: close\r\n\r\n)err : engine.Serve(context.Background(), conn)assert.True(t, errors.Is(err, errs.ErrShortConnection))
}2.4 编码以及提交流程
2.4.1 编码前须知
一般来说开源项目的根路径下都有一个 CONTRIBUTING.md 文档指导你如何参与本仓库的贡献包括 git 使用的流程、单测覆盖率、代码的格式化等需求参与任何开源都建议先阅读这个文档。以 Hertz 为例 2.4.2 仓库克隆流程
《一文搞懂Git工作流再也不用担心入职就被辞退了》这篇文章是两年前我写作的对 Git 工作流不甚了解的同学可以快速浏览。 针对开源项目一般都选择 fork 仓库的形式进行开发
将开源仓库 fork 到自己的 remote hertz。在自己本地克隆自己的 remote hertz。 从本地的 develop 分支或者 main 分支切换一个新的 feature 分支出来针对你要开发的内容比如要增加 /pkg/router 的单测则执行命令
# 分支命名没有绝对约束但是希望见名知意
checkout -b test_pkg_router开发完成之后将本地 test_pkg_router 分支代码提交到自己的 remote hertz 的 test_pkg_router 分支。 ⚠️注意开发完成之后不要急着提交一般需要按照 CONTRIBUTING.md 的要求运行指定控制台命令进行单测运行与代码格式化等操作确定没有问题后才能提交。 在自己的 remote hertz 仓库内创建一个 pull request将自己 remote hertz 仓库的 test_pkg_router 分支请求合并到 Hertz 官方仓库的开发分支上。提交 pr 的时候需要描述自己的工作内容以便 reviewers 快速明白你的意图举个例子 提交 pr 之后一般都会触发 .github/workflows 目录下的各种 CI 流程只有全部通过之后reviewers 才能同意合入代码code lint、test 等操作在这里也会执行所以本地提前执行一次是未雨绸缪 2.5 后续提升
参与开源过程中一般都有社群找到志同道合的团体一起交流会让你事半功倍。 三、Gitea 的实习
3.1 Gitea 介绍 Gitea 是一个轻量级的、自助的 Git 服务。它是一个开源的、基于 Go 语言的项目提供了类似于 GitHub、GitLab 等平台的版本控制仓库管理功能。
Gitea 允许您在自己的服务器上架设一个 Git 服务以便团队或个人能够方便地进行代码托管、协作和版本控制。GitHub Star 40k
它的社区活跃度也非常高。 3.2 在 Gitea 的生活 面试面试 Gitea 用了一轮面试大概90分钟。面试官是一位字节架构出来的大哥。整个面试流程体验十分特殊面试官开了屏幕共享在自己的白板上写出各种 Go 语言相关的语法题目涉及切片、map、interface{} 等 Go 的语法知识。询问十分细致但不故意刁难。因为是做开源相对项目经历反倒问的比较少。但是要求基础扎实对 Go 的理解较为清晰。 工作内容 看 issue提 pr和自主发电相比实习是有工资的。去实习之前很难想象在一家 GitHub star 数破40k的项目实习是什么样的体验。去了之后发现和在家没什么太大区别。不过有问题可以问身边的同事但是平时解决问题都是个人为主。公司内人员极其精简都是大牛比较忙除了分配一些工作不太会主动找你。所以架构部门真的很难进开发任务更多时候需要自己发掘总结来说就是自由甚至有些盲目。 体会 在这里提升可能没有自己想象的那么快但也绝对颇有收获因为更多时候需要自己学习而且因为是开源项目对项目的熟悉也是慢慢来的mentor 基本是没有时间指点你除非你主动提问。这与以业务为出发点的项目迭代是有所不同的你甚至没有 kpi 推着你走。公司内管理层是圈内知名的开源大佬在 Gitea 官方群内时刻与群友交流解答各种问题。这也是我见过最身体力行的 Leader做技术真的很纯粹很佩服。
四、小结
当你开始参与开源你的编码水平将突飞猛进。天高海阔任君腾挪。
原创不易感谢关注