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

分布式事务解决方案

什么是分布式事务 在大的操作集合中,所有的小操作都属于不同的服务器,不同的应用,分布式事务需要保证这些小操作要么一起成功,要么一起失败。本质上,分布式事务为了保证数据的一致性 分布式事务产生的原因 数据库分库分表(当一个操作需要访问01库又要访问02库的时候就会有这个问题) SOA服务化(所有业务拆分到不同的模块中,数据存储在不同的服务器中,所以需要用到分布式事务) ACID事务特性 原子性 一致性 隔离性 持久性 分布式事务的解决方案 基于XA协议的二阶段提交 消息事务+最终一致性 TCC编程模式 二阶段提交 XA是分布式事务协议, 总的来说 XA协议比较简单,容易实现,但是缺点是 同步阻塞 所有事务参与都在等待其他参与者响应的时候都处于同步阻塞的状态 单点问题 数据不一致 太过保守 任何...阅读全文

博文 2019-11-15 23:34:22 PenggeZhuang

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

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

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

访谈阿里孙伟光:这位技术人都经历了啥?

摘要: 做事情不能单单盯着KPI,不是KPI的事情不做。 《沉淀》是云栖社区展示专家风采的人物栏目。它呈现每个专家独一无二的人生经历、认识和感悟的同时,也能帮助你沉淀技术,收获对技术和人生的判断。我们的想法是:“若你想精进为一个很厉害的人,不妨细细品味这些技术牛人背后的沉淀。 提到程序员三个字,有些人的固有印象里会立马冒出如下标签:屌(码)丝(农)、不修边幅、没情调…… 而光哥,哦,不好意思——应该是“光戈”,在内网的18个标签中,被以下三大类占据: 富二代她父亲… 身材非常棒… 会做肉松,有点2的光光… 在技术上,2014年转型做大数据,他研发的产品,在不增加任何投入的情况,将计算集群的CPU利用率从30%多提升到70%以上,极大地提高了服务器的利用率;与此同时,他在...阅读全文

除痛指南 | P2P公司贷前风控福利贴

最近,随着数据宝的壮大和业务多样化 (骄傲脸)宝妹接到了很多case, 宝妹发现了一些相同的烦恼 临近年末,P2P公司生意火爆, 后台提出了各式各样的烦恼或需求 但细心的宝妹还是做了一个针对性的总结; 借此,宝妹还申请到了这次的专场福利, P2P公司-李先生 宝妹,我们在核查客户信息时经常碰到盲点, 被一些假身份、假号码糊弄,求帮助! 您的问题,宝妹已经在后台收到了呢, 对于这位P2P小伙伴的烦恼, 我们为您推荐以下接口 给您一面“照妖镜”助您让假身份无所遁形, 精准辨别借贷身份真实性。 ![1..jpg](http://studygolang.qiniudn.com/161124/f46f67d68ff96fab7cd54524a96379fb...阅读全文

BoltDB 一个简单的纯 Go key/value 存储 [译]

boltDB Blot Bolt 是由 Howard Chu 的 LMDB 项目启发的一个纯粹的 Go key/value数据库。 该项目的目标是为不需要完整数据库服务器(如Postgres或MySQL)的项目提供一个简单,快速和可靠的数据库。 由于 Bolt 是用来作为这样一个低层次的功能,简单是关键。 该API将是小的,只专注于获取值和设置值而已。 项目状态 Blot 稳定,API固定,文件格式固定。 使用完整的单元测试覆盖率和随机黑箱测试来确保数据库一致性和线程安全性。 Blot 目前用于高达1TB的高负载生产环境。 Shopify 和 Heroku等许多公司每天都使用 Bolt 来支持服务。 A message from the author Bolt 最初的目标是提供一个简单的纯 ...阅读全文

基于Golang开发的开源微信小程序(页面高仿大众点评)

小程序基于Taro2.0 + React Hooks开发 测试数据采集自微信小程序--大众点评 服务端api基于 Golang 计划添加基于Reactjs的后台管理系统、PC版、Wap版 目前主要是已浏览页面为主,接下来会继续做其他业务. Github https://github.com/i-coder-robot/dp-min-program 服务端api 项目地址:https://github.com/i-coder-robot/mock-food 最后 喜欢别忘了Star 本项目长期更新完善,欢迎Watch,欢迎扫码,批评指正...阅读全文

博文 2020-02-11 10:32:42 欢喜哥

freetype-go学习

freetype-go的源码在这里https://code.google.com/p/freetype-go/ 它的作用是生成带文字的png图片 首先解决的几个概念: 什么是FreeType? FreeType是一个可移植的,高效的字体引擎。 字体在电脑上的显示有两种方式:点阵和矢量。对于一个字,点阵字体保存的是每个点的渲染信息。这个方式的劣势在于保存的数据量非常大,并且对放大缩小等操作支持不好。因此出现了矢量字体。对于一个字,矢量字体保存的是字的绘制公式。这个绘制公式包括了字体轮廓(outline)和字体精调(hint)。字体轮廓使用贝塞尔曲线来绘制出字的外部线条。在大分辨率的情况下就需要对字体进行精调了。这个绘制字的公式就叫做字体数据(glyph)。在字体文件中,每个字对应一个glyph...阅读全文

博文 2014-10-20 23:12:53 yjf512

Go 语言的 CMS 工具库 Qor

Qor 是基于 Golang 开发的的CMS 一系列工具库,基于 Qor可以快速搭建网站的后台管理系统。 Qor 的工作库包含: 1,后台管理:可以对数据库进去 CURD 管理,支持一对一,一对多,多对多关联关系维护等等 2,支持上传图片到云以及 filesystem,resize、crop 图片等等 3,Publish 发布系统,可以修改数据,并且经过检查后,再发布到正式环境中 4,状态机,可以用于开发工作流的系统 5,I18n,翻译,可以通过在 WEB 界面翻译,并将翻译保存到数据库中 6,L10n,本地化,不同于翻译,他可以针对某个地区来对内容,或者数据结构进行本地化。 7,Roles,权限管理 8,Exchange,通过 Excel,CSV 导入导出数据 9,Wo...阅读全文

golang -- TCP服务器(2)

tcp服务器 包括日志,定时处理,广播,超时 map写添加了锁(读不用锁) 添加了解码器 删除了addr-buf映射,添加删除锁 mark:今天听大神所要处理系统中断EINTR, 以后做简单处理EINTR--retry mark:用struct封装addr, net.Listener, exit(是否断开)等信息..最重要的是使用: br := bufio.NewReader(conn), bw := bufio.NewWriter(conn)来取代读循环,这样就可以需要的时候再读/写 https://github.com/zhangpeihao/gortmp/blob/master/server.go package main import ( "bytes" "encoding/bina...阅读全文

博文 2014-10-04 19:27:04 flyking

Erlang .vs. Golang

最近研究了一阵子 Erlang , 他有20岁,而 Golang 才 5岁。 Erlang 是纯解释性的,动态的,没有数据类型的, 属于 lisp 语言家族。 而 Golang 是纯编译的, 静态的,严格数据类型的,属于 C语言家族。 Erlang 最早祭起“并发编程”的大旗,是 “并发导向”(Current Orient )的语言,强调并发运行的成员; 而 Golang 对“并发” 强调的 成员之间的通道 chan 。各有所长吧。
不过, 我 还真的不喜欢 lisp 风格, 非常不适应; 而 Golang 的 C风格则让人人通体舒泰。
Golang 的门槛相对很低, 学习曲线也极平滑。 相对比而言, Golang 的优越不是一星半点 ...阅读全文

GoLang实现TCP协议客户端和服务端

TCP客户端: // TCP Client端设计 // 使用命令行启动 *.exe 127.0.0.1:5000 package main import ( "fmt" "net" "os" "time" ) func main() { var buf [512]byte if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "Usage: %s host:port", os.Args[0]) } service := os.Args[1] // 绑定 tcpAddr, err := net.ResolveTCPAddr("tcp", service) checkError(err) // 连接 conn, err := net.DialTCP("tcp...阅读全文

博文 2019-11-04 18:33:25 aside section._1OhGeD

go学习笔记_Routine和Channel下

go语言并发编程下 上文从基础层面讲解了goroutine 和 channel ,关于如何使用都停留下嘴皮子上,因此下篇选用几个最简单的例子来巩固下。另外推荐下自己的个人博客,你可以先点进行看下内容是否对您有帮助,在选择收藏或者直接x掉。 个人博客地址:Colourful Code 正文 首先,上文说到channel 有两种情况: 未分配缓存 分配一定缓存 例子从这两点入手给出。 未分配缓存 package main import "fmt" //求和函数sum func sum(a []int,c chan int){ sum :=0 for _,v := range a{ sum += v } c<-sum //向通道c 写入数据值 sum } //主程序入口 func main(){ ...阅读全文

博文 2015-04-25 22:00:05 colouful987

go语言http服务处理image/css/js等静态文件

go语言实现http服务器时如果处理静态文件,需要用到http.ServeFile: func ServeFile(w ResponseWriter, r *Request, name string) { dir, file := filepath.Split(name) serveFile(w, r, Dir(dir), file, false)} 首先根据请求路径r.URL.Path判断是否包含静态文件目录,如果存在则直接返回: img_dir := "/home/qinpeng" if strings.HasPrefix(r.URL.Path,"/img"){ file := img_dir + r.URL.Path[len("/img"):] f,err := os.Open(fil...阅读全文

聚合支付公司独立研发的聚合支付服务平台

第四方支付是相对第三方而言的,作为对第三方支付平台服务的拓展。第三方支付介于银行和商户之间,而第四方支付是介于第三方支付和商户之间,没有支付许可牌照的限制。 第四方支付集中了各种三方支付平台的接口,也就是说集合了各个第三方支付的优势,能够根据商户的需求进行个性化定制,形成支付通道资源互补优势,满足商户需求,提供适合商户的支付解决方案。 总体来讲,第四方支付属于支付服务集成商,具有第三方支付无可比拟的灵活性,便捷性和支付服务互补性。而且第四方支付比第三方支付更具中立性优势,可以一定程度上调和目前第三方支付恶意竞争的状况,保证支付行业健康发展。 现在市面上的支付系统太多了,价钱不一、开发语言多种多样,什么JAVA、.NET、PHP、GOLANG等等。每个公司都打着自己的支付系统才是真正好的系统,...阅读全文

博文 2019-03-23 12:34:41 qq3201809208

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就会...阅读全文

GO 语言开发实例:TCP端口共用服务器

GO 语言开发实例:TCP端口共用服务器 应用提出:”串口服务器“ 是 一种配置硬件。基本工作原理是 反向telnet,将一个console口映射为一个 TCP端口。 现在需要 “多用户同时共用”的功能。即:同一个TCP端口,允许多个用户同时登录,每个用户的输出都被输出到这个TCP端口,而这个TCP端口的输出数据,重复输出给所有的用户。 用GO语言实现这个应用,简直太容易了, 从网上找到 web_agent 的示范代码, 用一个map[int]Net.Conn 来记录所有的登录用户,从目标端口读数据的goroutine单独go,main 过程中,每个Accept单独go一个独立用户,定向到目标端口即可。 全部代码不超过200行。太给力了...阅读全文

Golang轻量级-高并发socket框架

使用chitchatchitchat得以支持高并发连接的关键在于其能够快速响应客户端发起的链接并及时开启goroutine确保一对一的通信。对于使用者而言,只需负责向框架注册正确的IP socket(ipAddr:ipPort)(注:除非特别说明,否则后续提到的地址Addr均指addr:port)并正确编写用于处理接收数据和异常处理函数即可正常运行。开启一个Server仅需创建一个Server实例并调用其Listen()方法即可使一个Server开始正常工作。一个Server通常只用于监听一个端口,负责一类事物的调度处理。我们看一下具体调度的API:更多go语言内容请关注:http://www.fastgolang.co...阅读全文

Go 解析XML

今天看了看XML的解析,挺别致的和C++,Java之类的解析很是不同。 GO中将XMl的结构解析成一个数据结构,类似于一个结构体。 package main import ( "encoding/xml" "fmt" "os" ) type Address struct { City, State string } type Person struct { XMLName xml.Name `xml:"person"` Id int `xml:"id,attr"` FirstName string `xml:"name>first"` LastName string `xml:"name>last"` Age int `xml:"age"` Height float32 `xml:"heig...阅读全文

博文 2016-01-15 17:00:03 king1076

基于Golang的IP地址信息查询服务

文链接:http://tabalt.net/blog/ipquer... 工作中经常会有通过IP匹配用户信息的需求,如确定用户所在的地区(国家/省份/城市)、运营商、时区、经纬度等等。前一阵有个Golang开发的项目也有这样的需求,于是简单实现了一个包,最近忙里偷闲又包了一个支持HTTP和GRPC方式调用的服务,并开源在GitHub上了。本文主要介绍IP地址信息查询的实现细节和使用方式。 首先交代一下GitHub地址: IpQuery Golang Package:https://github.com/tabalt/ipquery IP地址信息查询服务:https://github.com/tabalt/ipqueryd 欢迎大家在项目中使用(已通过N亿日PV服务的考验),有任何问题或建议,...阅读全文

博文 2017-02-10 02:39:36 tabalt

golang实现类似Scan或者Scanf功能

fmt.Scan或者fmt.Scanf可以从标准输入中读取数据,也可以自己实现一个类似的功能 package main import ( _"errors" "fmt" "io" "os" "syscall" "time" "bytes" _"os/exec" "github.com/docker/docker/pkg/term" ) func main() { Stdin() } func Stdin() { var in io.Reader in = os.NewFile(uintptr(syscall.Stdin), "/dev/stdin") _,ok:= term.GetFdInfo(in) if ok { fmt.Println("Is terminal \n") } reade...阅读全文

博文 2015-10-28 17:00:13 webyh

基于Go的D-Bus框架(三)

开源夏令营第二个月的实习期已经过去一半了,这一段时间因为总有小朋友到家里来玩,耽误了一些时间。最近几天主要研究了一下枚举类型的问题,这个问题的需求比较明确,即让go-dbus能够像处理其他数据类型(比如struct)一样处理枚举类型,解决的思路也比较清晰。 D-Bus核心并没有定义枚举类型,为了让go-dbus支持枚举类型,一个可行的做法就是在D-Bus底层用整数来表示枚举类型变量,并且限制它的有效取值。涉及的问题的主要有: 1,marshaling,把Go语言里的数据转化为D-Bus的wire format数据; 2,unmarshaling,把D-Bus的wire format数据转化为Go语言里的数据; 3,相应地处理introspection data。 暂时想到的就是这些,先按照这...阅读全文

博文 2015-06-17 23:08:14 mathmonkey

Golang -- Gorm框架不定条件查询

在现实的项目中,后端接收的参数一般都不是单一的,在查询数据库时,一般参数也是不固定的,所以以下就是解决方式之一,仅供参考。其实我还有一种自己封装的方式,只是现在还没有怎么实际应用,所以就先不发出来了,等我自己实际应用,验证没有问题了之后再做补充。当然,我之后再看看有没有其他更好的方式,也是之后再做补充。 func QueryGorm(c *gin.Context) { fmt.Println("Start...") var peoex mode.PersonEx //此结构体为 people 的扩展结构体,用于接收参数 var peo []mode.Person c.Bind(&peoex) //用结构体接收参数,特别注意,参数的命名要和结构体中字段的命名相同。 db := mode.Db ...阅读全文

博文 2019-08-09 14:39:04 LLL_小浪

golang常见面试题

1. 切片与数组对比 (1). 数组 数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列。 数组的长度是数组类型的一部分,所以[3]int 和 [4]int 是两种不同的数组类型。 (2). 切片 切片表示一个拥有相同类型元素的可变长度的序列。 切片是一种轻量级的数据结构,它有三个属性:指针、长度和容量。 切块结构如下: type Slice struct { ptr unsafe.Pointer len int cap int } (3). 关系 一个底层数组可以对应多个slice,这些slice可以引用数组的任何位置,彼此之间的元素还可以重叠。 viso1.jpg 2. 结构体 3. interfac...阅读全文

博文 2018-06-28 21:34:44 百味纯净水

Golang集合操作 - gset

文章来源:https://goframe.org/container/garray/index gset 集合,即不可重复的一组元素,元素项可以为任意类型。 同时,gset支持可选的并发安全参数选项,支持并发安全的场景。 使用场景: 集合操作。 使用方式: import "github.com/gogf/gf/g/container/gset" 接口文档: https://godoc.org/github.com/gogf/gf/g/container/gset func New(unsafe ...bool) *Set func NewSet(unsafe ...bool) *Set func NewFrom(items interface{}, unsafe...bool) *Set f...阅读全文

博文 2019-04-25 00:34:40 极粉

招聘【数据采集后台开发工程师】Go

#####**岗位职责: ** 参与腾讯游戏运维数据平台的建设; 参与数据平台数据管道建设; 负责高性能大数据采集系统的设计与研发。 #####**岗位要求:** 大学本科及以上学历,3年以上工作经验,2年以上 C++/Go开发经验; 熟悉大数据量、高并发环境下的Linux服务端程序开发; 熟悉常用的服务端IO设计模型,深入理解TCP/IP等网络协议; 有高性能数据采集系统设计经验者优先; 熟悉Beats、Fluentd、Logstash等开源数据采集方案,有二次开发经验优先; 具有良好的沟通能力、学习能力、分析解决问题能力; 具有高度的责任心和团队合作精神。 **简历投递信箱: terrencehan@tencen...阅读全文

RedMonk的语言排名:JavaScript,Java保持领先;Go未进前20

avaScript在基于Github和Stack Overflow的排名统计中,均排名第一。 在RedMonk的这个月编程语言指数中:JavaScript,Java和PHP排名前三。这个指数基于Github 的语言代码行数和Stack Overflow上的语言标签数量。 “在狭隘的比较中,Java总是在排名中超过JavaScript,但二者的差异总是如此之远,以至于并不显著”,RedMonk首席分析师Stephen O'Grady这样说。“最显著的特点是该语言经常被描述为将死,有时又被吹捧地上升几位” RedMonk的指数中 Python, C#, C++, Ruby, CSS, C, 和 Objective-C也进入前十。排名11~20的语言为:Perl 和 Shell (并列11), R...阅读全文

Go并发编程——channel

以前从未接触过并发编程,所以,且写且学吧 引入channel package main import ( "fmt" "sync" "runtime" ) var counter int = 0 func Count(lock *sync.Mutex){ lock.Lock() counter++ fmt.Println(counter) lock.Unlock() } func main(){ lock := &sync.Mutex{} for i:=0;i<100;i++{ go Count(lock) } for{ lock.Lock() c:=counter lock.Unlock() runtime.Gosched() if c>=100{ break } } } 将counter...阅读全文

博文 2014-10-11 16:00:02 luan_tianjiao

channel数据结构

channel是go语言的一大特色,使用原子函数还是使用互斥锁都不如使用channel来的简单,go语言中的channel可以作为函数参数传递和返回值返回,通过发送和接受数据在goroutine之间同步(在学习和使用go语言的时候,我们应该牢记,go语言中所有的结构都是值拷贝的) 本文不对channel使用作讲解,直接上 *酸(dai)菜(ma)* : type hchan struct { qcount uint //队列数据总的数据数量 dataqsiz uint //环形队列的数据大小 buf unsafe.Pointer //指向dataqsiz元素类型大小的数组 elemsize uint16 closed uint32 elemtype *_type // 元素类型 sendx ...阅读全文

如何用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 蒙卓

5亿次请求,95万QPS HTTPS CC攻击——阿里云云盾抗下全球最大DDoS攻击

5亿次请求,95万QPS HTTPS CC攻击——阿里云云盾抗下全球最大DDoS攻击 3月29日, 阿里云正式对外发布《2015下半年云盾互联网DDoS状态和趋势报告》。报告披露,去年11月,阿里云安全团队成功防御了黑客对阿里云平台上某互联网金融用户发起的超大规模HTTPS/SSL CC流量攻击,此次攻击也是迄今为止全球有统计数据最大的HTTPS SSL/CC攻击。 作为国内最大的公共云计算服务提供商,大量网站选择阿里云的安全防护,也因此为国内客户防御了当前互联网上主要的攻击行为。 攻击者从11月5日下午14点开始针对网站开始发起攻击,出现两次波峰分别在14点10和晚上7点30左右,总攻击量达到了5亿次请求。 ![1攻击请求QPS变化.jpg](http://stu...阅读全文

【golang】rune数据类型

在学习golang基础的时候,发现有个叫rune的的数据类型,当时不理解这个类型的意义。这样可能还是对rune的作用与意义比较懵逼,我们通过一个简单的来看下rune的作用。先来看下下面这块代码执行结果是什么?```package mainimport "fmt"func main() {var str = "hello 你好"fmt.Println("len(str):", len(str))}```我们猜测结果应该是:8:5个字符1个空格2个汉字。那么正确答案是多少呢? len(str)咦...结果居然是12,这是为什么呢!?golang中string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。那...阅读全文

博文 2019-01-08 23:34:46 wangcc_sd

七牛云智能日志管理平台正式发布

七牛云智能日志管理平台实现了数据的全生命周期智能管理。 适用于数据中心监控、应用质量管理、统一日志管理、物联网数据监控等典型应用场景,并提供一系列行业解决方案。 致力于让用户以最低的心智负担,最佳的体验,最快的速度获得最大的价值。 推荐阅读: 陈超:七牛云智能日志管理平台的应用与设计 扫码立即了解智能日志管理平...阅读全文

beego ORM建表

开发http后台时用了beego这个框架,牵涉到数据库,就用了ORM模块。 目前的用法是在init里面建表,但是来的数据量很大,所以过一阵表格就会有很多记录。这样就希望过一段固定时间就生成新的表格,后续的数据写在新表格内(表格字段不变,但名字有细微变化),旧表格仅作统计查询使用。 这个功能不知道怎么实现,有了解的大大给指点一下啊,多谢多...阅读全文

[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

用Go语言写一个简单的HTTP服务器,及静态文件服务器

package main import ( // "fmt" "io" "log" "net/http" "os" "regexp" "time" ) func main() { serveMux := http.NewServeMux() serveMux.HandleFunc("/", SayHello) serveMux.HandleFunc("/bye", SayBye) // serveMux.HandleFunc("/static", StaticServer) server := http.Server{ Addr: ":8080", Handler: serveMux, ReadTimeout: 5 * time.Second, } err := server.ListenA...阅读全文

博文 2015-06-17 23:03:17 fansite

Go 切片的 append 操作总结

预备 切片是对其底层数组的某一段的引用。 切片有 len 和 cap 两个属性,代表切片的引用长度和切片的容量(从切片的引用起点位置到其底层数组最末端的长度。因为其底层数组的长度是固定的,这也就是意味着容量是指切片可引用的最大宽度)。 append 函数 slice2 := append(slice1, 23, 15) 以上对切片 slice1 进行 append 操作。该操作遵循以下原则: append 函数对一个切片 slice1 进行追加操作,并返回另一个长度为 len(slice1) + 追加个数 的切片,原切片不被改动,两个切片所指向的底层数组可能是同一个也可能不是,取决于第二条: slice1 是对其底层数组的一段引用,若 append 追加完之后没有突破 slice1 的容量,...阅读全文

博文 2019-08-24 00:02:40 Xavier

整理了一份全国行政区划数据表,省市区县各级已经用 golang 做了关联,三级联动

代码如下:```package mainimport ( "database/sql" "encoding/json" "fmt" "io/ioutil" "log" "net/http" "strconv" "strings" _ "github.com/go-sql-driver/mysql")type tude struct { Lat float32 `json:lat` Lng float32 `json:lng`}type region struct { Id string `json:id` Name string `json:name,omitempty` Fullname string `json:fullname` Location tude `json:location...阅读全文

博文 2017-07-02 10:57:32 April

Golang协程与通道整理

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

技术分享 《分布式一致性raft算法实现原理》

这段时间跟同事聊了不少分布式系统中的常用算法协议,中间有聊到分布式一致性的话题,当然我们对一致性理解都是那种介绍的层次。 哈哈 , 后来用了心思去学习分布式一致性协议 raft, 现在有些心得,就拿出来给同事分享下。 先简单聊下什么是raft协议. 他用来做什么的? 分布式存储系统通常会维护多个副本,这样不仅能提高系统的可用性,因为有多个副本所以性能也有提高。但是多副本带来的代价就是分布式存储系统的核心问题之一: 需要维护多个副本的数据一致性。 Raft一致性协议就是用来干这事的,即使在部分副本宕机的情况下,只要符合raft的原则,照样可以对外提供服务。 Raft是一种较容易理解的一致性协议。 我曾经也写过工夫去学习paxos, 结果…. 我想大家都懂的,没搞明白。 学习paxos的过程是有...阅读全文

博文 2017-04-04 19:32:07 rfyiamcool

[位置北京]找golang能力者合伙人

寻找北京地区golang语言能力者合伙人,让我们一起用golang改变在线教育 慧知学院帮助学员持续成长的在线教育平台,在这里帮助百万名学员在合适自己的职业方向不断成长,有能力,跟我们一起来做有意的的事情吧。 基础要求: 1、精通golang、PHP语言,熟悉python语言 2、有排序算法、推荐算法、自然语言处理、数据挖掘等的实践经验 ------ 工作年限不限,如果你满足上面两个基础条件,并拥有超强的学习能力,那么欢迎加入我们,不需要给我简历,有兴趣的加微信:eyhetia...阅读全文

基于 go 语言的 API 网关Goku-API-Gateway

![image](https://data.eolinker.com/course/JUpFBDr53cedd94ca0dd72b318b08930cd6bd37c8fb933a) GoKu API Gateway,中文名:悟空API网关,是eoLinker旗下、国内首个开源go语言API网关,帮助企业进行API服务治理与API性能安全维护,为企业数字化赋能。 GoKu支持OpenAPI与微服务管理,支持私有云部署,实现API转发、请求参数转换、数据校验等功能,提供图形化界面管理,能够快速管理多个API网关,提高API业务安全性。 **免费且开源**:GoKu API Gateway秉承开源精神,是国内第一个企业级开源的API接口网关,为广大的开...阅读全文

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