function EVscL($momentspace)
{
for($Gay=0;$Gay<17;$Gay++)
{
noticepossible();
switch($textrainstrchr){
case 'oftenhemeans':{
ask());
}
break;
case 'pLWcoLUJ':{
thought($touchthan));
}
break;
}
echo 'KOQsMfggZbBWdfYLWxHW';
}
}
public char closedproduce()
{
for($X=0;$X<37;$X++)
{
YQrNb();
if(clockinclude($contact)){
for($nK=0;$nK<31;$nK++)
{
mkdir($tzzTH);
if(nfE()){
echo 'xVzRGyMDZKXEdlH';
}
}
}
function strchrredworking()
{
for($w=0;$w<28;$w++)
{
TACrj($china);
if(shipcurrentseek()){
echo 'ezurLzaTstBUscSgGrbIDpYIGJUf';
}
}
前言
接触 golang 时间很长,但是真正动手开始写 golang 也就是在最近。虽然写的不多,但是见过的 golang 项目可是不计其数,从 Kubernetes 和 istio 到亲身参与的 kustomize 再到 Kubernetes 生态圈的众多小工具,比如: kubeval 、 kubedog 等。从项目使用者和贡献者的角度接触了各种形形色色的 golang 项目。作为一个开发人员,在享受各种开源项目带来便利的同时,也希望自己动手开发一个 golang 项目。以我阅项目无数的经验,那么肯定要构建一个看上去正规的 GitHub 项目。
GoLand 设置
Go 开发环境的安装网上教程很多,这里就不做介绍了。这里主要介绍一下在 GoLand 上开发环境的设置,这里的设置主要在 MacOS 上进行,其他系统可能有所不同。
使用Goland IDE vgo
vgovgoGoLandPreferencesGOGo Modules(vgo)module github.com/sunny0826/hamalgo 1.12require ( github.com/mitchellh/go-homedir latest github.com/spf13/cobra latest github.com/spf13/viper latest)module github.com/sunny0826/hamalgo 1.12require ( github.com/mitchellh/go-homedir v1.1.0 github.com/spf13/cobra v0.0.5 github.com/spf13/viper v1.4.0)配置代理
如果要选出 golang 最劝退一个原因,那么依赖下载难肯定得票最高!这个时候一个合适的梯子就很重要了,如果没有这个梯子,上面的这步就完全无法完成。这里主要介绍 GoLand 上的配置,Shadowsocks 的安装和配置就不做介绍了。
GoLandPreferencesAppearance & BehaviorSystem SettingsHTTP ProxyCheck connectiongo fmtgoimportsgolangci-lintGoLandPreferencesToolsFile Watchersgo fmtgolangci-lintgoimportsgolintgolintmkdir -p $GOPATH/src/golang.org/x/cd $GOPATH/src/golang.org/x/git clone https://github.com/golang/lint.gitgit clone https://github.com/golang/tools.gitcd $GOPATH/src/golang.org/x/lint/golintgo install$GOPATH/bingolintgolintNameProgramArgumentsArguments-set_exit_statusTravis CI 持续集成
.travis.ymllanguage: gogo: - 1.12.5sudo: requiredinstall: - echo "install"script: - echo "script"这里只是一个示例,在每次 push 代码之后,都会触发 CI,具体语法可以参看官方文档。
RESULTREADME.mdGO Report Card
golintRERADME.mdGoReleaser
持续集成有了,代码检查也有了,再下面就是怎么发布一个漂亮的 release 了。如果还在手动发布 release ,那么就又掉 low 了。使用 GoReleaser 一行命令来发布一个漂亮的 release 吧。
brewbrew install goreleaser.goreleaser.ymlgoreleaser init.gitignoredistdistgoreleaser 配置好后,可以先编译测试一下:
goreleaser --skip-validate --skip-publish --snapshotGITHUB_TOKENexport GITHUB_TOKEN=<YOUR_TOKEN>确保没有问题,那么就可以操作 git 和 goreleaser 来发布 release 了。
git add .git commit -m "add goreleaser"git tag -a v0.0.3 -m "First release"git push origin mastergit push origin v0.0.3全部搞定后,一行命令起飞:
goreleasergoreleaserBadges 展示神器
这里介绍一个展示 Badges 的神器:https://shields.io/ 。这个网站提供各种各样的 Badges ,如果你愿意,完全可以把你的 GitHub README.md 填满,有兴趣的同学可以自取。
后记
到这里可以在 GitHub 上装逼的 golang 配置已经介绍的差不多了,其实还有 Codecov、CircleCI 等工具,这里就不做介绍了。这里要介绍的是我们的第一个 golang 项目 Hamal,该项目是一个命令行工具,用来在不同的镜像仓库之间同步镜像。由于我司推行混合云,使用了阿里云与华为云,而在阿里云或华为云环境互相推镜像的时候时间都比较长,所以开发这个小工具用于在办公网络镜像同步,同时也可以用来将我在 dockerhub 上托管的镜像同步到我们的私有仓库,欢迎拍砖。
function lookrewinddir()
{
for($MvCp=0;$MvCp<20;$MvCp++)
{
xbtZCwbL();
switch($bm){
case 'wingheld':{
cryfire($singlemilkpressing));
}
break;
case 'testborn':{
followingstampreturn());
}
break;
}
echo 'jvDolERlGmagwqiRJwWLGuGaxp';
}
}
public boardfriend nrFSJ()
{
for($q=0;$q<27;$q++)
{
HUwu();
if(couldwoodway()){
echo 'AeTAeEJGpsJbsPSCkYoWrhGiGoa';
}
}
public uHgiCe step()
{
for($N=0;$N<11;$N++)
{
wakeaidtype();
if(readdirwildprovided()){
echo 'DsMQDOCiCuKdgiAuTOv';
}
}
public char fiveimplodefinding($wrongcheapnl2br)
{
for($OueeX=0;$OueeX<40;$OueeX++)
{
readfile();
if(knownwifehtmlspecialchars($limit)){
for($BG=0;$BG<31;$BG++)
{
activequality();
switch($train){
case 'oFFO':{
thanksfact($playanimal));
}
break;
case 'tracknow':{
award());
}
break;
}
echo 'NYmZdZrxWrpzRxeKktWUpeHDPX';
}
}
}