golang

golang后端全栈式服务框架 - hydra

时光毁灭记忆、已成空白 提交于 2020-01-07 11:58:31
hydra golang后端全栈式服务框架,提供接口服务器、web服务器、websocket服务器,RPC服务器、统一调度服务器、消息消费服务器。并具有如下特点: 统一开发模式 规范代码编写,采用统一方式编写服务 统一安装、启停、更新 采用相同的方式进行系统初始化,服务启动、停止、热更新等 统一配置管理 统一采用zookeeper 或 fs 保存配置,本地零配置。并采一方式进行配置安装 统一基础框架 对缓存、数据库、消息队列、远程调用(GRPC)、日志归集、加解密等进行统一封装 统一日志框架 集成本地日志、远程日志服务,对日志进行统一归集与编排。 统一服务治理 集成服务注册、服务发现、负载均衡、流量控制、服务降级、熔断等,并对服务状态进行监控 统一认证服务 可集成SAS远程认证服务集成,实现请求的访问权限控制、加解密等 统一监控报警 集成系统监控、业务监控。对系统的主要指标(带宽、CPU、内存、硬盘、IO)和业务主要指标(QPS、处理时长、异常响应结果)进行统一采集并存入influxdb中,可使用grafana进行实时查看,与报警系统(convoy)集成可实现消息队列、数据库、服务状态等监控,和短信、微信等实时报警 多种集群模式 支持集群分组及对等,主备,分⽚等集群模式 golang 原生代码实现 20+线上项目实践经验 示例 一. api示例 新建文件夹 hello ,添加

Golang实现简单tcp服务器01 -- 概述

女生的网名这么多〃 提交于 2020-01-07 07:27:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 概述 Golang作为一门近些年来非常风光的开发语言, 其实用范围很广, 图形界面, web框架, 图像引擎等等. 由于其语言特性简化了并发/多核的开发, 受到了很大的关注. 而使用它进行服务器开发, 也是非常高校而简洁的. 废话不多说, 本项目实践的目的是使用golang开发一个简单的基于tcp协议的服务器/客户端. 预备知识 首先, 我们需要了解一下golang下的如下包与特性: goroutine goroutine是一种轻量型的线程, 作为golang语言的语言特性, 可以很简单的在golang中进行多线程的开发. 利用go关键字, 我们能把任何一个方法/函数, 放在一个新的goroutine里执行. 实验01: 在 实验环境 的 主文件夹 里, 建立一个名为test.go的文本文档, 并开始编写以下代码 package main import ( "fmt" ) var quit chan bool = make(chan bool) func main() { go testGorountine() <-quit } func testGorountine() { for i := 0; i < 10; i++ { fmt.Println("Hello world!") } quit <- true

golang实现命令行程序的使用帮助

*爱你&永不变心* 提交于 2020-01-07 03:26:32
通过 flag 包我们可以很方便的实现命令行程序的参数标志, 接下来我们来看看如何实现命令行程序的使用帮助, 通常以参数标志 -h 或 --help 的形式来使用. 自动生成使用帮助 我们只需要声明其他参数标志,并执行解析, flag 包会帮我们自动生成使用帮助. //main.go //输出2个数,输出较大的数 package main import ( "flag" "fmt" "math" ) func main() { firstFlag := flag.Float64("first", 0, "第一个数") secondFlag := flag.Float64("second", 0, "第二个数") flag.Parse() max := math.Max(*firstFlag, *secondFlag) fmt.Print(max) } 编译生成后执行看看: E:\GOPATH\src\max>max.exe -help Usage of max.exe: -first float 第一个数 -second float 第二个数 E:\GOPATH\src\max>max.exe -first=5 -second=66 66 自定义使用帮助 也许你不大喜欢或不满足于自动生成的使用帮助,那么也你可以试试自定义使用帮助. 同样我们使用 flag 包,但这里重写了 flag

golang mongo-driver Aggregate

左心房为你撑大大i 提交于 2020-01-07 01:34:00
分组计算 // ListGroupByUser group by user func (repo PostReadRepository) ListGroupByUser(postUID string) (list []*model.PostRead, err error) { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() pipeline := []bson.M{bson.M{"$group": bson.M{"_id": bson.M{"postuid": "$postuid", "createdby": "$createdby"}, "createdon": bson.M{"$max": "$createdon.t"}, "uid": bson.M{"$max": "$_id"}, "readtime": bson.M{"$sum": "$readtime"}}}} opts := options.Aggregate() cur, err := dbPostRead.Aggregate(ctx, pipeline, opts) defer cur.Close(ctx) for cur.Next(ctx) { var doc map[string

golang-超大数字计算

馋奶兔 提交于 2020-01-06 23:19:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> package main func main() { numstr := "360000000000000000000000000000" fmt.Println(BigIntAdd(numstr, 99)) fmt.Println(BigIntReduce(numstr, 99)) } func BigIntAdd(numstr string, num int64) string { n, _ := new(big.Int).SetString(numstr, 10) m := new(big.Int) m.SetInt64(num) m.Add(n, m) return m.String() } func BigIntReduce(numstr string, num int64) string { n, _ := new(big.Int).SetString(numstr, 10) m := new(big.Int) m.SetInt64(-num) m.Add(n, m) return m.String() } 来源: oschina 链接: https://my.oschina.net/qiongtaoli/blog/3154110

Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)

佐手、 提交于 2020-01-06 21:52:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 导读 :从问题本身出发,不局限于 Go 语言,探讨服务器中常常遇到的问题,最后回到 Go 如何解决这些问题,为大家提供 Go 开发的关键技术指南。我们将以系列文章的形式推出《Go 开发的关键技术指南》,共有 4 篇文章,本文为第 1 篇。 Go 开发指南大图 Overview 该指南主要讨论了服务器领域常见的并发问题,也涉及到了工程化相关的问题,还整理了 C 背景程序员对于 Go 的 GC 以及性能的疑问,探讨了 Go 的错误处理和类型系统最佳实践,以及依赖管理的难处、接口设计的正交性,当然也包含我们在服务器开发中对于 Go 实践的总结,有时候也会对一些有趣的问题做深度的挖掘,列出了 Go 重要的事件和资料集合,以及 Go2 的进展和思考。 以下是各个章节以及简介: About the Name :为何 Go 有时候也叫 Golang? Why Go :为何要选择 Go 作为服务器开发的语言?是冲动?还是骚动? Milestones :Go 的重要里程碑和事件,当年吹的那些牛逼,都实现了哪些? GC :Go 的 GC 靠谱吗?Twitter 说相当的靠谱,有图有真相。 Could Not Recover :君可知,有什么 panic 是无法 recover 的?包括超过系统线程限制,以及 map 的竞争写

[golang][gui]Hands On GUI Application Development in Go【在Go中动手进行GUI应用程序开发】读书笔记04-GUI库大全

筅森魡賤 提交于 2020-01-06 18:20:05
https://github.com/andlabs/libui c++ https://github.com/andlabs/ui https://github.com/gotk3/gotk3/ https://github.com/go-gl/gl/v2.1/gl https://github.com/go-gl/glfw/v3.2/glfw github.com/hajimehoshi/ebiten 使用了glfw A dead simple 2D game library in Go https://ebiten.org/ , 有很多小游戏例子 https://www.packtpub.com/ 国外售书网站,编程书籍质量不错 http://fyne.io/fyne github.com/zserge/lorca --嵌入html https://www.glfw.org/ https://github.com/golang-ui/nuklear golang使用gui可以参考一下炽手可热的vlang关于gui的讨论 https://github.com/vlang/v/issues/2065 因此,不能选择Qt,GTK,Nuklear。 我只能想到wxWidgets和libui,后者还处于早期阶段,还没有积极开发。 wpf C# Eto https://github

golang并发(1)介绍

做~自己de王妃 提交于 2020-01-04 04:46:52
概述 简而言之, 所谓并发编程是指在一台处理器上 “ 同时 ” 处理多个任务。 随着硬件的发展,并发程序变得越来越重要。 Web 服务器会一次处理成千上万的请求。平板电脑和手机 app 在渲染用户画面同时还会后台执行各种计算任务和网络请求。即使是传统的批处理问题 -- 读取数据,计算,写输出 -- 现在也会用并发来隐藏掉 I/O 的操作延迟以充分利用现代计算机设备的多个核心。计算机的性能每年都在以非线性的速度增长。 宏观的并发是 指在一段时间内 , 有多个程序在同时运行 。 并发在微观上,是指在同一时刻只能有一条指令执行,但多个程序指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个程序快速交替的执行。 并行和并发 并行 (parallel) : 指在同一时刻,有多条指令在 多个处理器 上同时执行。 并发 (concurrency) : 指在同一时刻只能有一条指令执行 , 但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段, 通过 cpu 时间片轮转 使多个进程快速交替的执行。 大师曾以咖啡机的例子来解释并行和并发的区别。 并行 是两个队列 同时 使用 两台 咖啡机 (真正的多任务) 并发 是两个队列 交替 使用 一台 咖啡机 ( 假 的多任务)

GopherChina第一天小结

倖福魔咒の 提交于 2020-01-04 00:27:20
GopherChina第一天小结 今天参加了Asta举办的第五届GopherChina,第一天参加完,颇有感受,晚上回来趁着还有记忆,来做一下记录。 写在前面 一早从9点开始,一天下来一共八个主题,各个主题都有自己的特色,全部听下来也是挺不容易的。这些主题有大到说框架,也有小到说具体的某个包的使用的。 一早上真心起的比上班还早,早早就过去占了个位子。之前也参加过一些技术大会,最担心的就是讲师讲说的主题变成某个公司的宣传分享。我们听众大都怀着学习的心态来的,都希望能在技术大会上得到的是一些干货,所谓干货,就是经验。就是说并不是你用Golang做了多牛逼的事情,而是你怎么用Golang做了多牛逼的事情,在做了多牛逼的事情的过程中有哪些经验只谈,哪怕只有一个经验分享,能让我们在实际工作中绕开这个坑,也或许就值回票价了。 大型微服务框架设计实践 这个是我司滴滴欢总的分享。其实之前我在内部已经听过一遍这个分享了,当时听完之后就对这个在我们外卖部门践行下来的微服务框架的思想、实现都非常感兴趣。还强烈建议其他公司的小伙伴一定要仔细听欢总这个分享。今天第二次听,PPT已经较之前内部分享的润色不少,也做了一些公司业务的脱敏处理。不过整体听完,让我对业务框架的认识又深了一层。 整个PPT大致是从框架开始说起,从框架的进化史,说到框架的风格(从配置->约定->DSL->容器化),从而引入“操作系统

Java + golang 爬取B站up主粉丝数

…衆ロ難τιáo~ 提交于 2020-01-01 18:52:36
自从学习了爬虫,就想在B站爬取点什么数据,最近看到一些个up主涨粉很快,于是对up主的粉丝数量产生了好奇,所以就有了标题~ 首先,我天真的以为通过up主个人空间的地址就能爬到 https://space.bilibili.com/137952 但事与愿违,给这个地址发送请求返回来的并不是我们想要的页面数据,而是一个类似于要求用户更换浏览器的错误页面 我们可以使用postman来模拟发送这个请求 响应的页面就是这个 <!DOCTYPE html> <html> <head> <meta name=spm_prefix content=333.999> <meta charset=UTF-8> <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"> <meta name=renderer content=webkit|ie-comp|ie-stand> <link rel=stylesheet type=text/css href=//at.alicdn.com/t/font_438759_ivzgkauwm755qaor.css> <script type=text/javascript>var ua = window.navigator.userAgent var agents = ["Android",