Go 每日一库之 rxgo

简介ReactiveX,简称为 Rx,是一个异步编程的 API。与 callback(回调)、promise(JS 提供这种方式)和 deferred(Python 的 twisted 网络编程库就是使用这种方式)这些异步编程方式有所不同,Rx 是基于事件流的。这里的事件可以是系统中产生或变化的任何东西,在代码中我们一般用对象表示。在 Rx 中,事件流被称为 Observable(可观察的)。事件流需要被 Observer(观察者)处理才有意义。想象一下,我们日常作为一个 Observer,一个...阅读全文

Segmentfault 2020-10-19 00:32:32 darjun

Golang标准库——mime

mime mime实现了MIME的部分规定。 func AddExtensionType func AddExtensionType(ext, typ string) error 函数将扩展名和mimetype建立偶联;扩展名应以点号开始,例如".html"。 func FormatMediaType func FormatMediaType(t string, param map[string]string) string 函数根据RFC 2045和 RFC 2616的规定将媒体类型t和参数p...阅读全文

简书 2020-10-15 00:32:41 DevilRoshan

Golang标准库——net(1)

net net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。 虽然本包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口。crypto/tls包提供了相同的接口和类似的Dial和Listen函数。 Dial函数和服务端建立连接: conn, err := net.Dial("tcp", "google.com:80") if err != nil { // han...阅读全文

简书 2020-10-15 00:32:41 DevilRoshan

Golang标准库——io

io io包提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作。 因为这些接口和原语是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。 Variables var EOF = errors.New("EOF") EOF当无法得到更多输入时,Read方法返回EOF。当函数一切正常的到达输入的结束时,就应返回EOF。如果在一个结构...阅读全文

简书 2020-10-14 23:32:43 DevilRoshan

GO语言第一课:语言介绍和使用入门Demo

GO的代表项目来感受下它的牛逼 Docker - 容器 Kubernetes - 容器管理 Caddy - 一个webservice 可以用于替代nginx CockroachDB - 一个new sql数据库 MongoDB/Couchbase 工具 Dropbox Uber Google 部分产品 发展趋势 09年谷歌开源 12年发布1.0版 15年发布1.5版,重写垃圾回收,更好的并发 ... 当前1.15,工具链的完善 go语言设计 C++: 有性能保障,比如搜索引擎 JAVA: 复杂业...阅读全文

简书 2020-10-14 23:32:43 Wayne维基

Go 安装教程

一、在 Windows 上安装 Go 环境 首先在 Go 官网 下载 Windows 系统下的一键安装包。 image 然后双击打开该文件,一直点 Next 就行。 image image image 注意这里默认是安装到 C 盘,建议不要修改,因为环境变量会自动设置,如果安装到其他盘,那么可能需要手动修改所有环境变量的值。 image image image 二、查看环境变量 打开控制面板,点击用户账户: image 再点击用户账户: image 点击左边的更改我的环境变量: image 发现...阅读全文

Go package(2) strings 用法

go version go1.10.3Go中的字符串用法,可以在 godoc.org 上查看语法和用法。最简单的语法就是获取字符串中的子串s := "hello world" fmt.Println(s[1:3], s[0:])一:查找1、查找返回索引godoc.org上索引的方法Indexfunc Index(s, substr string) intIndex returns the index of the first instance of substr in s, or -1 if s...阅读全文

Segmentfault 2020-10-17 18:32:32 九卷

22.Golang设计模式之策略模式

策略模式 GitHub代码链接 策略模式(Strategy Pattern),一个类的行为或其算法可以在运行时改变。 什么是策略模式 策略模式定义一系列算法,把他们一个一个封装起来,并且使他可相互替换。 解决了什么问题 解决了在多种算法相似的情况下,使用if...else所带来的复杂和难以维护。策略模式 将这些算法封装成一个一个的类,任意的替换。 优点 算法可自由切换 避免多重条件判断 扩展性良好 缺点 策略类会增多 所有策略类都需要对外暴露 代码实现 1. 新建策略类接口 //Strategy...阅读全文

简书 2020-10-14 17:33:31 ShawnLee_123

0基础如何更快速入门Linux系统?学完Linux有哪些就业方向?

Linux系统是使用Linux内核及开源自由软件组成的一套操作系统,是一种类UNIX系统,其内核在1991年10月5日由林纳斯·托瓦兹首次发布。它的主要特性:Linux文件一切皆文件、完全开源免费、支持多用户和多任务、同时还支持多种架构平台、可靠的安全性、良好的稳定性、具有强大的网络功能、多样图形界面;近几年Linux系统慢慢吸引了不少人,正是由于它的强大,支撑着巨大的项目,并不断影响着大多数人的生活。其实大家对于Linux系统并不陌生,或多或少都有接触过,因为你身边已经无处不在了,比如你先现在...阅读全文

简书 2020-10-14 17:33:31 C语言编程学习基地

关于Golang panic用法详解

Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下(比如除数为 0了)。才使用Go中引入的Exception处理:defer, panic, recover。这几个异常的使用场景可以这么简...阅读全文

简书 2020-10-14 17:32:43 MO_ON_e503

Go检测并发访问共享资源是否有问题的工具: race detector

由于golang中的go是非常方便的,加上函数又非常容易隐藏go。所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题。所以在本质上说,goroutine的使用增加了函数的并发问题,这个问题,有经验的开发人员还是比较容易发现的,但是,很多时候,并发问题隐藏得非常深,即使是有经验的人,也不太容易发现或者 Debug 出来。针对这个问题,Go 提供了一个检测并发访问共享资源是否有问题的工具: race detector,它可以帮助我们自动发现程序有没有 data...阅读全文

简书 2020-10-14 16:34:00 就是耍帅

Linux下动态库(.so)和静态库(.a) 的区别

二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。不同的应用程序如果调用相同的库,那么在内存中只需要有一份该动态库(共享库)的实例。静态库和动态库的最大区别,静态情况下,把库直接加载到程序中,而动态库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的可复用度,和降低程序的耦合度。静态库在程序编译时会被连接到目标代码中,程序运行时...阅读全文

简书 2020-10-14 16:33:52 linux大本营

Kubernetes之服务优雅升级

前言 k8s本身就支持服务滚动升级,但是如果程序没有正确的处理退出信号时,就会导致部分请求直接被中断从而影响用户体验。 滚动升级步骤 每个pod代表一个集群中的节点,在 k8s 做rolling-update的时候默认会向旧的pod发生一个SIGTERM信号,如果应用没有对SIGTERM信号做处理的话,会立即强制退出程序,这样的话会导致有些请求还没处理完,前端应用请求错误。 先来回顾下 k8s 的滚动升级步骤: 启动一个新的 pod 等待新的 pod 进入 Ready 状态 创建 Endpoin...阅读全文

你还在手撕微服务?快试试 go-zero 的微服务自动生成

0. 为什么说做好微服务很难?要想做好微服务,我们需要理解和掌握的知识点非常多,从几个维度上来说:基本功能层面并发控制&限流,避免服务被突发流量击垮服务注册与服务发现,确保能够动态侦测增减的节点负载均衡,需要根据节点承受能力分发流量超时控制,避免对已超时请求做无用功熔断设计,快速失败,保障故障节点的恢复能力高阶功能层面请求认证,确保每个用户只能访问自己的数据链路追踪,用于理解整个系统和快速定位特定请求的问题日志,用于数据收集和问题定位可观测性,没有度量就没有优化对于其中每一点,我们都需要用很长的...阅读全文

Segmentfault 2020-10-17 07:32:32 kevinwan

go-flag

简介在上一篇文章中,我们介绍了flag库。flag库是用于解析命令行选项的。但是flag有几个缺点:不显示支持短选项。当然上一篇文章中也提到过可以通过将两个选项共享同一个变量迂回实现,但写起来比较繁琐;选项变量的定义比较繁琐,每个选项都需要根据类型调用对应的Type或TypeVar函数;默认只支持有限的数据类型,当前只有基本类型bool/int/uint/string和time.Duration;为了解决这些问题,出现了不少第三方解析命令行选项的库,今天的主角go-flags就是其中一个。第一次...阅读全文

简书 2020-10-14 10:32:53 向春晓