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

Goroutine + Channel 实践

背景 在最近开发的项目中,后端需要编写许多提供HTTP接口的API,另外技术选型相对宽松,因此选择Golang + Beego框架进行开发。之所以选择Golang,主要是考虑到开发的模块,都需要接受瞬时大并发、请求需要经历多个步骤、处理时间较长、无法同步立即返回结果的场景,Golang的goroutine以及channel所提供的语言层级的特性,正好可以满足这方面的需要。 goroutine不同于thread,threads是操作系统中的对于一个独立运行实例的描述,不同操作系统,对于thread的实现也不尽相同;但是,操作系统并不知道goroutine的存在,goroutine的调度是有Golang运行时进行管理的。启动thread虽然比process所需的资源要少,但是多个thread之间...阅读全文

博文 2015-02-25 12:37:01 Qu Xiao

golang--gin获取post里body的参数

如题,post发送数据有几种形式,form和流是最常用的。特别是在程序里使用httpclients,一般都算通过流发送。在php里,是通过php://input来获取的。在gin中,可以通过c.Request.Body.Read(buf)。具体代码如下: package main import ( "fmt" "net/http" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.POST("/events", events) router.Run(":5000") } func events(c *gin.Context) { buf := make([]byte, 1024) n, _ :=...阅读全文

博文 2016-09-10 03:00:03 Manrener

golang 利用http.Client POST数据

package main import ( "fmt" "io/ioutil" "net/http" "net/url" "strings" ) func main() { v := url.Values{} v.Set("huifu", "hello world") body := ioutil.NopCloser(strings.NewReader(v.Encode())) //把form数据编下码 client := &http.Client{} req, _ := http.NewRequest("POST", "http://192.168.2.83:8080/bingqinggongxiang/test2", body) req.Header.Set("Content-Type"...阅读全文

博文 2014-11-24 11:00:01 别人说我名字很长

go语言的chan

chan是一个FIFO队列,chan分成两种类型同步和异步同步的chan完成发送者和接受者之间手递手传递元素的过程,必须要求对方的存在才能完成一次发送或接受异步的chan发送和接受都是基于chan的缓存,但当缓存队列填满后,发送者就会进入发送队列, 当缓存队列为空时,接受者就会接入等待队列。 chan的数据结构: struct Hchan { uintgo qcount; // total data in the q uintgo dataqsiz; // size of the circular q uint16 elemsize; uint16 pad; // ensures proper alignment of the buffer that follows Hchan in mem...阅读全文

博文 2015-05-18 03:00:01 richmonkey

腾讯云短信的 SDKqcloudsms_go

使用Go语言开发的腾讯云短信的SDK,完成了目前腾讯云提供的所有功能。 此 SDK 为非官方版本,命名和结构上与官方版本有一些区别。 海外短信和国内短信使用同一接口,只需替换相应的国家码与手机号码,每次请求群发接口手机号码需全部为国内或者海外手机号码。 语音通知目前支持语音验证码以及语音通知功能。 短信  单发短信  指定模板单发短信  群发短信  群发模板短信  短信下发状态通知  短信回复  拉取短信状态  拉取单个手机短信状态 语音  发送语音验证码  发送语音通知  语音验证码状态通知  语音通知状态通知  语音通知按键通知  语音送达失败原因推送 模板  添加模板  修改模板  删除模板  模板状态查询 签名  添加签名  修改...阅读全文

Go语言 Channel <- 箭头操作符 详解

Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。它的操作符是箭头 <- 。[plain] view plain copy print?ch <- v // 发送值v到Channel ch中 v := <-ch // 从Channel ch中接收数据,并将数据赋值给v ch <- v // 发送值v到Channel ch中 v := <-ch // 从Channel ch中接收数据,并将数据赋值给v (箭头的指向就是数据的流向)就像 map 和 slice 数据类型一样, channel必须先创建再使用:[plain] view plain copy print?ch := make(chan int...阅读全文

基于go语言的消息推送系统架构分析

本系统是猎豹移动基于go语言开发的一套消息推送系统,源码地址:https://github.com/Terry-Mao/goim 一、架构图 二、功能简介 1.comet 长连接服务器,支持长轮训、tcp、websocket连接,有超时机制 2.logic 逻辑处理服务器,消息推送入口,通过userId在router服务器中查找对应的comet服务器,将serverId和消息一起保存到kafka队列,logic是无状态服务器,可以随意增删,因为comet需要连接logic,所以在comet服务器中需要连接logic的通过LVS的虚IP,LVS加了real server后不会断开,所以需要在comet服务触发SIGHUP,重新load配置文件。 3.router 路由服务器,保存userId和...阅读全文

博文 2015-10-24 19:00:05 qinyongbo

Go 系列教程 —— 24. Select

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 24 篇。 ## 什么是 select? `select` 语句用于在多个发送/接收信道操作中进行选择。`select` 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,`select` 会随机地选取其中之一执行。该语法与 `switch` 类似,所不同的是,这里的每个 `case` 语句都是信道操作。我们好好看一些代码来加深理解吧。 ## 示例 ```go package main import ( "fmt" "time" ) func server1(ch chan string) { time.Sleep(6 * time.Second) ch <-...阅读全文

golang 使用 gomail 发送邮件

下面以阿里云邮箱为例, 如果使用的是qq邮箱的话需要把mailConn里面的host改成'smpt.qq.com',user 填写qq邮箱地址, pass需要填写你在qq邮箱设置里面获取到的授权码,qq邮箱需要先去邮箱设置里面开通smtp支持,然后获取授权码。然后就可以用qq邮箱发送了。 安装gomail go get gopkg.in/gomail.v2 package main import ( "gopkg.in/gomail.v2" "strconv" ) func SendMail(mailTo []string,subject string, body string ) error { //定义邮箱服务器连接信息,如果是阿里邮箱 pass填密码,qq邮箱填授权码 mailConn...阅读全文

博文 2018-11-06 18:35:49 woahjknes

Go语言爬虫

之前写爬虫都是用的python语言,最近发现go语言写起来也挺方便的,下面简单介绍一下。这里说的爬虫并不是对网络中的很多资源进行不断的循环抓取,而只是抓通过程序的手段都某些网页实现特定的信息抓取。可以简单分成两个部分:抓取网页,对网页进行解析。抓取网页。一般是向服务器发送一个http get/post请求,得到response。go提供的http包可以很好的实现。get方法:1resp, err := http.Get(“http://www.legendtkl.com") post方法:12resp, err := http.Post(“http://example.com/upload”, “image/jpg”, &buf)resp, err := http.PostForm(...阅读全文

博文 2017-07-02 19:22:57 Tao Kelu

golang 速度限制,time.Tick(time.Second*2) channel,隔2秒后继续执行

package main import ( "fmt" "time" ) func main() { requests := make(chan int, 5) for i := 1; i <= 2; i++ { requests <- i } close(requests) limiter := time.Tick(time.Millisecond * 200) for req := range requests { //会循环两次,前面往requests channel中发送了两个值 <-limiter //执行到这里,需要隔 200毫秒才继续往下执行,time.Tick(timer)上面已定义 fmt.Println("request", req, time.Now()) } burs...阅读全文

博文 2015-04-18 03:00:00 benlightning

golang 实现tcp转发代理

package main import ( "flag" "fmt" "io" "net" "os" "strings" "sync" ) var lock sync.Mutex var trueList []string var ip string var list string func main() { flag.StringVar(&ip, "l", ":9897", "-l=0.0.0.0:9897 指定服务监听的端口") flag.StringVar(&list, "d", "127.0.0.1:1789,127.0.0.1:1788", "-d=127.0.0.1:1789,127.0.0.1:1788 指定后端的IP和端口,多个用','隔开") flag.Parse() tr...阅读全文

博文 2016-06-08 20:00:00 fyxichen

golang socket编程

osi参考模型将计算机网络结构分为7个层次,但是在实际的开发应用中,我们更加认可TCP/IP族协议的五层结构,即应用层(http、ftp、dns),传输层(udp、tcp),网络层(ip),链路层(以太网),物理层。 socket编程作为一种基于网络层和传输层的数据io模式主要分为两种,TCP Socket和UDP Socket,也即面向连接的流式Socket和面向无连接的数据报式Socket。 今天主要和大家讲讲golang的TCP Socket编程。先来看个简单的例子吧 server.go //模拟server端 func main() { tcpServer, _ := net.ResolveTCPAddr("tcp4", ":8080") listener, _ := net.Lis...阅读全文

博文 2017-11-30 15:03:06 ssdut_buster

Golang实现一个微信抽奖小程序后台

一、后台整体架构小程序和后台间使用https通信,保证安全性,这也是为了满足小程序官方的硬性规定。腾讯负载均衡作为后台入口有几个好处:帮助处理https的流量,然后解密后再将请求通过http转发给后端的服务器,简化了逻辑,减少了https对后台服务的性能影响,同时还能配置进行动态的伸缩。负载均衡将请求通过http转发给cvm进行处理。nginx做了个反向代理,go服务端跑在本地。使用腾讯云的redis和mysql数据库。redis用于频繁的用户鉴权等,mysql保存常规数据。这样的设计在抽奖这种情境下,已经能保证足够的并发和流量了。如果想提高并发量,可以通过配置负载均衡来进行动态伸缩,然后增加云数据库的处理能力。有时间再写下怎么进行性能评测和相应的提高并发量的升级。更多go语言内容请关注:h...阅读全文

博文 2019-07-05 19:32:51 CC_ab48

go channel实现

go channel实现 转载自:http://alpha-blog.wanglianghome.org/2012/04/13/go-channel-implementation/ G语言经过多年的发展,于最近推出了第一个稳定版本。相对于C/C++来说,Go有很多独特之出,比如提供了相当抽象的工具,如channel和goroutine。本文主要介绍channel的实现方式。 简介 channel有四个操作: 创建:c = make(chan int)发送:c <- 1提取:i <- c关闭:close(c) 根据创建方式的不同,channel还可分为有buffer的channel和没有buffer的channel。buffer的大小由make的第二个参数指定,默认为0,即没有buffer。创...阅读全文

博文 2014-10-06 16:37:04 kai_ding

[golang]为什么Response.Body需要被关闭

Body io.ReadCloser The http Client and Transport guarantee that Body is always non-nil, even on responses without a body or responses with a zero-length body. It is the caller's responsibility to close Body. The default HTTP client's Transport does not attempt to reuse HTTP/1.0 or HTTP/1.1 TCP connections ("keep-alive") unless the Body is read to c...阅读全文

博文 2017-05-28 16:07:41 一桶冷水

Golang动手写一个Http Proxy

本文主要使用Golang实现一个可用但不够标准,支持basic authentication的http代理服务。 为何说不够标准,在HTTP/1.1 RFC中,有些关于代理实现标准的条目在本文中不考虑。 Http Proxy是如何代理我们的请求 Http 请求的代理如下图,Http Proxy只需要将接收到的请求转发给服务器,然后把服务器的响应,转发给客户端即可。 Https 请求的代理如下图,客户端首先需要发送一个Http CONNECT请求到Http Proxy,Http Proxy建立一条TCP连接到指定的服务器,然后响应200告诉客户端连接建立完成,之后客户端就可以与服务器进行SSL握手和传输加密的Http数据了。 为何需要CONNECT请求? 因为Http Proxy不是真正的服务...阅读全文

博文 2017-09-17 13:11:26 杨锡坤

[golang]GO语言编写的基于UDP协议的简易聊天软件

初学GO不到两周,本着熟悉语言的目标写了这个小程序,漏洞很多,实现上写的也有些渣渣,欢迎大家阅读指点。 下载地址:https://github.com/yinxin630/gochat 简单思路描述: 0、服务端监听客户端请求,完成会话转发的任务 1、服务端采用心跳包维护用户在线状态 2、客户端通知服务端自己的监听地址,创建服务端-客户端信息通道 服务端: package main import ( "fmt" "net" "os" "strconv" "time" ) //用户信息 type User struct { userName string userAddr *net.UDPAddr userListenConn *net.UDPConn chatToConn *net.UDPC...阅读全文

博文 2014-11-11 06:00:06 u011229962

webhook 是什么以及如何创建

我们在网上做的工作,大部分其实就是事件,webhooks 已经成为了连接系统的主要方式,不管是用户创建、支付成功、DockerHub 镜像推送或者 Git 仓库上的合并请求,这些都是非常有用并且轻量级的共享信息的方式 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/webhook/1.png) 那么,webhook 究竟是什么呢?webhook 是应用给其它应用提供实时信息的一种方式。信息一产生,webhook 就会把它发送给已经注册的应用,这就意味着你能实时得到数据。不像传统的 APIs 方式,你需要用轮询的方式来获得尽可能实时的数据。这一点使得 webhook 不管是在发送端还是接收端都非常高效。由...阅读全文

博文 2018-09-25 10:05:16 jettyhan

golang udp服务端客户端例子

golang udp服务端客户端例子 服务端: package main import ( "fmt" "net" ) func main() { // 创建监听 socket, err := net.ListenUDP("udp4", &net.UDPAddr{ IP: net.IPv4(0, 0, 0, 0), Port: 8080, }) if err != nil { fmt.Println("监听失败!", err) return } defer socket.Close() for { // 读取数据 data := make([]byte, 4096) read, remoteAddr, err := socket.ReadFromUDP(data) if err != nil...阅读全文

Golang 发送Post表单请求

准备服务器 package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/tpost", func(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { var ( name string = r.PostFormValue("name") ) fmt.Printf("key is : %s\n", name) } }) err := http.ListenAndServe(":80", nil) if err != nil { fmt.Println(err.Error()) return } } 测试发送POST请求 packa...阅读全文

博文 2019-03-27 02:34:37 Rnben

人工智能聊天机器人Olivia

Olivia 是带有人工神经网络的人工智能聊天机器人。 ![image](https://static.oschina.net/uploads/space/2019/0617/141938_28Mx_4105562.png) ### 使用 要使用 REST Api,必须使用两个参数建立对 `/api/response` 的 `POST` 请求: * `sentence` 这是要发送给 Olivia 的消息 * `authorId` 这是一个任意 ID,用于标识用户进行上下文聊天 ### 示例

curl -X POST 'https://olivia-api.herokuapp.com/api/response' --data "...阅读全文

go 发送post请求

package core import ( "net/http" "net/url" "strings" "encoding/json" "io/ioutil" "fmt" ) /* *发送GET请求 * */ func UrlGet()(result map[string]interface{}){ return nil } /* *发送post请求 *@param apiUrl api地址 *@param postParam post参数 *@param result map格式json数据, err error对象 */ func UrlPost(apiUrl string,postParam map[string]string)(result map[string]interface...阅读全文

博文 2015-10-21 09:00:01 煅魂大师

Go http.StripPrefix在File Server中的用途

一. 保持代码的整洁和进行合理的分流 http.StripPrefix函数的作用之一,就是在将请求定向到你通过参数指定的请求处理处之前,将特定的prefix从URL中过滤出去。下面是一个浏览器或HTTP客户端请求资源的例子: /static/example.txt StripPrefix 函数将会过滤掉/static/,并将修改过的请求定向到http.FileServer所返回的Handler中去,因此请求的资源将会是: /example.txt http.FileServer 返回的Handler将会进行查找,并将与文件夹或文件系统有关的内容以参数的形式返回给你(在这里你将"static"作为静态文件的根目录)。因为你的"example.txt"文件在静态目录中,你必须定义一个相对路径去获...阅读全文

博文 2016-12-23 10:00:01 吃一堑消化不良

h5聊天室模板|仿微信聊天室html5

文链接:https://www.cnblogs.com/xiaoyan2017/p/9266179.html运用html5开发的仿微信聊天室实战项目weChatRoom,基于h5+css3+zepto+weui+wcPop+swiper等技术混合开发,整体采用flex布局模式,兼容适配各种手机屏幕,实现了消息、表情发送,动图gif,图片、视频预览,红包/打赏等功能。​// ...滚动聊天区底部 function wchat_ToBottom(){ //$(".wc__chatMsg-panel").animate({scrollTop: $("#J__chatMsgList").height()}, 0); $(".wc__slimscroll2").slimscroll({ scrollB...阅读全文

博文 2019-02-24 11:22:01 xiaoyan2015

Golang实现简单tcp服务器04 -- 服务器的粘包处理

服务器的粘包处理 什么是粘包 一个完成的消息可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和封包问题 TCP粘包和拆包产生的原因 应用程序写入数据的字节大小大于套接字发送缓冲区的大小 进行MSS大小的TCP分段。MSS是最大报文段长度的缩写。MSS是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。所以MSS并不是TCP报文段的最大长度,而是:MSS=TCP报文段长度-TCP首部长度 以太网的payload大于MTU进行IP分片。MTU指:一种通信协议的某一层上面所能通过的最大数据包大小。如果IP层有一个数据包要传,而且数据的长度比链路层的MTU大,那么IP层就会进行分片,把数据包分成托干片,让每一片都...阅读全文

博文 2015-06-02 23:00:16 victoriest

go语言捕获panic异常并转化为error

package main import ( "fmt" "errors" ) func testPanic2Error() (err error) { //捕获 and 恢复 panic. /*注意defer延迟执行的函数可以修改外围函数“testPanic2Error”的命名返回值. *通过调用recover捕获panic并转化为error. 也许有人打算在main函数中放一个下面这个defer语句,用于捕获程序中的一切panic异常, *建立最后一道防火墙,从而使程序避免崩溃运行下去, 但很不幸, 当main函数的defer延迟函数被执行时,也就意味着main函数要退出了, *此时再捕获panic恢复程序,意义还有多大呢;不过我们有办法克服, 建立一个像“testPanic2Error”...阅读全文

博文 2016-03-27 10:00:04 htyu_0203_39

华为云 路由器的天坑

问题在华为云服务器上使用Golang直接监听UDP端口,外部将无法访问这些端口,因为华为云服务器的路由不会允许外部与这些UDP端口直接通信。即便在配置了安全组以后亦是如此。解决方案Golang 建立连接后,使用 conn.Write() 写入部分数据即可(无需指定目的地)。如此一来,华为云的路由器便能放行此 UDP 端口。问题猜测华为云路由器的 NAT 算法应该是华为自己魔改的。尽管外网 IP 对 服务器内网IP是 1对1 的,但路由器对外部的访问存在限制。需要像 IP限制锥形 NAT 一样向往外发送数据后才能正常使用...阅读全文

博文 2020-05-05 05:32:43 鹿沐浔

golang 支付宝SHA1withRSA加密

SHA1大家用的挺多,RSA不多但用的也有,但像支付宝这样要求 SHA1 + RSA的恐怕就没几个了,写起来实在痛苦。而且一搜一片,却没几个能跑起来的。 刚才有个人在QQ上加我,问之前在支付宝集成的帖子里的SHA1withRSA是咋解决的。说实话,不是专门研究加密的,鬼知道报的错是什么玩意,比如这个: signature, err := rsa.SignPKCS1v15(rand.Reader, this.privateKey, crypto.SHA1, hashed) //ParsePKCS8PrivateKey err asn1: structure error: tags don't match (16 vs {class:0 tag:2 length:129 isCompound:f...阅读全文

博文 2016-11-29 01:00:02 u012210379

深入Go UDP编程

目录 [−] 一个简单的例子更复杂的例子等价的客户端和服务器Read和Write方法集的比较通用多播编程标准库多播编程广播任播参考文档 用户数据报协议(User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报(package-oriented)的传输层协议,正式规范为RFC 768。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验。 由于缺乏可靠性且属于非连接导向协议,UDP应用一般必须允许一定量的丢包、出错和复制粘贴。但有些应用,比如TFTP,如果需要则必须在应用层增加根本的可靠机制。但是绝大多数UDP应...阅读全文

博文 2017-02-08 12:53:43 smallnest

golang 网络通信

title: golang 网络编程 golang 网络编程 go-shadowsocks是一个非常好的学习golang网络编程的例子。在本篇博文中重点阐述golang网络通信几个各种不同协议下服务端和客户端的实现。网络通信协议主要有以下两种外加一种增加的协议 golang tcp golang upd golang kcp:在upd上进行增强的协议,KCP 是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。 golang的一大优势就是多核、并行、网络编程。通过goroutine与channel可以很方便地协程,协程比线程更轻量级,占用资源更小,可以更好地适用与并行计算。 下面对这三种分别进行说明。 golang...阅读全文

博文 2017-07-15 04:06:26 bradyjoestar

在go中使用linked channels进行数据广播

在go中使用linked channels进行数据广播 原文在这里(需翻墙),为啥想要翻译这篇文章是因为在实际中也碰到过如此的问题,而该文章的解决方式很巧妙,希望对大家有用。 在go中channels是一个很强大的东西,但是在处理某些事情上面还是有局限的。其中之一就是一对多的通信。channels在多个writer,一个reader的模型下面工作的很好,但是却不能很容易的处理多个reader等待获取一个writer发送的数据的情况。 处理这样的情况,可能的一个go api原型如下: type Broadcaster … func NewBroadcaster() Broadcaster func (b Broadcaster) Write(v interface{}) func (b Bro...阅读全文

博文 2014-10-15 13:52:44 siddontang

想问一下bufio.ReadWrite的问题

想问一个通过sock缓冲器发送数据的问题 rw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn)) binary.Write(rw, binary.LittleEndian, bags) rw.Flush() conn是socket 连接 连续这样调用Fiush()方法可以把消息发送回去,但是多次访问之后每访问一下内存就会涨,怎么能把这个rw关闭呢并释放内存呢? 谢...阅读全文

golang实现http post

package main import ( "fmt" "io/ioutil" "net/http" "net/url" "strings" ) func main() { v := url.Values{} v.Set("huifu", "hello world") body := ioutil.NopCloser(strings.NewReader(v.Encode())) //把form数据编下码 client := &http.Client{} req, _ := http.NewRequest("POST", "http://192.168.2.83:8080/bingqinggongxiang/test2", body) req.Header.Set("Content-Type"...阅读全文

博文 2016-11-18 11:00:08 徐学良

golang复用http.request.body

问题及场景 业务当中有需要分发http.request.body的场景。比如微信回调消息只能指定一个地址,所以期望可以复制一份消息发给其他服务。由服务B和接收微信回调的服务A一起处理微信回调信息。 解决思路 最开始考虑的是直接转发http.request。使用ReverseProxy直接将http.request由服务A转发给服务B。但是微信涉及到验证等问题,完全调整好非常麻烦。所以转换思路,打算将http.request.body的内容直接post给服务B。 可是http.request是readcloser。我们将http.request readAll的时候讲无法再次读取http.request里面的信息。 如何才能将http.request.body复制使用呢? 其中c表示的是htt...阅读全文

博文 2018-10-20 18:34:42 ppmoon

golang服务端, 游戏公测时遇到的socket写超时的问题, 也是游戏框架的设计问题

问题描述: 游戏公测,玩家大概有几百个.运行一小段时间,大概是20分钟左右或最多半个小时,服务端就卡住了. 卡住较长时间,之后又会变正常一小会儿 查问题过程: 经过对运行日志的分析,程序执行到给客户端socket写数据的时候会一直卡住,然后报错,具体错误已忘记, 大概是写超时之类的. 百度查询,认为是, 服务端在给一个已经关闭的socket写数据才导致的错误, 而这个"关闭"在服务端其实认为没有关闭的. 是客户端主动发起了close的请求, 但是服务端没有正确处理该请求, 导致服务端一直认为该socket是正常,直到超时. 那么框架设计是这样的: 一个玩家的操作会同步给其它玩家,这时是直接给其它玩家的socket发送数据, 此时如果有一个玩家客户端写超时了, 那么其后所有的玩家都会在等待该异...阅读全文

博文 2014-10-04 19:27:46 984195889

征集令 | “云原生技术实践黑客松”即将开战,赛题由你定!

9月,坐标北京。CNBPA(云原生技术实践联盟)与灵雀云要一起搞事情了! 9月6-8日,由CNBPA(云原生技术实践联盟)与灵雀云共同发起的“2019云原生技术实践黑客松编程比赛”将在北京开战!我们希望通过一场以“云原生技术实践”为主题的黑客松活动,为当今云原生领域相关的技术热点、企业转型升级中遇到的迫切需求,寻找新的创意和算法,帮助解决技术落地过程中遇到的实际问题! 赛制说明 7月9日--8月8日 项目征集 本次活动欢迎云原生技术相关领域厂商、互联网厂商、各行业软件开发商、云原生技术终端用户共同参与,进行大赛的项目命题并提供环境、相关场景、专家资源的支持。参与企业将作为本次黑客松大赛的战略合作伙伴! 7月15日-8月15日 选手报名 选手可关注“云原生技术社区”公众号,后续公众号会发布“黑...阅读全文

golang select 小结

select 介绍 从不同并发执行的协程中,获取数据可以用select来完成。select监听的多个通道,也可以用通道发送数值。 select { // 接收数据 case u:= <- ch1: ... // 发送数据 case v:= <- ch2: ... ... default: // no value ready to be received ... } select 基本用法 1、如果多个通道都阻塞了,会等待知道其中一个通道可以处理。 2、如果多个通道都可以处理,随机选取一个处理。 3、如果没有通道操作可以操作并且写了default语句,会执行:default(永远是可以运行的) 4、如果防止select堵塞,可以写default来确保发送不被堵塞,没有case的select就会...阅读全文

零基础学习php——入门篇

在Web开发的世界里除了PHP之外还有很多编程语言可供挑选,主流的有Node.js、Python、Java,.NET、Golang,Ruby。其中使用最多的是PHP,特别是在中小企业、互联网创业公司。 在说编程语言之前,我们先了解一下网站是如何在浏览器打开的: 359b033b5bb5c9ea6434d6a7d339b6003bf3b3ab.png 1. 输入地址 向浏览器输入一个网址 2. DNS解析 请求一旦发起,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。 如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请...阅读全文

博文 2019-08-20 16:02:48 胡木木OvO

Go 后台开发常用工具

go 常用包 dlv 远程调试 https://github.com/derekparke... dogo 文件监控 https://github.com/liudng/dog... Goland 优点: 可以配置项目级的 gopath 可以run单个文件,同一个文件夹下可以有多个入口文件 常用功能 自动上传到服务器。在setting中找到Deployment,设置远程服务器的ip和端口,用户名与密码,还有对应的路径。在tools中设置保存后自动上传。 远程断点调试。IDE右上角Edit Configurations...,新建一个go remote,远程服务按照提示启动,在本机打断点就可以调试远程的服务了。 如果有跳板机的话,则需要额外设置一下。 常用插件 Remote Hosts Acc...阅读全文

博文 2018-11-25 19:34:39 西山雨

golang写服务端程序,作为文件上传与下载的服务器。配合HTML5以网页作为用户页面

golang写服务端程序,作为文件上传与下载的服务器。配合HTML5以网页作为用户页面 1.整个工程结构如图: 其中:mainup.go是监听本地等待用户接入实现上传的服务端程序,mainup.exe是相应的可执行文件。 maindown.go是监听本地等待开发者接入实现查看所有上传的文件并且下载删除的服务端程序。 indexup.html是呈献给用户上传文件的网页,indexdown.html是查看所有上传的文件,进行删除下载的服务端程序。 static文件夹里面包含了引用的库 files文件夹存放上传的文档。 2.源码 mainup.go和maindown.go文件都引用了gin包,我这里已经从github上下载到本地了。下载源码后用户记得自己设置下载gin包。 github一直传不上,...阅读全文

博文 2016-06-26 20:00:01 su_sai

如何用ZeroMQ实现UDP组播Pub-Sub(基于Golang)

如何用ZeroMQ实现UDP组播Pub-Sub(基于Golang) 2015-01-19 ZeroMQ有一对Pub/Sub socket 类型,但是网上的教程一般侧重于使用TCP版本的…… 虽然TCP版本的也能组网,但是略显麻烦,今天我来给大家介绍一下基于PGM协议的ZeroMQ Pub/Sub模型 首先要编译安装OpenPGM brew install libpgm 接着是zmq brew install zmq --with-pgm 这样就准备好了环境了, 这里需要了解一下PGM网络的原理,很简单,如下图 绿色的就是发送方,向目的组播地址239.192.0.1 端口3055(黑色粗线)发送数据,然后所有监听此端口的接收者(Receiver)都收到了。 就这么简单。 然后就是写代码咯: s...阅读全文

博文 2017-02-11 16:28:11 蒙卓

[Golang]妙用channel(2)

在 Go 编程语言中,channel 是一个闪耀的特性。它提供了一种强大的、在不使用锁或临界区的情况下,从某个 goroutine 向其他 goroutine 发送数据流的方法。今天我想讨论关于 channel 的两个重要的特性,这些特性不但使其在控制数据流方面极为有用,而且用在流程控制方面也十分有效。 一个已经被关闭的 channel 永远都不会阻塞第一个特性,我想谈一谈已经被关闭的 channel。当一个 channel 一旦被关闭,就不能再向这个 channel 发送数据,不过你仍然可以尝试从 channel 中获取值。package main import"fmt" func main() { ch := make(chan bool, 2) ch <- true ch <- tru...阅读全文

博文 2015-06-17 20:03:50 abv123456789

Golang协程与通道整理

协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之,不通过OS进行切换,自行切换,系统运行开支大大降低 通道channel 并发编程的关键在于执行体之间的通信,go通过通过channel进行通信 channel可以认为类似其他OS体系中的消息队列,只不过在go中原生支持,因而易用 消息队列有哪些值得关注的地方?常见问题包括创建、关闭或删除、阻塞、超时、优先级等,golang中也不例外。罗列如下: 可否探测队列是满或空?或者说是否可以不阻塞地尝试读写? 读阻塞和写阻塞时关闭会怎样? 关闭后未读取的消息会被抛弃? 往关闭的channel发送数据或读取数据会怎样? 怎样探测channel的...阅读全文

golang 通过 smtp 发送邮件

package main import( "fmt" "net/smtp" "encoding/base64") //html,plainfunc SendMail( title,user,pswd,smtpserver,port,from,to,subject,body,format string ) error { bs64 := base64.NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/") header := make(map[string]string) header["From"] = title+"<"+from+">" header["To"] = to header...阅读全文

博文 2016-03-26 22:00:00 deepdata

基于beego一键创建RESTFul应用

API应用开发入门 Go是非常适合用来开发API应用的,而且我认为也是Go相对于其他动态语言的最大优势应用。beego在开发API应用方面提供了非常强大和快速的工具,方便用户快速的建立API应用原型,专心业务逻辑就行了。 快速建立原型 bee快速开发工具提供了一个API应用建立的工具,在gopath/src下的任意目录执行如下命令就可以快速的建立一个API应用: bee api beeapi 应用的目录结构 应用的目录结构如下所示: ├── conf │ └── app.conf ├── controllers │ └── default.go ├── models │ └── object.go └── main.go 源码解析 app.conf里面主要针对API的配置如下: autore...阅读全文

博文 2014-10-04 19:27:47 astaxie

gopush-cluster 架构

前言 gopush-cluster是一套golang开发的实时消息推送集群,主要分享一下开发这套系统的想法和思路。 架构 主要分为三个模块来开发,comet/web/message。 comet 主要负责消息排队、消息推送以及和客户端的连接维护;整套系统依据是消息ID顺序原则获取消息(客户端本地获取最大的消息是1,那么之后获取的消息就是大于1的,获取离线消息的时候也要从上次最大消息ID来获取),因此消息推送以后需要在comet中排队然后发起RPC给message实现存储。 message 主要负责消息的存储和读写;接受来自comet模块的消息进行持久化,或者接受web模块的读取消息请求获取离线消息。message是可以部署多个节点来负载来自大量comet的推送压力,比如不同的comet使用不...阅读全文

博文 2014-10-04 19:26:28 bhtfg538

服务发现之Consul

consul是一个可以提供服务发现,健康检查,多数据中心,Key/Value存储等功能的分布式服务框架 用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、Windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。 Consul 的使用场景 docker 实例的注册与配置共享 coreos 实例的注册与配置共享 vitess 集群 SaaS 应用的配置共享 ...阅读全文

博文 2018-10-12 18:34:40 Kernel_Panic