*
English version:《Hello, World》Author: @Tiexin Guo(郭铁心)
中文版:《你好,世界》作者:@胡涛(Daniel Hu)
不必尝试切换中英文版本看下我翻译的好不好,我就不是从英文版翻译过去的。
咱们的文章如果是双语公布,那就肯定是两次原创。尽管表白的主题一样,可能也只有主题一样了。*
(如果你违心深刻浏览本文,请点击文末“浏览原文”跳到网页版持续。毕竟我懒得排版)
本文不算短,然而我晓得你会读完。如果没读完,,不可能,相对不可能!
在第一篇博文里,我要讲些啥呢?如同我也没有想好。然而他们喊我写,那我就写了。
好,让咱们荡起双桨,不是,让咱们开始吧!
别别别划走,给我三分钟,还你一天好情绪!
别急,置信我,下文不会让你看着 ” 心力憔悴 ”,你能够笑着看齐全文,并且毫不费力地学到新姿态,不是,新常识,新常识!
很多时候,我像一个 ” 小白 ” 用户。(尽管我是,然而我晓得你们不信。)我怎么个 ” 小白 ” 法呢?
比方我喜爱用开源软件(白嫖谁不喜爱?),然而我相对懒得在遇到问题的时候上 GitHub 给对应的开源我的项目开一个 issue 来反馈我遇到的问题,更别提开一个 pr 来修复我遇到的问题了。
或者有一天我情绪大好,我会给一些 ” 反馈 ”,兴许是在用户群里,兴许是在其余中央。当然个别用着爽了,不可能开一个 issue 表示感谢。然而用着很不爽,或者我会忍不住开个 issue 问一句:
啥破玩意?就这?好意思开源?WTFFF!!!
我做着朝九晚五的工作,我不加班,我上班后不工作。
然而如果我遇到一个好玩的开源软件,或者上班后你会看到我还在参加某个开源我的项目,不论是写代码,还是参加社区例会。这不是我的工作,这是我的喜好,我的生存。
起初我就没那么 ” 小白 ” 了!而一个 ” 大白 ” 用户的涵养,就是学会了提提 issue,提一些小的 pr,参加一些社区活动,晓得开源我的项目的最新动静,逐步融入了开源社区。
说个笑话:我上班了不工作。我不感觉玩开源社区是工作。我喜爱没日没夜倒腾开源社区。而后老板给我的工作就是玩 ” 开源社区 ”!!!WTF!!!
老板催我写注释了。好吧,本文还是要介绍 DevStream 的,不能全文胡扯。
在这篇 ” 创世 ” 博文里,我筹备:
- 向你介绍 DevStream 的工作原理(不要放心,不会波及到简单的原理,简单的我也不会);
- 带你走读咱们的代码库(不要放心,不会波及到简单的源码,简单的我也不会);
- 通知你如何开发自定义插件(不要放心,看完了你只会晓得一个大略,真想上手还是得看咱们的官网文档)。
如果你没有听过 DevStream,不焦急,请先花半分钟工夫浏览下 DevStream 的 README。
我想听到你的骂声
咱们在三月初公布了 v0.1 版本,总有人质疑咱们是不是太早 release 了。
其实不早。咱们必定也不是不小心 release。
咱们是成心的。没错,成心的。咱们其实能够躲着偷偷再开发几个月,实现更多的性能,反对更多的插件,把 DevStream 做的更完满再 release。
然而咱们放心的是 “ 咱们认为好的性能 ” != “ 你真正须要的性能 ”
咱们有很多的想法,咱们有很多想做的性能,但咱们不是最终的用户。咱们当初做的很多事件其实是在 ” 假如 ”,在猜用户想要什么性能。
既然是想要晓得 ” 用户 ” 想要什么性能,为什么不早点 release 进来,让用户来通知咱们还缺什么,让用户通知咱们哪里做的不好呢?
那就收回去吧,先 release,听听用户的骂声。咱们要做的,就是不给用户第二次骂的机会,以最快的速度反馈用户的反馈,解决用户的问题。
行,废话了这么多,如果你对 DevStream 有一些趣味,欢送关上咱们的 GitHub repo,看下 README 和 quickstart,体验一下 DevStream 的性能。
我置信你在第一次应用 dtm 命令的时候,必定心中会屡次燃起骂人的欲望:
什么破玩意!!!
没关系,关上咱们的 Issues 页面,畅所欲言!只有 GitHub 不 ” 谐和 ” 你,咱们必定不 ” 谐和 ” 你。
你违心骂我,就阐明你心里还是有我,哈哈,谢谢!我心里也有你!
当然,提 Issues 是一种社区奉献行为,没错,不只是 pr,Issues 也算。对于 ” 社区贡献者 ” 咱们会提供无比激情的帮忙(相对超过你的设想)。
你能够不信,那么你提一个 pr 试试。当然兴许你会说提不来,那你就提个 issue 通知我你想提 pr,而后,你就有了被我打动的机会了!
至于给社区贡献者的 ” 精力 ” 上或者 ” 物质 ” 上的处分,当然有,不过我临时不想走漏。如果你违心尝试成为一个 ” 社区贡献者 ”,那么置信我,你不会悲观。
好奇心来了?
Good!让咱们丢掉双桨,屏住呼吸,跳下去吧。深刻看下 DevStream!
架构
一张好图胜千言啊
(如果你感觉这个图不够好,请移步英文版,英文版作者绘制的这个图,和我没关系)
咱们用了 Go plugin. 这或者有很多值得探讨的点,然而这里咱们简略先聊几句:
- 首先,咱们须要反对很多的 DevOps 工具,而后一种工具对应一个插件,听起来很天然;
- 接着,如同有很多可选的 “core-plugin” 可选架构,咱们发现 Golang 的 Plugins 机制满足需要;
- 而后,最初,这里如同还有些点须要列,然而,不好意思,我想不起来了。
状态
咱们把 DevStream (CLI 工具名字叫 dtm,别问我为啥,这是一个很长的故事,如果你感兴趣,能够看这里)
当作一个 “ 状态机 ”。
给一个输出,联合以后的状态,DevStream 会接着计算接下来该干什么。如果你对此感兴趣,那就跳到这里再看几眼。
目录构造
咱们的一个次要根据是 standard project layout。然而别去点这个链接,外面的内容太长了,或者不是你想看到的。看我的总结就行:
/cmd
: 入口包,别放太多货色在外面。/pkg
: 或者其余我的项目能用失去的一些代码,次要是一些 util。/internal
: 我的项目内的次要逻辑,不能被其余我的项目 import。/hack
: 一些次要的工具脚本等。/build
: 打包相干的一些脚本等。/docs
: 这个不须要解释了。/examples
: 这里次要用来保留示例配置。
解释不动了,大家能够看看英文版怎么形容的。我说过我是 ” 小白 ”,我不懂的。不过这个目录构造应该 Gopher 看起来很容易了解,大家顾名思义吧。
Core / Plugin
- Core 代码: https://github.com/merico-dev…
- Plugins 代码: https://github.com/merico-dev…
dtm apply
命令背地的逻辑是啥?
- 从这里开始:
/cmd/devstream/main.go
. - 接着
apply
命令在/cmd/devstream/apply.go
. - 而后 引擎
/internal/pkg/pluginengine
运行所有的apply
逻辑,
在这里:/internal/pkg/pluginengine/cmd_apply.go
.
而后,靠你本人去开掘其余细节了!
DevStream 发版太慢了!!!能不能快点???就问你能不能???
能,当然能!
首先装个 Go,如果你没有装好,能够参考官网文档。
git clone https://github.com/merico-dev/stream.git && cd streamgo install golang.org/x/tools/cmd/goimports@latest
#make sure your GOPATH/bin is in your PATH
#for example, run this:
export PATH=``go env GOPATH``/bin:$PATH
make build
#after you run "make build", you DO NOT need to run "dtm init" anymore
#run "dtm apply", "dtm delete" directly
#because "init" will try to download plugins from the internet,
#instead of using what you just builtdtm apply -f path_to_your_config.yaml
没看够?
祝贺你曾经走到这步了,要不要玩一点刺激的?比方尝试开发一个新插件?
每个插件都须要实现一些接口,定义在这些中央:
Create
Read
Update
Delete
能够参考一个曾经存在的插件,比方这个。
好好好,在你埋怨之前我想通知你一个秘密武器!开发一个新插件时须要复制粘贴很多的代码,创立反复的目录构造,这种事件让人感觉很不爽!
你感觉我会容忍这种不爽存在超过一天???
没错,不会,相对不会!
咱们开发了一个小工具,让你可能疾速生成一个新插件的骨架:
dtm develop create-plugin --name=my-pluing-name-here
好了。打完出工。兴许你还没看爽,然而我写累了。我要劳动了,I need a cup of coffee! now! bye!
* 最初,记得去看一下英文版,你会看到不一样的风光!
我不骗你哈,我是来搞笑的,你要谨严的常识,得去英文版看。
*
本文由博客群发一文多发等经营工具平台 OpenWrite 公布