使用 Go 语言创建 WebSocket 服务

感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18504.html 今天介绍如何用 Go 语言创建 WebSocket 服务,文章的前两部分简要介绍了 WebSocket 协议以及用 Go 标准库如何创建 WebSocket 服务。第三部分实践环节我们使用了 gorilla/websocket 库帮助我们快速构建 WebSocket 服务,它帮封装了使用 Go 标准库实现 WebSocket 服务相关的基础逻辑,让我们能从繁琐的底层代码中解脱出来,...阅读全文

51CTO博客 2020-04-02 10:30:23 朱柿子

Go语言库系列之dotsql

导读:能单独拎出SQL文件的某一行或几行执行,是不是非常有趣?今天我们来介绍一下这个有意思的库--dotsql。 背景介绍 dotsql不是ORM,也不是SQL查询语句的构建器,而是可以在一个SQL文件中拎出某几行来执行的工具,非常类似于ini配置文件的读取。如果还不理解,我们来看如下内容。 -- name: create-users-table CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VA...阅读全文

掘金 2020年04月02日 平也

Go语言库系列之dotsql

导读:能单独拎出SQL文件的某一行或几行执行,是不是非常有趣?今天我们来介绍一下这个有意思的库--dotsql。 背景介绍 dotsql不是ORM,也不是SQL查询语句的构建器,而是可以在一个SQL文件中拎出某几行来执行的工具,非常类似于ini配置文件的读取。如果还不理解,我们来看如下内容。 -- name: create-users-table CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name VA...阅读全文

Segmentfault 2020-04-06 13:32:33 平也

简单易懂的golang[go-micro]微服务

微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。 一般的微服务工作流程都可以用写明这种图来表达。 先把自己的服务注册到注册中心 客户端调用的时候去注册中心查询调用的服务的服务器列表 得到服务列表,随机调取一台进行远程协程 我们这里的注册中心使用的是ETCD 1.为什么不选择Redis? ps:首先注册中心的存放必须保证稳定,不可缺失。要不注册中心挂了,你...阅读全文

Segmentfault 2020-04-06 11:32:34 傻梦兽0

你的Helm安全吗?

一、背景Kubernetes是目前最为流行、成为事实标准的容器集群管理平台,为容器化应用提供了部署运行、资源调度、服务发现和动态伸缩等一系列完整功能。在Kubernetes当中,用户通过使用API对象,如Pod、Service、Deployment等,来描述应用的程序规则,而这些资源对象的定义一般需要写入一系列的YAML文件中,然后通过 Kubernetes 命令行工具Kubectl进行部署。由于通常应用程序都涉及到多个Kubernetes API对象,而要描述这些API对象就可能要同时维护多个...阅读全文

Go语言中文网 2020-04-02 12:16:18 JFrogChina

GO语言从入门到实战

GO语言从入门到实战Go语言也称 Golang,兼具效率、性能、安全、健壮等特性。这套Go语言教程(Golang教程)通俗易懂,深入浅出,既适合没有基础的读者快速入门,也适合工作多年的程序员查阅知识点。这套教程在讲解一些知识点时,将 Go 语言和其他多种语言进行对比,让掌握其它编程语言的读者能迅速理解 Go 语言的特性。 更多资源请关注 公众号“资苑君”阅读全文

简书 2020-04-02 09:33:02 资苑君

【朝花夕拾】Golang之Go Module工程实践

一、背景 在引入Go Module管理之前,即在Go 版本在1.11之前,项目的框架结构主要是bin、pkg、src,如下的结构应该都比较熟悉 ~/projectname/ bin/ pkg/ src/ mypack/ --项目内容 foo.go bar.go mypack_test.go commpack --三方公共库 comunit.go 正常情况下,如果引入第三方库,有三种引入方式: 一般三方库代码都是需要放在GOPATH的Src路径下面,然后直接引入 import ( "commpac...阅读全文

简书 2020-04-02 09:33:01 爱看书的鲤鱼

Js、Golang正则匹配指定规则里的内容

1、 JS let content = '烟花易冷人事易分 而你在问我是否还认真 千年后累世情深还有谁在等 ――《${name}》${time}' var reg = /\$\{(\w+)\}/g let variableArrey = content.match(reg) console.log(variableArrey) VM456:7 (2) ["${name}", "${time}"] 结果 ["${name}", "${time}"] 规则里的内容,重点:.replace(reg,'...阅读全文

简书 2020-04-02 09:32:58 承诺一时的华丽

leetcode_622

Golang: 思路:直接用数组实现了,感觉有点不太符合题意 代码如下: type MyCircularQueue struct { stack []int length int } /** Initialize your data structure here. Set the size of the queue to be k. */ func Constructor(k int) MyCircularQueue { return MyCircularQueue{ stack:[]int{}...阅读全文

简书 2020-04-02 09:32:58 淳属虚构

leetcode_623

Golang: 思路:还是通过层序遍历的方式来实现 代码如下: func addOneRow(root *TreeNode, v int, d int) *TreeNode { if d==1{ return &TreeNode{Left:root,Val:v} } if root!=nil{ stack:=[]*TreeNode{root} depth:=1 for depth<d-1{ length:=len(stack) for i:=0;i<length;i++{ if stack[i]...阅读全文

简书 2020-04-02 09:32:58 淳属虚构

GoLang之使用Context控制请求超时

起因   之前接触了一个需求:提供一个接口,这个接口有一个超时时间,如果超时了返回超时异常;这个接口中调用其他的接口,如果调用超时了,所有请求全部结束。  在这个接口中,我使用了go协程去调用其他接口,所以不仅涉及到请求的超时控制,而且还涉及到父协程对子协程的控制问题。在翻阅了一些资料之后,了解到了Context的基本知识。 Context   Context是golang.org.pkg下的一个包,类型是接口类型。主要功能有 父协程控制所有的子协程   Context可以通过context.B...阅读全文

Segmentfault 2020-04-06 10:32:34 MACdress

浅尝Go语言GC

大家好,我是小栈君,因为个人和工作的缘故,所以拖更了一点时间,但是关于拖更的内容小栈君会在后续的时间中补回来,还希望大家继续支持和关注小栈君。当然,在国内疫情稍微减缓的情况下,小栈君在这里也多说两句,在非常时刻,我们应当保持警惕,清洗手,多通风,避免人群聚集,希望大家平安健康, 闲话不多说,我们直接进入正题,今天给大家分享的事关于Go语言中的GC,本期的分享并没有多少代码可言,都是一些理论知识,希望大家耐心且看完,因为能力有限,所以这边小栈君会尽量用大白话来进行叙述,如有错误之处,还请多多谅解。...阅读全文

Segmentfault 2020-04-05 18:32:33 IT干货栈

Go语言库系列之flag

背景 终端(命令行)操作是程序员的必备技能,但是你知道怎么通过golang制作出如下命令吗? $ flag girl -h Usage of girl: -height int 身高 (default 140) $ flag girl --height 170 恭喜你获得了身高 170 的女朋友 极速上手 整个实现非常简单,只需要5个步骤 第一步,引库 import "flag" 第二步,定义变量 定义该变量的作用是存储命令行参数传来的值 var height int 第三步,配置命令信息 在m...阅读全文

Segmentfault 2020-04-06 09:32:33 平也

Go 每日一库之 govaluate

简介 今天我们介绍一个比较好玩的库govaluate。govaluate与 JavaScript 中的eval功能类似,用于计算任意表达式的值。此类功能函数在 JavaScript/Python 等动态语言中比较常见。govaluate让 Go 这个编译型语言也有了这个能力! 快速使用 先安装: $ go get github.com/Knetic/govaluate 后使用: package mainimport ( "fmt" "log" "github.com/Knetic/govalua...阅读全文

Segmentfault 2020-04-05 20:32:38 darjun

工欲善其事,必先利其器——DevOps中如何管理工具包

一、背景作为DevOps交付流水线的开发者,为支持CI/CD中各项任务的自动化,都需要依赖多种包管理工具来下载各种相关的工具,比如针对产生最终交付件的构建过程,就需要在构建流程的第一步,自动地把相关工具,如Curl、wget、Maven、Gradle、npm等等,下载到CI服务器。这些工具的下载,通常都需要依靠对应的公网服务器和包管理工具来支持。而这样通过公网来下载工具,有时会遇到稳定性的问题,也就是所谓的环境问题,导致工具下载失败,进而导致构建任务的失败。因此,我们需要引入新的技术来克服这些问...阅读全文

Go语言中文网 2020-04-01 17:02:35 JFrogChina

微服务错误处理的一些思考

前言 系统内和系统间的错误处理,贯穿系统整个开发、运行、消亡的生命周期,是代码书写过程中特别需要花心思的一点。一个地方报错了,我是直接返回,还是打印一行日志再返回?嵌套函数的报错,如何找到报错的根本原因?http或rpc接口中的错误码应该定义在每个response结构体内还是说通过http code、rpc error统一返回?本文会从系统内、系统间两个方面去阐述错误的定义、处理方式及相关的缘由。由于我平时主要使用go进行开发,系统内错误处理更多是从go角度出发。 系统内错误处理 "Go Pro...阅读全文

掘金 2020年04月01日 cx3ptr

Telegram中文群组

Telegram与币用有一定的内在联系的且数据是互通,为了方便大家交流可以尝试下载Telegram软件,那么问题来了,怎么下载呢?不要着急,大V今天就把下载的流程分享给大家。 Telegram 是免费、安全、无广告的开源跨平台通讯软件。 除了网页版,移动版覆盖 Android / iOS / WindowsMobile,桌面版覆盖 Windows / OsX / Linux。 Telegram 官网:https://telegram.org/ 官网上很全,可以按照自己使用的系统安装相应的...阅读全文

Go语言中文网 2020-04-01 16:02:05 ttl147369

【Codis源码】初识codis与Codis-FE源码(一)

前言: codis 是一个分布式的redis解决方案,对于上层业务来说,连接到Codis Proxy和连接原生的Redis Server没有显著区别。上层可以像使用单机的redis一样使用。Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。codis是有golang + redis源码改造的一套强大的分布式redis解决方案。redis cluster和codis的区别...阅读全文

Segmentfault 2020-04-05 14:32:49 c_rain

【Golang源码分析】解析执行命令complie(二)词法解析

前言: 当我们使用编程语言编写代码时,我们都知道代码都是写给人看的,只是除了人能看外编译器可以编译和执行。而这些复杂的代码其实是一堆堆字符串,只是我们训练编译器拆分解读。 而编译器将一堆堆代码的字符串分组的过程,我们把这个过程称之为词法解析。 本文中工具:lex:3.1golang : 1.13.4 darwin/amd64dlv: 1.3.2编译过程一般分为 6 步:扫描、语法分析、语义分析、源代码优化、代码生成、目标代码优化。 下图来自《程序员的自我修养》 词法解析相关知识: 说到词法解析我...阅读全文

Segmentfault 2020-04-05 11:32:34 c_rain