Go语言中文网 为您找到相关结果 30

微服务实战(三):深入微服务架构的进程间通信

【编者的话】这是采用微服务架构创建自己应用系列第三篇文章。第一篇介绍了微服务架构模式,和单体式模式进行了比较,并且讨论了使用微服务架构的优缺点。第二篇描述了采用微服务架构应用客户端之间如何采用API Gateway方式进行通信。在这篇文章中,我们将讨论系统服务之间如何通信。 简介在单体式应用中,各个模块之间的调用是通过编程语言级别的方法或者函数来实现的。但是一个基于微服务的分布式应用是运行在多台机器上的。一般来说,每个服务实例都是一个进程。因此,如下图所示,服务之间的交互必须通过进程间通信(IPC)来实现。 后面我们将会详细介绍IPC技术,现在我们先来看下设计相关的问题。 交互模式当为某一个服务选择IPC时,首先需要考虑服务之间如何交互。客户端和服务器之间有很多的交互模式,我们可以从两个维度...阅读全文

博文 2016-03-03 10:37:45 hokingyang

golang 记录函数执行耗时的一个简单方法。

先写一个公共函数, 比如在 common 包下有这么一个方法: // 写超时警告日志 通用方法func TimeoutWarning(tag, detailed string, start time.Time, timeLimit float64) { dis := time.Now().Sub(start).Seconds() if dis > timeLimit { log.Warning(log.CENTER_COMMON_WARNING, tag, " detailed:", detailed, "TimeoutWarning using", dis, "s") //pubstr := fmt.Sprintf("%s count %v, using %f seconds", tag,...阅读全文

博文 2015-01-29 03:00:02 ghj1976

golang postgresql数据库驱动

今天周末,即使立冬已过,阳光依然独好,闲着没事做,coding。 一直用bm。。。/pq的SQL驱动,忘记叫啥了,一直没问题,今天看到地址转到了lib/pq,重新获取了驱动,继续使用,有如下一段代码, func DB() (db *sql.DB) { db, err := sql.Open("postgres", "user=postgres password=123456 dbname=test sslmode=verify-full") if err != nil { Fatal("数据库连接失败" + err.Error()) } return db } 编译,运行,不知道搞毛,db一直为空,搞了好久,都没搞明白,偶然间看到了 import( ) 居然为空,我去,我去,好吧,我的编辑器...阅读全文

博文 2016-03-19 15:00:01 u013025612

最强围棋程序Alpha Go 浅析

最强围棋程序Alpha Go 浅析 去年谷歌的围棋程序Alpha Go一举打败所有已知的围棋AI程序,以及以5:0的大比分打败了专业棋手Fan Hui。随后在《nature》上报到了Alpha Go 的内幕。作为一个伪的围棋爱好者和一个机器学习爱好者,看了该文章,并看了其他的分析,写下自己的心得: 围棋的智能对弈程序最早当属我国的手谈,那个时期的自动对弈程序属于经验型的。随后从国外对围棋研究后,产生了蒙特卡洛树搜索的方法应运于围棋对弈,产生了一系列的强AI,可以达到业余水准,关于蒙特卡洛树搜索可以参看《基于蒙特卡洛树搜索的计算机围棋博弈研究》,可以说对该方法进行了详细的说明,阅读也较容易,可以得到围棋AI的一些背景,制约蒙特卡洛方法更近一步的原因是:树的展开,以及搜索的深度的确定。于此同时,...阅读全文

Golang 性能忽然增加变慢10倍的现象,推测是编译器在spilt stack,导致的问题

本测试分别执行三种测试: 1.程序嵌套调用时使用int; 2.程序嵌套调用时使用int+string; 3.程序嵌套调用时使用int+interface{}; 测试脚本如下: // stackSplitTest package main import ( "fmt" "time" ) //测试函数嵌套多少次后,进行runtion.stackSplit,导致运行效率急剧下降 var C = make(chan int, 100) var F = "嵌套次数%5d,From=%5d,To=%5d,Group=%6d,耗时%7s毫秒\t%d\n" //计算函数 func sum(from int, to int) (r int) { r = 0 for i := from; i <= to; i+...阅读全文

GoLang之调用C接口的使用方法

2014-06-10 wcdj 摘要:本文主要介绍在GoLang中如何实现调用C接口。由于Go的官网经常被墙,导致无法浏览官方的详细文档,偶然间在浏览GoLang的源码中找到了一些关于cgo的用法,具体路径在go/misc/cgo目录下。 例如,在go/misc/cgo/gmp/gmp.go文件中可以找到如何在GoLang中引用C Library的方法: An example of wrapping a C library in Go. This is the GNU multiprecision library gmp's integer type mpz_t wrapped to look like the Go package big's integer type Int. 下面是一个...阅读全文

博文 2015-06-17 20:01:43 delphiwcdj

golang版本的通用时间轮 Timewheel

一个通用的timewheel工具类 通用粗精度的timewheel,只启动一个timer,可监听任意多的到期时间,放入的用户数据可以是任何类型。 接口说明: 1. Start: 开始一个timewheel ; 2. SetCallback: 设置时间到期时的回调函数,回调函数中不可作过于耗时的操作,以免卡住timewheel的正常运行; 3. Add: 添加需要监控的对象,务必在Start调用后再调用此接口; 4. Stop: 停止此timewhee...阅读全文

Nginx《微服务:从设计到部署》中文版

本书为 Nginx 微服务电子书 [Designing and Deploying Microservices](https://www.nginx.com/resources/library/designing-deploying-microservices/) 中文版,其从不同角度全面介绍了微服务:微服务的优点与缺点、API 网关、进程间通信(IPC)、服务发现、事件驱动数据管理、微服务部署策略、重构单体。 https://github.com/oopsguy/microservices-from-design-to-deployment-chines...阅读全文

go语言_异步编程_example.01

package main import ( "log" "math/rand" "time" ) func UploadNetvalueFile(done chan bool) { //利用随机函数模拟不同文件的处理时间 r := rand.New(rand.NewSource(time.Now().UnixNano())) x := r.Intn(20) log.Println("UploadNetvalueFile: ", x) time.Sleep(time.Second * time.Duration(x)) log.Println("UploadNetvalueFile OK") done <- true } func UplaodSaleFareFile(done chan bo...阅读全文

博文 2015-06-17 23:05:56 zistxym

教你轻松做一个响应式网站

在响应式还未流行的时候,很多企业与互联网公司都觉得响应式网站应该是大企业才用的上,大企业才有资金去投入。对于这个问题小编只能说,没错放在前段时间做一个响应式网站的确需要高投入,而且还很耗时间。但是放在今天来讲,小编可以告诉你,以现在的互联网技术,做一个响应式网站快的只需要几个小时,需要细致完成的也就几天时间。这样的发展速度,让众人所惊叹! 在响应式还未流行的时候,很多企业与互联网公司都觉得响应式网站应该是大企业才用的上,大企业才有资金去投入。对于这个问题小编只能说,没错放在前段时间做一个响应式网站的确需要高投入,而且还很耗时间。但是放在今天来讲,小编可以告诉你,以现在的互联网技术,做一个响应式网站快的只需要几个小时,需要细致完成的也就几天时间。这样的发展速度,让众人所惊叹! 现在...阅读全文

golang手把手实现tcp内网穿透代理(1)

使用golang手把手实现一个tcp内网穿透代理工具。 描述一下应用场景,假设内网也就是我们的局域网,我们的电脑,pc运行了一个tomcat服务器,或者nginx服务器,又或者jdbc数据库,又或者python的服务器。 正常来说,我们是无法通过互联网达到访问局域网的电脑,pc的。 然后我们有一台外网主机,需要实现在外网主机端口支持访问我们内网的服务,这样的好处和目的是什么呢? 方便调试我们的代码,尤其是微信的公众号,以及线上的支付功能回调。凡是需要别人的服务器回调我们的服务器的都需要。 在做工具之前,需要先设计一下怎么实现这个工具,而不是盲目的开工。 首先可以明确的是: 1.控制服务,控制服务需要监听在外网服务器上,假设这个服务名字叫做control_server control_serv...阅读全文

博文 2019-06-13 23:32:42 iamdev

[新加坡] 东南亚最大电商公司技术职位招聘

[Base新加坡]东南亚最大电商平台,新加坡知名团队,国际化平台,富有竞争的薪资,享受新加坡优质生活环境及教育资源,公司申请EP,属于技术引进性人才签证。可携带配偶子女一起前往新加坡工作生活,配偶也可在新加坡工作,子女可正常入托入学。视频面试。 目前招聘:前端工程师 | 后端工程师 | 测试工程师 | 移动开发工程师 | 平台开发工程师 运维开发工程师 | 全栈开发工程师| 服务器开发工程师 | 机器学习工程师 音视频算法工程师 | 人脸识别负责人| 数据科学家 | 产品经理 | UI/UX 设计师 -平台:东南亚最大电商平台 -月薪:3-6万人民币,新加坡税收很低,相比国内,同等工资实际到手多 20%,每年8%薪资增长。 -福利:公司提供 18 天年假,14 ...阅读全文

我有一个梦想

**我有一个梦想** --- 我有一个梦想, 我希望在不久的将来,程序员可以自由的享受每一个夜晚,而不是在屏幕前敲啊敲; 我有一个梦想, 我希望在不久的将来,程序员可以畅快地享受每一个假期,出游度假,而不是在办公室里等待程序响应 我有一个梦想, 我希望不久的将来,程序员不用再为产品上线时的那个晚上和产品上线后的那个晚上焦虑 我有一个梦想, 我希望在不久的将来,面对北上广深不断攀升的房价,程序员可以自由的选择出路,去或留,都能坦然面对; 我有一个梦想, 我希望在不久的将来,程序员不用天天面向对象编程,却整天被提示找不到对象; 我有一个梦想, 我希望在不久的将来,程序员可以痛快的答应每一个约会,不用再为临时出现的各种bug爽约 ![9-1....阅读全文

求指教 session.Run过后如何实时逐行读取Stdout数据

```go package main import ( "bytes" "fmt" "golang.org/x/crypto/ssh" "os" ) func main() { var bt bytes.Buffer config := &ssh.ClientConfig{ User: "test", Auth: []ssh.AuthMethod{ ssh.Password("test"), }, } client, err := ssh.Dial("tcp", "10.0.192.123", config) if err != nil { os.Exit(1) } session, err := client.NewSession() if...阅读全文

在8核cpu 15G内存的设备上开启10万个协程处理10万条数据 没有任何log打印的情况下 耗时4min为什么这么慢呀,协程并发处理感觉没用上

在8核cpu 15G内存的设备上开启10万个协程处理10万条数据 没有任何log打印的情况下 耗时4min,查看设备信息 cpu最高峰才使用141% 内存最高才占用8% ,为什么这么慢呀,协程并发处理感觉没用...阅读全文

Golang 并行运算以及time/sleep.go

今天大概阅读了一下Golang的并行运算,以下简要概括并行运算 go func() // 可以启动一个协程 可以同时运行多个协程,协程之间通讯使用channel(通道)来进行协程间通信 channel的定义如下 c := chan string 意味着这是一个string类型的通道 channel可以理解为一个队列,先进者先出,但是它只能占有一个元素的位置,我们可以义如下方法添加/读取元素,<- 是一个运算符 c <- "hello" //把"hello"加入到c通道中 msg := <- c // 将c中的"hello"取出到msg里 在并行运算时我们可能需要从多个通道读取消息,此时我们用到 for{ select{ case msg1 := channel_1: fmt.Println(...阅读全文

博文 2018-07-24 23:34:46 Exqlnet

golang学习计划

之前在工作中有使用过golang开发一些小项目,比如直播间爬取、多平台推流系统、云监控直播点播系统(后续整理下,打算开源,新手,别喷O(∩_∩)O),但是一直没有系统的学习,没有很深入的去使用,自己觉得对golang的了解还很浅,所以计划系统的学习下了。golnag语言的学习资料,网上很多pdf和各种博客教程,需要的可以参考下无闻的《Go 语言学习资料与社区索引》,收录了很多比较好的资料,但我对看纸质的资料比较有感觉,所以去买了《go程序设计语言》这本书,一共13章,计划一天看一章,那么两周时间就可以看完了。考了,突然发现,比 xxx21天从入门到精通 时间还短,是不是太快了看得没质量,暂且这么计划着先吧,后续看情况是不是需要调整,let go...阅读全文

博文 2017-07-08 16:32:08 dawing38

go+chan并发执行

利用一个chan执行一个并发的任务, 整个任务的最大耗时是最耗时的那个子任务 func SendChan(data int){ t := 10 - data if data == 5{ t = 20 } time.Sleep(time.Duration(t*1e9)) C <- data } func main(){ for i:=0; i<10; i++{ go SendChan(i) } for i:=0; i<10; i++{ var data int = <- C fmt.Println("data:", data) } ...阅读全文

博文 2017-08-05 03:14:54 jinjiashan

一人耗时 2 年,收集 2000 多万数据,创建了一个提供免费翻译搜索的网站

> 作为小微开发者,难以支付高昂的翻译费用,在线翻译又难以满足精度,所以想通过复用高质量的翻译实例进行软件内容翻译,我花了两年时间收集了2000 多万条移动 app 的翻译数据,将它们做成了一个搜索网站,期望能帮助小微开发者以更低的成本更好的质量完成软件或者网页的国际化。 #### i18n 多语言语料搜索引擎 - 网址:[https://i18ns.com](https://i18ns.com/) - 功能:支持 11 国语言搜索,包括:中文、英文、西班牙文、葡萄牙文等语言。有一千多种语言数据,超 2000 多万条数据,免费提供搜索服务。 - 详细介绍: <https://i18ns.com/help.html> - 中文搜索地址:[http...阅读全文

如何用golang写个程序获取斗鱼直播间的弹幕?

斗鱼第三方接入协议,下载地址http://dev-bbs.douyutv.com/forum.php?mod=attachment&amp;aid=MTQ5fDk5NDQ2ZTVhfDE0OTc1MjE5NjN8MHwxMDk%3D 斗鱼第三方开放平台API文档,下载地址http://dev-bbs.douyutv.com/forum.php?mod=attachment&aid=MTQ4fGI5ZWRkOWVhfDE0OTc1MjM2NzR8MHwxMDg%3D 有人用PHP写了获取斗鱼直播间的弹幕的程序,有人用node写了获取斗鱼直播间的弹幕的程序, 还有人用C/C++写了获取斗鱼直播间的弹幕的程序。。。就差golang版本的了。。。O(∩_∩)...阅读全文

tm域名为什么是10年起注?

互联网上已经没有一个域名注册像.TM一样有强制规定:十年起注,必须十年! ![20170105174036_44755.png](http://studygolang.qiniudn.com/170109/885b2e72ac66d44b6f3d5ff40ed3dcf9.png) 这样笔者想起了现在很多创业公司的现状:大都撑不过3年。 一家企业能不能活十年都是个问题,注册个域名竟然要求十年?凭什么? TM域名还真是生来“霸道”,带着长得像商标(TradeMark)英文缩写“TM”的先天优势,在价格上远高于主流域名。TM域名自开放注册以来,已被世人默认为“商标域名”。 TM域名的价格:http://www.iisp.com/domain/intro_tm.php?...阅读全文

letting go ,偶然间的发现

刚刚写完策划,听首曲子,准备休息了。我采用的是下面的这种方式 我采用的是网页播放器+客户端播放器,播放同一首曲子。发现,相比当前的单一方式,比如单独用客户端播放器或者网页播放器,带给我的感觉是不一样的呢。 要不, 你也去试试....... 说到这儿,我要给我最好的朋友------睿哥。点首曲子: Bluebird Story with Jumelles 我相当喜欢这首曲子带来的意境呢。每次听,基本上都能带给我 不一样的意境哦。希望它也能为 看到这里的你带来快乐,消除烦恼。 ~~~~~ ........阅读全文

博文 2015-12-23 02:00:01 HK_5788

tm域名注册说明

互联网上已经没有一个域名注册像.TM一样有强制规定:十年起注,必须十年! 这样笔者想起了现在很多创业公司的现状:大都撑不过3年。 一家企业能不能活十年都是个问题,注册个域名竟然要求十年?凭什么? TM域名还真是生来“霸道”,带着长得像商标(TradeMark)英文缩写“TM”的先天优势,在价格上远高于主流域名。TM域名自开放注册以来,已被世人默认为“商标域名”。 笔者认为,tm域名之所以十年起注原因有三: 1、 商标的注册有效期是10年,这个期限是参考国际的《商标法》决定的。少部分国家如缅甸是3年,中国澳门、尼泊尔、埃塞尔比亚的商标注册有效期是7年,加拿大、委内瑞拉等商标有效期是15年。tm域名既然肩负着“商标域名”的重任,注册期限自然和商标期限同步。 2、 10...阅读全文

生产者与消费者

package main import ( "fmt" "gitee.com/ha666/golibs" "github.com/astaxie/beego/logs" _ "ha666/initial" "math" "time" ) func main() { ch := make(chan int, 100000) defer close(ch) for i := 1; i < 3; i++ { go producer(fmt.Sprintf("生产者%d", i), i, ch) } time.Sleep(1 * time.Second) for i := 1; i < 5; i++ { go consumer(fmt.Sprintf("消费者%d", i), i, ch) } ti...阅读全文

博文 2017-12-22 05:07:38 ha666

go的time

package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) fmt.Println(time.Now().Unix()) fmt.Println(time.Now().Second()) //程序耗时可以用结束时间-开始时间 fmt.Println(time.Now().UnixNano()) //里面的时间必须按照这些数值来 fmt.Println(time.Now().Format("02/1/2006 15:04")) fmt.Println(time.Now().Format("2006-1-02 15:04")) } 输出:2019-01-22 13:44:16.0255278 +0800 C...阅读全文

博文 2019-01-22 18:35:15 梁十八

阻塞的协程如何超时退出?

``` func main() { ctx, cancel := context.WithTimeout(context.TODO(), time.Second*3) defer cancel() // 防止任务比超时时间短导致资源未释放 // 启动协程 go task(ctx) // 主协程需要等待,否则直接退出 time.Sleep(time.Second * 4) } func task(ctx context.Context) { ch := make(chan struct{}, 0) // 真正的任务协程 go func() { // 模拟两秒耗时任务 time.Sleep(time.Second * 2) ch <...阅读全文

Golang 红包算法入门版

import ( "fmt" "math/rand" "sync" "time" ) type RedPack struct { Id string Num int // 红包个数 NumDelivered int // 已拆包数量 Amount int // 红包金额 AmountDelivered int // 已发放金额 } func NewRedPack(num int, amount int) *RedPack { return &RedPack{Num: num, Amount: amount, NumDelivered: 0, AmountDelivered: 0} } func (pack *RedPack) get() int { if pack.NumDelivered ...阅读全文

博文 2020-05-07 15:38:26 AngryApe

golang 简单函数耗时打点

简单方式 package main import( "fmt" "time" ) func main(){ defer timeCost(time.Now()) fmt.Println("start program") time.Sleep(5*time.Second) fmt.Println("finish program") } func timeCost(start time.Time){ terminal:=time.Since(start) fmt.Println(terminal) } 更优雅的方式 func timeCost() func() { start := time.Now() return func() { tc:=time.Since(start) fmt.Prin...阅读全文

博文 2020-05-21 19:32:46 夜空一起砍猩猩

golang实现简化版桶算法

/** * 简化版桶算法 * 通过一维数组保存对应数字在一维数组中出现的个数,然后遍历一维数组达到排序的效果 * 这里一位数组是排序列表的范围,必须10以内的数字列表排序, 则一维数组大小为11 (N+1) * * 涉及知识点: * @随机数功能 * @时间处理和格式化 */ package main import ( "fmt" "math/rand" "time" ) func main() { var scoreList [11]int score := [5]int{5, 3, 5, 2, 8} for _, v := range score { scoreList[v]++ } fmt.Println(scoreList) var result []int // fmt.Print...阅读全文

博文 2020-05-25 03:32:49 全栈运维

【Go 夜读】第 66 期 #Paper-Reading CSP 理解顺序进程间通信

>文章来自于:https://reading.developerlearning.cn/reading/66-2019-11-07-paper-reading-csp/ 分享者:欧长坤 ## 观看视频 https://youtu.be/Z8ZpWVuEx8c ## Go 夜读第 66 期 Paper Reading CSP 理解顺序进程间通信 本期 Go 夜读是由 Go 夜读 SIG 核心小组成员欧长坤给大家带来的经典论文 CSP 的 Paper Reading。 ## CSP 是什么? 我们常常在讨论中提及 CSP,但鲜有人能真正说清楚 CSP 的演进历史,及其最核心的基本思想。我们已经对 Go 提供的并发原语足够熟悉了,是时候深入理解其背后的...阅读全文