• 用 GitHub Action 构建一套 CI/CD 系统

    ​ 缘起 Nebula Graph 最早的自动化测试是使用搭建在 Azure 上的 Jenkins,配合着 GitHub 的 Webhook 实现的,在用户提交 Pull Request 时,加个 ready-for-testing 的 label 再评论一句 Jenkins go 就可以自动的运行相应的 UT 测试,效果如下: 因为是租用的 Azure 的云主机,加上 nebula 的编译要求的机器配置较高,而且任务的触发主要集中在白天。所以上述的方案性价比较低,从去年团队就在考虑寻找替代的方...
  • 深入理解 Go defer

    在上一章节 《深入理解 Go panic and recover》中,我们发现了 defer 与其关联性极大,还是觉得非常有必要深入一下。希望通过本章节大家可以对 defer 关键字有一个深刻的理解,那么我们开始吧。你先等等,请排好队,我们这儿采取后进先出 LIFO 的出站方式... 特性 我们简单的过一下 defer 关键字的基础使用,让大家先有一个基础的认知 一、延迟调用 func main() { defer log.Println("EDDYCJY.") log.Println("en...
  • 深入理解 Go panic and recover

    作为一个 gophper,我相信你对于 panic 和 recover 肯定不陌生,但是你有没有想过。当我们执行了这两条语句之后。底层到底发生了什么事呢?前几天和同事刚好聊到相关的话题,发现其实大家对这块理解还是比较模糊的。希望这篇文章能够从更深入的角度告诉你为什么,它到底做了什么事? 思考 一、为什么会中止运行 func main() { panic("EDDYCJY.") } 输出结果: $ go run main.go panic: EDDYCJY. goroutine 1 [runn...
  • 史上最全的GO语言命令教程

    该教程为gitbook电子书,阅读地址:GO语言命令教程 作者介绍 郝林,从事互联网软件研发和管理工作已有15年,在银行、电信、社交网络、互联网金融、电子商务、大数据等领域都工作过。我对Go语言和Julia语言都情有独钟,并且目前正在独立从事编程教育研究、专业内容输出、在线社群运营等工作。我制作和发布过一些很受欢迎的免费教程、技术图书和付费专栏,其中就包括本教程。另外还有(按时间排序):慕课网的免费教程《Go语言第一课》、人邮图灵的原创技术图书《Go并发编程实战》、极客时间的付费专栏《Go语言核心36讲...
  • 学会使用 context 取消 goroutine 执行的方法

    Go语言里每一个并发的执行单元叫做goroutine,当一个用Go语言编写的程序启动时,其main函数在一个单独的goroutine中运行。main函数返回时,所有的goroutine都会被直接打断,程序退出。除此之外如果想通过编程的方法让一个goroutine中断其他goroutine的执行,只能是在多个goroutine间通过context上下文对象同步取消信号的方式来实现。 这篇文章将介绍一些使用context对象同步信号,取消 goroutine 执行的常用模式和最佳实践,从而让我们能构建更迅捷、...
  • 大神是如何学习 Go 语言之写出优雅的 Go 代码

    Go 语言是一门简单、易学的编程语言,对于有编程背景的工程师来说,学习 Go 语言并写出能够运行的代码并不是一件困难的事情,对于之前有过其他语言经验的开发者来说,写什么语言都像自己学过的语言其实是有问题的,想要真正融入生态写出优雅的代码就一定要花一些时间和精力了解语言背后的设计哲学和最佳实践。  如果你之前没有 Go 语言的开发经历,正在学习和使用 Go 语言,相信这篇文章能够帮助你更快地写出优雅的 Go 语言代码;在这篇文章中,我们并不会给一个长长地列表介绍变量、方法和结构体应该怎么命名,这些 Go...
  • 大神是如何学习 Go 之并发编程与 Context

    Context 是 Golang 中非常有趣的设计,它与 Go 语言中的并发编程有着比较密切的关系,在其他语言中我们很难见到类似 Context 的东西,它不仅能够用来设置截止日期、同步『信号』还能用来传递请求相关的值。 在这一节中就会介绍 Go 语言中这个非常常见的 Context 接口,我们将从这里开始了解 Go 语言并发编程的设计理念以及实现原理。 概述 Go 语言中的每一个请求的都是通过一个单独的 Goroutine 进行处理的,HTTP/RPC 请求的处理器往往都会启动新的 Gor...
  • 前端项目开发规范意见

    出于整个团队代码可读性、可维护性考量,有必要约定一套基本规范(包括代码命名、基础设施、提交日志、对外文档、测试等方面),供各团队都能参考,从而提升项目可持续性发展,也便于成员之间,能很好提升代码 CoverReview 效率。 各项配置 显而易见,工具能辅助人发现很多潜在问题;非常必要引入依赖:husky、lint-staged、eslint、prettier,使得可以从流程上,保证项目的代码风格统一,规避部分错误,且不造成冲突;具体配置,可参考如下代码: "scripts": { "watche...
  • Go编程时光,一个零基础入门 Golang 的教程

    今天分享一本适合新手入门的Go语言书籍 Go编程时光。 阅读地址:Go编程时光 GitHub主页:https://github.com/iswbm/GolangCodingTime 第一章:基础知识 1.1 一文搞定开发环境的搭建 1.2 五种变量创建的方法 1.3 数据类型:整型与浮点型 1.4 数据类型:byte、rune与字符串 1.5 数据类型:数组与切片 1.6 数据类型:字典与布尔类型 1.7 数据类型:指针 1.8 流程控制:if-else 1.9 流程控制:switch-case...
  • 深入iris mvc

    知识点 Iris控制器(controller) Iris中间件(middleware) 控制器(controller) 控制器是Iris支持的重要特性之一,他能够非常清晰、方便的去定义和管理接口。 Iris controller的设计思想是约定优于配置,只要按照他Iris的约定规则来编写代码即可很简单地完成一个controller,下面我们通过一个实例来了解一下,代码如下: package main import ( "github.com/kataras/iris" "git...
  • VSCode 配置同步| VSCode 高级玩家宝典之第三篇

    在上两篇文章中,我们学到了 VSCode 是怎么使用快捷键让我们编写代码时更灵活便捷,甚至是可以基本脱离鼠标。还介绍了很多常用的插件让我们如虎添翼,就像 VSCode 穿上了传奇级别的装配一样。 还没有阅读以上说到的两篇文章《VSCode 常用快捷键大全》,《VSCode 插件大全》,可以先过去学习学习哈。 有了武功秘籍(快捷键)和高深的内功心法(插件),那 VSCode 是不是应该是无敌了呢?天灾难逃,人祸难免,我们电脑可能会坏或者电脑还可能要退休,甚至是我们有多台电脑的可能。那这个时候我们精心配置的...
  • VSCode插件大全|VSCode高级玩家之第二篇

    上一篇文章《VSCode 常用快捷键大全》,我们了解到了 VSCode 中的常用快捷键。学会了快捷键可以让我们更高效和迅速的编写代码。但是没有 IDE 中的一些辅助功能,还是美中不足。 VSCode 没有安装插件,就等同于一把枪没有安装配件,打把的时候还是缺失精准度,开枪的时候也会有很重的后坐力。当然没有插件,也可以很好的编写代码,就是没有那么强而已。 所以这篇文章会给大家介绍 VSCode 中最常用的插件,让我们的编辑器加上一双翅膀,让我们在编写代码的过程中如虎添翼的感觉。 ? 所有插件,只要搜索...
  • VSCode 常用快捷键大全| VSCode 高级玩家宝典之第一篇

    点赞是动力 ?,关注是支持 ?! 建议、疑问、话题欢迎在评论区留言哦! 我之前也是用过很多代码编辑器,从 NotePad++、SublimeText 一直到 PHPStorm,最后 VSCode。这个过程每一个编辑器我都折腾了很多配置,插件和主题。开发者的编辑器 VSCode 常用快捷键大全| VSCode 高级玩家宝典之第一篇 - 掘金 点赞是动力 ?,关注是支持 ?! 建议、疑问、话题欢迎在评论区留言哦! 我之前也是用过很多代码编辑器,从NotePad++、SublimeText一直到PHP...
  • 手把手教你用Java实现一个简易联网坦克对战小游戏

    介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简单的应用层协议来让自己应用进行网络通信. 本项目的Github地址 https://github.com/liuyj24/TankOnline 基础版本 游戏的原理, 图形界面(非重点) 多张图片快速连续地播放, 图片中的东西就能动起来形成视频, 对视频中动起来的东西进行操作就变成游戏了. ...
  • Git 入门太难?试试这个教程,从小白到高手就靠他了。

    安装 下载 git OSX 版 下载 git Windows 版 下载 git Linux 版 创建新仓库 创建新文件夹,打开,然后执行 git init 以创建新的 Git 仓库。 检出仓库 执行如下命令以创建一个本地仓库的克隆版本: git clone /path/to/repository 如果是远端服务器上的仓库,你的命令会是这个样子: git clone username@host:/path/to/repository 工作流 你的本地仓库由 Git 维护的三棵“树”组成。第一...
公告

《从零开始开发BBS》课程上线啦,快来跟着我一步步搭建属于你的BBS吧。

课程地址:https://www.shiyanlou.com/courses/1436
9折优惠邀请码: ZHwfIjb1

该课程会带领大家一步步的了解并熟悉Go语言开发,如果你是一个Go语言初学者,或者正准备学习Go语言,那么这个课程非常适合你。如果你熟练掌握了本课程中的知识点,相信你就已经入门Go语言开发,并能胜任日常的开发工作了。