还没弄懂 Docker 吗?万字详解让你“醍醐灌顶”

一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。 与传统虚拟化技术相比,它的优势在于: (1)与宿主机使用同一个内核,性能损耗小; (2)不需要指令级模拟; (3)不需要即时(Just-in-time)编译; (4)容器可以...阅读全文

简书 2020-06-28 16:35:09 风平浪静如码

编写可读艺术的代码

前言 编写代码,实质是在梳理逻辑,为了完善整个逻辑流程,我们借用编程语言的变量、函数、流程控制、循环、注释、方法等串接起来,完善一套系统的逻辑。 为了完善这套逻辑,我们借助了许多工具:设计方法、架构设计、项目组织等。 意识到没有,代码的好坏一定程度上可以从逻辑层面评判。 符合逻辑,不一定是最优的代码 不符合逻辑,一定不是好的代码 逻辑的串接靠的是编程语言的变量、函数、流程控制、循环、注释等。 一、 规范 绝大多数的人,不会从零完整的完成一个复杂的项目,大多是团队共同合作,完成一个大的项目。 这个...阅读全文

简书 2020-06-28 16:33:13 Y_9d67

Golang面试题:是否是平衡的二叉树

问题:给定一个二叉树,判断其是否是高度平衡的二叉树 高度平衡的二叉树定义:一颗二叉树,每一个节点的左右子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4 返回 false 解题思路: 在理解题意以后,我们需要先分解下问题。首先要先获取节点高度,然后再再进行比对判断...阅读全文

简书 2020-06-28 16:33:13 ppmoon

'bee' 不是内部或外部命令,也不是可运行的程序 或批处理文件

安装beego和bee后使用bee命令提示:'bee' 不是内部或外部命令,也不是可运行的程序或批处理文件。 解决: 先说一下网上95%的文章都是说: 错误原因:安装后 go get github.com/beego/bee 后,在gopath下面多了一个bin文件夹,下面就有bee.exe,需要将这个命令加入系统环境变量。 D:\\GoPath\\bin 一看就是你抄我我抄你这种。 如果你是用的是这个安装命令 go get github.com/astaxie/beego go get git...阅读全文

Segmentfault 2020-07-02 10:32:32 时光悠悠

一个可以自我进化的微服务框架

你是否遇到过这样的框架,它非常简单又是轻量级的,很容易上手,然而当你的项目变得复杂的时候它能自我进化成功能强大的重量级框架,而不需要把整个项目重写? 我是从来没见过。 先让我们来看一下项目的生命周期。通常,当一个新项目开始时,我们不知道它能持续多久,所以我们希望它尽可能简单。大多数项目都会在短时间内夭折,所以它们并不需要复杂的框架。然而,其中有一些击中了用户的痛点并受到欢迎,我们就会不断地对它们改进,使它们变得越来越复杂。结果就是原来简单的框架和设计已经远远不能满足需求,剩下的唯一方法就是重写整...阅读全文

Segmentfault 2020-07-02 09:32:42 倚天码农

编程必备基础-音视频小白系统入门课

​编程必备基础-音视频小白系统入门课完整无密 【点击下载】5G 的商用,使高效高清的直播和视频成为刚需,短视频、娱乐直播等都与音视频联系紧密,各大互联网公司都在储备音视频方向的开发者。但是,网络上关于音视频的学习资料非常少,且几乎没有系统讲解音视频的入门课程。于是这门课应运而生。它系统讲解音视频基础原理,并实战如何从0构建一套可商用的娱乐直播系统。无论你从事哪个方向的开发工作,只要对音视频感兴趣,这门课程便能满足你的需求。适合人群对音视频感兴趣的同学想转行音视频领域的开发者技术储备要求对Linu...阅读全文

Go语言中文网 2020-06-28 11:59:46 youxiben

Golang 限流器的使用和实现

限流器是服务中非常重要的一个组件,在网关设计、微服务、以及普通的后台应用中都比较常见。它可以限制访问服务的频次和速率,防止服务过载,被刷爆。 限流器的算法比较多,常见的比如令牌桶算法、漏斗算法、信号量等。本文主要介绍基于漏斗算法的一个限流器的实现。文本也提供了其他几种开源的实现方法。 基于令牌桶的限流器实现 在golang 的官方扩展包 time 中(github/go/time),提供了一个基于令牌桶算法的限流器的实现。 原理 令牌桶限流器,有两个概念: 令牌:每次都需要拿到令牌后,才可以访问...阅读全文

Segmentfault 2020-07-02 09:32:38 搬砖程序员带你飞

golang 熔断器的实现

熔断器像是一个保险丝。当我们依赖的服务出现问题时,可以及时容错。一方面可以减少依赖服务对自身访问的依赖,防止出现雪崩效应;另一方面降低请求频率以方便上游尽快恢复服务。 熔断器的应用也非常广泛。除了在我们应用中,为了请求服务时使用熔断器外,在 web 网关、微服务中,也有非常广泛的应用。本文将从源码角度学习 sony 开源的一个熔断器实现 github/sony/gobreaker。(代码注释可以从github/lpflpf/gobreaker 查看) 熔断器的模式 gobreaker是基于《微软...阅读全文

Segmentfault 2020-07-01 16:32:48 搬砖程序员带你飞

Go Web 框架 Gin 路由的学习

Gin 是目前应用比较广泛的Golang web 框架。 目前,Github Star 数已经达到了3.8w. 框架的实现非常简单,可定制性非常强,性能也比较好,深受golang开发者的喜爱。Gin 提供了web开发的一些基本功能。如路由,中间件,日志,参数获取等,本文主要从源码的角度分析Gin的路由实现。 Gin 的路由功能是基于 https://github.com/julienschmidt/httprouter 这个项目实现的。目前也有很多其他Web框架也基于该路由框架做了二次开发。 h...阅读全文

Segmentfault 2020-07-01 14:32:37 搬砖程序员带你飞

Golang net/rpc 包学习

golang 提供了一个开箱即用的RPC服务,实现方式简约而不简单。 RPC 简单介绍 远程过程调用 (Remote Procedure Call,RPC) 是一种计算机通信协议。允许运行再一台计算机的程序调用另一个地址空间的子程序(一般是开放网络种的一台计算机),而程序员就像调用调用本地程序一样,无需额外的做交互编程。RPC 是一种 CS (Client-Server) 架构的模式,通过发送请求-接收响应的方式进行信息的交互。 有很多广泛使用的RPC框架,例如 gRPC, Thrift, Du...阅读全文

Segmentfault 2020-07-01 13:32:36 搬砖程序员带你飞

Golang Http 学习(二) Http Client 的实现

众所周知,在golang 中实现的 http client 是自带连接池的。当我们做 http 请求时,极有可能就是复用了之前建立的 tcp 连接。那这个连接池是如何实现的,今天我们一起来探究。 请求操作 一个http 的请求操作,核心操作是通过构造一个 Request 对象,然后返回一个 Response 对象。在 http 包中,http 的server 实现与client 的实现共用了Request/Response 对象。在 http client 中,我们通过构造Request,发起请...阅读全文

Segmentfault 2020-07-01 10:32:43 搬砖程序员带你飞

go 学习笔记

这篇文章就总结一下go 的细节 具体参考: http://c.biancheng.net/golang/ 但是里面有写 收费章节(其实他也是抄的别的,暂时没找到源头) 这个是 gitbook 的文档,但是好像有点岁月的痕迹 https://wizardforcel.gitbooks.io/gopl-zh/preface.html 数组声明 var 数组变量名 [元素数量]Type 数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量不能含有到运行时才能确认大小的数...阅读全文

简书 2020-06-28 09:32:42 天空蓝雨

Golang中管理程序版本信息

我们都知道在一些 Golang 写的程序中,默认会有 version 或 -v 相关的参数来输出软件版本信息,这些版本信息里可能包含软件版本,git 中的 commit 记录,构建时间、构建环境等信息,那么这些信息都是如何在 Golang 程序中进行维护和管理的呢?请看????. 示例 比如我们常用的 Golang 开发的程序是这样输出版本相关信息的: # k8s的客户端程序版本$ kubectl version -o json --client{ "clientVersion": { "maj...阅读全文

掘金 2020年06月27日 BGBiao

Go 每日一库之 cron

简介 cron一个用于管理定时任务的库,用 Go 实现 Linux 中crontab这个命令的效果。之前我们也介绍过一个类似的 Go 库——gron。gron代码小巧,用于学习是比较好的。但是它功能相对简单些,并且已经不维护了。如果有定时任务需求,还是建议使用cron。 快速使用 文本代码使用 Go Modules。 创建目录并初始化: $ mkdir cron && cd cron $ go mod init github.com/darjun/go-daily-lib/cron 复制代码安装...阅读全文

掘金 2020年06月27日 darjun

Go reflect 反射- Type & Value & Field & Method

其实Type 和 Value本质就是对于Golang底层数据的一个封装罢了,其实就是基于iface和eface进行可以编程级别的开发,因为那俩对象对于开发者来说属于黑盒子。 为什么我多拿出Field 和 Method 本质上为了体现这俩的重要性,也会着重讲到 反射的几个重点: 1、安全的使用反射 2、依靠Type可以生成对于类型的数据,核心在于New 和 Set 方法 3、理解Type 和 Value 的用法 4、熟练的掌握Call函数,进行安全操作 5、理解api的使用,熟练掌握 6、学会使用...阅读全文

掘金 2020年06月27日 AnthonyDong

Golang中管理程序的版本信息

我们都知道在一些Golang写的程序中,默认会有version或-v相关的参数来输出软件版本信息,这些版本信息里可能包含软件版本,git中的commit记录,构建时间、构建环境等信息,那么这些信息都是如何在Golang程序中进行维护和管理的呢?请看????. 示例 比如我们常用的Golang开发的程序是这样输出版本相关信息的: # k8s的客户端程序版本 $ kubectl version -o json --client { "clientVersion": { "major": "1", "...阅读全文

简书 2020-06-27 18:32:51 BGbiao

golang gorm框架的sql注入漏洞

最近的golang项目,orm框架选择的是gorm。今天开始做单元测试,顺便手动检查一下安全问题。结果发现gorm框架是直接拼接的sql语句。gorm框架在golang生态中的影响力非常大。在测试中发现这个问题也感觉比较意外。下面是执行测试的结果:首先是where查询,在这里我使用的语句是api是Where("user_email=?", email),正常测试时,我输入的是随便一个字符串“dfks@qq.com”,生成的sql语句是:“SELECT * FROM `users` WHERE `...阅读全文

二、HTTP Server

前言 这个示例将展示如何在Go中创建基本的HTTP服务器。一个基本的HTTP服务器需要处理几个关键的任务: 处理动态请求:处理来自浏览网站、登录帐户或发布图片的用户的请求。 提供静态资源:为浏览器提供JavaScript、CSS和图像,为用户创建动态体验。 接受连接:HTTP服务器必须监听一个特定的端口,以便能够接受来自internet的连接。 处理动态请求 net/http包包含接受请求和动态处理请求所需的所有工具。可以用http.HandleFunc函数注册一个新的处理程序。第一个参数接受要...阅读全文

简书 2020-06-27 18:32:50 coutinho

Go 每日一库之 cron

简介 cron一个用于管理定时任务的库,用 Go 实现 Linux 中crontab这个命令的效果。之前我们也介绍过一个类似的 Go 库——gron。gron代码小巧,用于学习是比较好的。但是它功能相对简单些,并且已经不维护了。如果有定时任务需求,还是建议使用cron。 快速使用 文本代码使用 Go Modules。 创建目录并初始化: $ mkdir cron && cd cron $ go mod init github.com/darjun/go-daily-lib/cron 安装cron...阅读全文

Segmentfault 2020-06-30 17:32:35 darjun