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

使用Go语言每分钟处理1百万请求(译)

使用Go语言每分钟处理1百万请求(译) 在Malwarebytes 我们经历了显著的增长,自从我一年前加入了硅谷的公司,一个主要的职责成了设计架构和开发一些系统来支持一个快速增长的信息安全公司和所有需要的设施来支持一个每天百万用户使用的产品。我在反病毒和反恶意软件行业的不同公司工作了12年,从而我知道由于我们每天处理大量的数据,这些系统是多么复杂。 有趣的是,在过去的大约9年间,我参与的所有的web后端的开发通常是通过Ruby on Rails技术实现的。不要错怪我。我喜欢Ruby on Rails,并且我相信它是个令人惊讶的环境。但是一段时间后,你会开始以ruby的方式开始思考和设计系统,你会忘记,如果你可以利用多线程、并行、快速执行和小内存开销,软件架构本来应该是多么高效和简单。很多年期...阅读全文

博文 2017-02-10 11:57:37 itfanr

一些Golang小技巧

一些Golang小技巧 2016-04-22 今天给大家介绍3个我觉得比较有启发的Golang小技巧,分别是以下几个代码片段 nsq里的select写文件和socket io模块里的sendfile fasthttp里对header的处理 nsq里的select读 在nsq中,需要读取之前磁盘上的,或者是从内存中直接读取,一般人都是先判断内存中有没有数据,然而,nsq另辟蹊径使用了select语句,把CSP模式用到了极致。 源文件链接:channel.go select { case msg = <-c.memoryMsgChan: //尝试从内存中读取 case buf = <-c.backend.ReadChan(): //如果内存中没有,直接从磁盘上读取 msg, err = deco...阅读全文

博文 2017-02-11 16:34:27 蒙卓

Go学习

简介 Go语言是Google出了一个语言,基本概念我就不介绍了, GO语言从原生上支持高并发,并提供了简单的调用方式,我们就重点研究一下它的高并发 进程与线程 在介绍高并发之前,我们需要了解一下我们现在的进程和线程,以及用户态和内核态。一个可运行程序在磁盘上的时候,是一个静态的,当运行被加载到内存的时候,就是一个进程,其内存被分割为几个区域,关于进程的概念可以参考我写的关于Java的一篇博客。 严格来说,进程是不能运行的,操作系统调度的最小单元是线程,所以当程序被加载到内存的时候,默认的就有一个线程,这个线程被称为主线程。 主线程可以创建多个线程,在一般的操作系统中,当你运行在用户态的程序准备一个线程的时候,程序会中断,由用户态转到内核态,在内核态创建一个线程,创建成功后,再转到用户态,创建...阅读全文

博文 2016-09-04 19:00:02 beyondbit

对beego的控制器函数进行单测

根据astaxie大神的意见,在beego上对controller做单测比较困难,他的建议就是把所有逻辑都拆分出来,放到model中。然后对model中的public函数进行测试。 但是这就会多很多封装,而且,有些时候对controller的测试可能是绕不开的。 其实对controller进行单测也不是那么麻烦,重点就是把http需要的Request和ResponseWriter需要的数据都构造出来即可。 下面是我的做...阅读全文

博文 2017-02-10 10:28:29 flybywind

Dockerfile 最佳实践

Dockerfile 最佳实践 Why Docker 作为非常优秀的轻量级 PaaS 解决方案,得到了主流云服务平台的先后支持,配合 Docker Registry Hub 提供高质量的 Docker Image 以及 Fig 进行 Containers 的管理,吸引了全球的开发者将自己的服务迁移到 Docker Containers 上面,从而提高开发和部署效率。作为快速发展的新技术,很多高质量的技术文章和使用经验都是英文的,我自己在学习 Docker 的过程中,在不同的网站和个人 Blog 就看到过很多,所以,就想着把我看到的高质量文章翻译过来放在这个 Blog,一方面翻译的过程是加深理解的过程,另一方面把散落在各处的好文章集中在一个地方并翻译成中文,便于之后的分享以及回顾。 What ...阅读全文

博文 2017-02-10 13:44:16 Xiaohui Wang

gocrawl类库解析

最近打算介绍go语言编写的开源类库架构分析,自己最开始使用go语言是做爬虫的,采用的是gocrawl, gocrawl是一个使用go语言编写的开源爬虫类库,今天来分析下gocrawl的实现。 ## 示例代码 ``` package gocrawl import ( "github.com/PuerkitoBio/goquery" "net/http" "regexp" "time" ) // Only enqueue the root and paths beginning with an "a" var rxOk = regexp.MustCompile(`http://duckduckgo\.com(/a.*)?$`) // DefaultExtender是gocrawl提供的一些默认实...阅读全文

博文 2017-02-09 20:01:19 shanks

一个golang推送服务器集群:gopush-cluster

Terry-Mao/gopush-cluster 是一个支持集群的comet服务(支持websocket,和tcp协议)。 特性 轻量级高性能纯Golang实现支持消息过期支持离线消息存储支持单个以及多个私信推送支持单个Key多个订阅者(可限制订阅者最大人数)心跳支持(应用心跳和tcp keepalive)支持安全验证(未授权用户不能订阅)多协议支持(websocket,tcp)详细的统计信息可拓扑的架构(支持增加和删除comet节点,web节点,message节点)利用Zookeeper支持故障转移 安装(版本1.0.5) 一、安装依赖 ? 1 2 $ yum -y install java-1.7.0-openjdk $ yum -y install gcc-c++ 二、搭建zookee...阅读全文

博文 2016-09-07 15:00:03 txj236

Zr847t6XiF7Go

blog.zhulong.com/blog/detail7495895.html blog.zhulong.com/blog/detail7487196.html blog.zhulong.com/blog/detail7498773.html blog.zhulong.com/blog/detail7489021.html blog.zhulong.com/blog/detail7505464.html blog.zhulong.com/blog/detail7490664.html blog.zhulong.com/blog/detail7486714.html blog.zhulong.com/blog/detail7490843.html blog.zhulong.com/blog/...阅读全文

博文 2016-09-17 00:00:01 toryuhen

go语言json操作指南

package main import ( "encoding/json" "fmt" "os" ) type ConfigStruct struct { Host string `json:"host"` Port int `json:"port"` AnalyticsFile string `json:"analytics_file"` StaticFileVersion int `json:"static_file_version"` StaticDir string `json:"static_dir"` TemplatesDir string `json:"templates_dir"` SerTcpSocketHost string `json:"serTcpSocketHost...阅读全文

博文 2016-09-10 18:00:09 guoer9973

我的第一个go app

一、安装 1.下载和解压缩 # wget https://storage.googleapis.com/golang/go1.7.1.linux-amd64.tar.gz # tar -C /usr/local -xzf go1.7.1.linux-amd64.tar.gz 2、添加环境变量 2.1 Add /usr/local/go/bin to the PATH environment variable 在控制台临时设置变量 # export GOROOT=/usr/local/go # export PATH=$PATH:$GOROOT/bin 在配置文件中 vim /etc/profile 永久设置变量,具体方法问百度。 3、测试环境 # mkdir -p $HOME/go/work...阅读全文

博文 2016-10-03 03:00:02 奔跑的小蚂蚁

Go语言_反射篇

http://www.cnblogs.com/yjf512/archive/2012/06/10/2544391.html Go语言的基本语法的使用已经在前几篇陆陆续续学完了,下面可能想写一些Go的标准库的使用了。 先是reflect库。 reflect库的godoc在http://golang.org/pkg/reflect/ Type和Value 首先,reflect包有两个数据类型我们必须知道,一个是Type,一个是Value。 Type就是定义的类型的一个数据类型,Value是值的类型 具体的Type和Value里面包含的方法就要看文档了: http://golang.org/pkg/reflect/ 这里我写了个程序来理解Type和Value: ? 1 2 3 4 5 6 7 8 ...阅读全文

博文 2015-06-17 20:08:20 ywh147

go 练手 os文件操作+os包相关

如果文件不存在就创建文件,如果存在就续写文件 package wrigeFile import ( "fmt" "github.com/golang/glog" "os" ) //注意OpenFile这个方法的第二个参数,一定要加上RDWR,可读可写的权限 func writeFile(s string) { file1, err := os.OpenFile("test.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0660) if err != nil { panic(err) } defer file1.Close() if err != nil { fmt.Println(file1, err) return } glog.Infoln(s) fi...阅读全文

博文 2017-03-05 19:48:42 暗黑破坏球嘿哈

HDU 3715 Go Deeper 二分 + 2-sat

题目: http://acm.hdu.edu.cn/showproblem.php?pid=3715 题意: 给定一段递归伪代码,问执行这段伪代码递归的最深层数 思路: 二分枚举答案用2-sat判定是否可行。具体建图如下:如果c[i] == 0,那么a[i] OR b[i],如果c[i] == 1,那么(a[i] AND b[i]) OR (~a[i] AND ~b[i]),如果c[i] == 2,那么NOT(a[i] AND b[i]),然后强连通缩点判断i和~i是否在同一个环内 #include #include #include #include #include #include 阅读全文

博文 2016-10-07 04:00:02 discreeter

PhalGo-Respones

PhalGo-Respones 在处理请求 Api 请求中 , 除了对 Request 之外最重要的就是 Response 了 , PhalGo 支持两种格式的参数返回一种是 Josn 一种是 XML , 在 PhalGo 中默认使用JSON进行返回 , 可以在入口文件进行全局返回参数配置或在摸个接口内部指定此接口返回的参数类型 Response初始化 Response 和 Request 一样需要在 Api 中进行初始化: Response := phalgo.NewResponse(c) 返回格式 Response 默认返回格式如下: type RetParameter struct { Code int `json:"code";xml:"code"` Data interface{}...阅读全文

博文 2017-02-10 13:53:29 喵了个咪_

Go 程序的性能调试问题 - CPU 篇

注:本文的原文 Debugging performance issues in Go programs 由 Dmitry Vyukov 在 05/10/2014 - 07:06 编写 注:原文太长,大家要看全部的请看原文,其他的部分,后续慢慢翻译。 让我们假设你想提升你的GO程序的性能。这里有一些工具可以帮助你完成这个任务。这些工具能帮助你定位多种类型的热点(CPU,IO,内存),你为了能够显著提升程序性能,你必须专注于热点发生的地方。尽管如此,另外一个结果是可能的--这些工具能帮助你确定程序中明显的性能缺陷。例如,当你在每个程序启动的时候,你可以在每次查询的之前准备一个 SQL 语句。另外一个例子是如果一个 O(N^2) 算法在某种程度上陷入了一个明显存在并且期望的 O(N) 情况。为了确...阅读全文

博文 2017-02-09 13:39:45 yexiaobai

Updating Protobuf and GRPC in Golang

自: http://russmatney.com/techsposure/update-protobuf-golang-grpc/ TL;DR: When protobuf updates, all the .protos and deps need to update. This post is a quick-lookup for how to do that so I’m not googling it every time. Go Dependencies Update your relevant go dependencies: sh go get -u github.com/golang/protobuf/{proto,protoc-gen-go} && \ go get -u ...阅读全文

博文 2016-08-22 23:00:01 xiaouisme

golang语言中map的初始化及使用

文链接:http://studygolang.com/articles/2379 // 先声明map var m1 map[string]string // 再使用make函数创建一个非nil的map,nil map不能赋值 m1 = make(map[string]string) // 最后给已声明的map赋值 m1["a"] = "aa" m1["b"] = "bb" // 直接创建 m2 := make(map[string]string) // 然后赋值 m2["a"] = "aa" m2["b"] = "bb" // 初始化 + 赋值一体化 m3 := map[string]string{ "a": "aa", "b": "bb", } // ===================...阅读全文

博文 2016-08-31 14:00:07 hellochenlu

go语言数组与切片比较

一、数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列。 (1)数组的创建。 数组有3种创建方式:[length]Type 、[N]Type{value1, value2, ... , valueN}、[...]Type{value1, value2, ... , valueN} 如下: 复制代码 代码如下: func test5() { var iarray1 [5]int32 var iarray2 [5]int32 = [5]int32{1, 2, 3, 4, 5} iarray3 := [5]int32{1, 2, 3, 4, 5} iarray4 := [5]int32{6, 7, 8, 9, 10} iarray5 := [...]int32{11, 12...阅读全文

博文 2016-10-11 17:00:01 jiayouzl

go语言环境搭建+sublime text3(windows环境下)

1.安装sublime text3 2.安装go语言程序包3.测试go语言是否安装成功 键入cmd命令 ,打开dos窗口,键入go命令(如果在默认路径下找不到,可以在安装目录下查找,eg:go/bin )表示安装成功4.配置环境变量 我的电脑=》属性=》系统设置=》环境变量设置,添加GOPATH变量,这个变量的路径就是放置源码的地方 其中还有两个变量,这两个变量一般是默认设置即可,GO ,GOROOT5.查看环境变量设置是否成功 dos中键入go env 查看命令执行成功提示应该如图所示的界面6.配置sublime text3(安装sublime插件) 1).首先安装package Control包,快捷键ctrl+` (菜单项View > Show Console 来调出命令界面),输入x...阅读全文

博文 2017-02-10 11:30:31 月亮1987

安装GO语言环境之安装Visual Studio Code插件

在安装Visual Studio Code插件的时候,由于谷歌的限制,在下载下列插件的时候会报错: go get -u -v github.com/nsf/gocode go get -u -v github.com/rogpeppe/godef go get -u -v github.com/golang/lint/golint go get -u -v github.com/lukehoban/go-find-references go get -u -v github.com/lukehoban/go-outline go get -u -v sourcegraph.com/sqs/goreturns go get -u -v golang.org/x/tools/cmd/gorena...阅读全文

博文 2016-08-30 00:00:01 mubing

go学习

对于go的学习,需要注意的地方。 1、特别注意,go中可以使用go env命令查看我们可以在环境变量中设置的变量。 2、一般的输出使用内建函数print或者println就可以了,fmt.printXXX函数有更多的作用,比如格式化输出 3、 4、系统输出数组喜欢用[]并使用空格作为元素分隔,所以不要以为[]和空格是数据本来就又的,这点需要注意! 5、java以文件学习,因为java中国一个文件对应一个类,而go以模块学习,因为go中都是直接调用模块的函数,而模块的函数都分布在模块下的文件里面。 6、代码块中的:=短式声明在代码块外不起作用,另外,多使用go tool vet -shadow your_fil.go检查隐藏变量。 7、GOBIN环境变量可以让go install的exe文件放...阅读全文

博文 2016-08-29 19:00:03 hangeqq685042

go web服务(2)

练习:HTTP 处理 实现下面的类型,并在其上定义 ServeHTTP 方法。在 web 服务器中注册它们来处理指定的路径。 type String string type Struct struct { Greeting string Punct string Who string } 例如,可以使用如下方式注册处理方法: http.Handle("/string", String("I'm a frayed knot.")) http.Handle("/struct", &Struct{"Hello", ":", "Gophers!"}) package main import ( "fmt" "log" "net/http" ) type String string type Stru...阅读全文

博文 2016-08-30 13:00:05 chenxun2009

go语言学习

go语言菜鸟教程:http://www.runoob.com/go/go-tutorial.html 实效go编程:http://docscn.studygolang.com/doc/effective_go.html 在线go运行环境:https://tour.golang.org/welcome/1 go的安装:参照这里在Windows上安装非常easy:http://www.runoob.com/go/go-environment.html go中文标准库(Ctrl+f):http://docscn.studygolang.com/pkg/#stdlib go英文包索引与搜索引擎:https://godoc.org/ /*********************************...阅读全文

博文 2016-10-05 04:00:05 曾劲松

Go语言异常处理defer\panic\recover

Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下(比如除数为 0了)。才使用Go中引入的Exception处理:defer, panic, recover。 这几个异常的使用场景可以这么简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。 例子代码: package main import "fmt" func main(){...阅读全文

博文 2016-09-12 12:00:15 迪克猪

go语言使用grpc的步骤

grpc提供了很好的rpc远程过程调用功能,封装了中间环节,让使用rpc的客户服务端只需要关注自己的业务即可。 go语言下使用gprc的步骤如下: 1、安装go语言 go语言的安装不再详述,具体参见:https://golang.org/doc/install grpc需要在go语言1.5或以上版本工作 2、安装grpc 安装好go语言后,调用如下: $ go get google.golang.org/grpc 3、安装 Protocol Buffers v3 到https://github.com/google/protobuf/releases下下载对应平台和版本(protoc--.zip)的压缩包或安装包,解压到你自己的目录下,同时将目录下的bi...阅读全文

博文 2016-09-03 08:00:09 sky101010ws

57.蛤蟆笔记go语言——闭包

57.蛤蟆笔记go语言——闭包 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)。 示例代码如下: packagemain import"fmt" funcExFunc(nint)func(){ sum:=n a:=func(){//把匿名函数作为值赋给变量a(Go不允许函数嵌套。 //然而你可以利用匿名函数实现函数嵌套) fmt.Println(sum+1)//调用本函数外的变量 }//这里没有()匿名函数不会马上执行 returna } funcmain(){ myFunc:=ExFunc(10) myFunc() myAnotherFunc:=ExFunc(20) myAnotherFunc() myFunc() myAnotherFunc() } 执行结果如下...阅读全文

博文 2016-09-08 13:00:03 notbaron

GoGuru Sublime text 安装

Sublime text的Guru插件叫GoGuru(http://www.jianshu.com/p/994e85e21135). GoGuru 的插件地址https://alvarolm.github.io/GoGuru/2.sublime 打开 Preferences->Package Control->Install Package.输入GoGuru.安装成功即可。 2211.png 查看默认的快捷键 Preferences->Package Settings->GoGuru->key Bindings default底下注释掉的快捷键可以开启直接使用相应的命令。 333333.png 默认的快捷键ctrl+shift+g 既可以打开指令界面,自己选择调用具体的某一个自己的指令 44...阅读全文

博文 2017-03-10 18:27:42 hehe_Android

go语言学习道路(插曲)-一个疑惑的问题

最近写go语言程序的时候,发现了一个问题。先看代码:// MusicPlay project main.go package main import ( "fmt" ) type Cat interface { Meow() } type Tabby struct{} func (*Tabby) Meow() { fmt.Println("meow") } func GetACat() Cat { var myTabby *Tabby = nil // Oops, we forgot to set myTabby to a real value return myTabby } func TestGetACat() { var ICat Cat var tabby *Tabby = nil ...阅读全文

博文 2016-09-20 06:00:02 tongdajiu

GO 语言五步让你成为高手

这里是GO程序员的五个进化阶段: 第一个阶段(菜逼): 刚刚学习了这门语言。 已经通过一些教程或者培训班了解基本的语法,可以写短的代码片段。 第二个阶段 (探索者): 可以写一个完整的程序,但不懂一些更高级的语言特征,比如“channels”。还没有使用GO写一个大项目。 第三个阶段(大手): 你能熟练的使用Go, 能够用GO去解决,生产环境中一个具体和完整的问题。已经形成了一套自己的惯用法和常用代码库。在你的编码方案中Go是一个非常好用的工具。 第四阶段 (大神): 绝逼清楚Go语言的设计选择和背后的动机。能理解的简洁和可组合性哲学。 布道师: 积极地与他人分享关于Go语言知识和你对Go语言的理解。在各种合适的场所发出自己的声音, 参与邮件列表、建立QQ群、做专题报告。成为一个布道者不见得...阅读全文

博文 2016-09-03 05:00:02 yueguanyun

Go语言开发常见陷阱

Go作为一种简便灵巧的语言,深受开发者的喜爱。但对于初学者来说,要想轻松驾驭它,还得做好细节学习工作。 初学者应该注意的地方: 大括号不能独立成行。 未使用变量错误——对于全局变量和函数参数变量,是可以定义后不使用的。但是对于函数内部变量来说,如果进行定义后不进行使用,编译器会提示错误。 导入包未调用错误——导入包后,如果不进行调用,例如函数,接口,结构及变量等对象,那么会出现编译错误。这里建议使用空白表示符“_”来避免类似错误。 变量简写只适用于函数内部。 重新定义变量要使用简写声明——你不能在一个独立的语句中重新定义一个变量,但在复合变量场合是允许的。重新定义的变量需存在于同一区块,否则会产生一个阴影变量。 意外的变量——变量简写语法由于十分简便,因此很容易会把它作为一个常规的指派操作。...阅读全文

博文 2017-02-10 12:21:17 谢权

GO 语言五步让你成为高手

这里是GO程序员的五个进化阶段: 第一个阶段(菜逼): 刚刚学习了这门语言。 已经通过一些教程或者培训班了解基本的语法,可以写短的代码片段。 第二个阶段 (探索者): 可以写一个完整的程序,但不懂一些更高级的语言特征,比如“channels”。还没有使用GO写一个大项目。 第三个阶段(大手): 你能熟练的使用Go, 能够用GO去解决,生产环境中一个具体和完整的问题。已经形成了一套自己的惯用法和常用代码库。在你的编码方案中Go是一个非常好用的工具。 第四阶段 (大神): 绝逼清楚Go语言的设计选择和背后的动机。能理解的简洁和可组合性哲学。 布道师: 积极地与他人分享关于Go语言知识和你对Go语言的理解。在各种合适的场所发出自己的声音, 参与邮件列表、建立QQ群、做专题报告。成为一个布道者不见得...阅读全文

博文 2016-09-03 09:00:11 yueguanyun

go web服务(2)

练习:HTTP 处理 实现下面的类型,并在其上定义 ServeHTTP 方法。在 web 服务器中注册它们来处理指定的路径。 type String string type Struct struct { Greeting string Punct string Who string } 例如,可以使用如下方式注册处理方法: http.Handle("/string", String("I'm a frayed knot.")) http.Handle("/struct", &Struct{"Hello", ":", "Gophers!"}) package main import ( "fmt" "log" "net/http" ) type String string type Stru...阅读全文

博文 2016-09-08 10:00:03 chenxun2009

go语言方法Value Receiver, Pointer Receiver各种不同情况的实验笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! for range 问题 http://stackoverflow.com/questions/30577212/go-for-range-slice-and-goroutine-method-invocation-the-logic-behind package main import ( "fmt" "time" ) type field struct { name string } func (p *field) print() { fmt.Printf("print: p: %p, v: %s\n", p, p.name) } func main() { data := []field{ {"one"},{"two"},...阅读全文

博文 2016-09-05 16:00:07 htyu_0203_39

基于Eclipse的Go语言可视化开发环境

基于Eclipse的Go语言可视化开发环境搭建与使用一个基于Eclipse的Go语言可视化开发环境。注意:在阅读此片经验前,先确保必要工具已经安装或打开工具/原料搭建好Go语言开发环境,详细步骤见经验:http://jingyan.baidu.com/article/c85b7a6414e5ee003bac95c6.htmlEclipse开发平台官方下载地址:http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/junosr2当然,如果你所使用的计算机的网速较慢,你也可以选择我已经下载好了的Goclipse(即:无需看步骤2~4了)百度网盘地址:http://pan.baidu.com/share/link...阅读全文

博文 2017-02-09 08:01:02 umigo0819

杭州4--29 关于sqltest_go和sqltest_beego的几个注意点

sqltest_go注意点: 1.要引入两个包 import{_"github.com/go-sql-driver";"database/sql"},其中第一个包前面要加上“_”,只需要其中 的init函数 2.在对数据库数据进行操作时 db,_ := sql.Open("mysql",addr) res := db.Query("select * from user where username=?,"zs")//此时res是一串地址符 for res.Next(){ var user User res.Scan(&user.Id,&user.Username,&user.Password) } //Scan()中的函数个数和类型要与数据库字段的个数和类型相同,否则将赋值失败 sqltes...阅读全文

博文 2016-04-29 10:00:00 zyh570453280

Go语言入门【六】:源码学习-net/http

package net/http是Go语言的主要应用场景之一web应用的基础,从中可以学习到大量前文提到的io,以及没有提到的sync包等一系列基础包的知识,代码量也相对较多,是一个源码学习的宝库。本文主要从一个http server开始,讲解Go是如何实现一个http协议服务器的。 主要涉及以下源码文件:net/net.gonet/server.gonet/http.gonet/transfer.gosync/pool.gosync/mutex.go 0.引子:从最简单的http server说起 func main() { http.HandleFunc("/hi", hi) http.ListenAndServe(":9999", nil) fmt.Printf("hello, wor...阅读全文

博文 2017-03-05 19:37:18 知米丶无忌

Go-Servers

tcp Go简化了传统的socket处理步骤: - 服务器端的流程:Listen->Accept(->Decode->Close) - 客户端的流程:Dial->Encode->Close package main import ( "fmt" "encoding/gob" "net" "time" ) func server() { // listen on a port listen, err := net.Listen("tcp", ":9999") if err != nil { fmt.Println(err) return } for { // accept a connection connection, err := listen.Accept() if err != nil...阅读全文

博文 2016-09-05 11:00:03 u013344915

Golang学习笔记(2)---go语言基本类型

布尔型:bool长度1字节取值范围:true,false注意:不可以用数字代表true或false整型:Int根据平台可能为32为或64位 8位整型:int8/uint8长度:1字节取值范围:-127~127,0~255byte 字节型 其实就是 uint8的别名 16位整型:int16/uint16长度:2字节取值范围:-32768~32768,0~65535 32位整型:int32/uint32长度:4字节rune就是int32的别名 浮点型:float32/float64长度:4字节/8字节小数位:float32精确到小数点后7位,float64精确到小数点后15位保存指针的uintptr类型,根据平台来分为32位或64位其他类型:array struct string引用类型:map...阅读全文

博文 2017-02-09 18:24:14 beyondlee2011

Golang学习(13)——unicode包

Golang学习 - unicode 包------------------------------const ( MaxRune = '\U0010FFFF' // Unicode 码点的最大值 ReplacementChar = '\uFFFD' // 表示无效的码点 MaxASCII = '\u007F' // 最大 ASCII 值 MaxLatin1 = '\u00FF' // 最大 Latin-1 值)------------------------------// 判断字符 r 是否在 rangtab 范围内。// 可用的 RangeTable 参见 go/src/unicode/tables.go。func Is(rangeTab *RangeTable, r rune) bo...阅读全文

博文 2017-02-10 10:20:17 1160636144

Go如何使得Web工作

web工作方式的几个概念 以下均是服务器端的几个概念 Request:用户请求的信息,用来解析用户的请求信息,包括post、get、cookie、url等信息 Response:服务器需要反馈给客户端的信息 Conn:用户的每次请求链接 Handler:处理请求和生成返回信息的处理逻辑 分析http包运行机制 如下图所示,是Go实现Web服务的工作模式的流程图 图3.9 http包执行流程 创建Listen Socket, 监听指定的端口, 等待客户端请求到来。 Listen Socket接受客户端的请求, 得到Client Socket, 接下来通过Client Socket与客户端通信。 处理客户端的请求, 首先从Client Socket读取HTTP请求的协议头, 如果是POST方法,...阅读全文

博文 2016-09-06 12:00:01 chenxun2009

Debugging performance issues in Go programs

Let's assume you have a Go program and want to improve its performance. There are several tools available that can help with this task. These tools can help you to identify various types of hotspots (CPU, IO, memory), hotspots are the places that you need to concentrate on in order to significantly improve performance. However, another outcome is p...阅读全文

博文 2016-09-02 17:00:02 secretx

Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用

目录 目录 什么是Thrift 1 Thrift内部框架一瞥 2 支持的数据传输格式数据传输方式和服务模型 3 Thrift IDL Thrift的官方网站在哪里 在哪里下载需要哪些组件的支持 如何安装 1 安装依赖插件 2 安装最新版PHP5 3 下载thirft091版本 4 编译安装 GolangJavaPythonPHP之间通过Thrift实现跨语言调用 1 Golang 客户端和服务端的实现及交互 2 python 客户端的实现与golang 服务端的交互 3 php 客户端的实现与golang 服务端的交互 4 java 客户端的实现与golang 服务端的交互 扩展阅读 什么是Thrift 0.1 Thrift内部框架一瞥 Thrift是一种可伸缩的跨语言服务的发展软件框架。它...阅读全文

博文 2016-09-08 06:00:57 狮子

NSQ源码剖析之nsqd

## NSQ简介 NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。 NSQ 由 3 个守护进程组成: nsqd 是接收、保存和传送消息到客户端的守护进程。 nsqlookupd 是管理的拓扑信息,维护着所有nsqd的状态,并提供了最终一致发现服务的守护进程。 nsqadmin 是一个 Web UI 来实时监控集群和执行各种管理任务。 ![NSQ结构图](http://7xj4dv.com1.z0.glb.clouddn.com/NSQ_Topology.png) 这篇文章介绍主要介绍nsqd的...阅读全文

博文 2017-02-09 20:01:39 shanks

go语言方法Value Receiver, Pointer Receiver各种不同情况的实验笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! for range 问题 http://stackoverflow.com/questions/30577212/go-for-range-slice-and-goroutine-method-invocation-the-logic-behind package main import ( "fmt" "time" ) type field struct { name string } func (p *field) print() { fmt.Printf("print: p: %p, v: %s\n", p, p.name) } func main() { data := []field{ {"one"},{"two"},...阅读全文

博文 2016-09-05 16:00:00 htyu_0203_39

Ubuntu 14.04 上使用 Docker 创建新的 Images

Ubuntu 14.04 上使用 Docker 创建新的 Images 环境准备 Ubuntu 14.04.1 LTS 发布后,我欢快地去官网下载并创建了一个虚拟机,但是在在执行下面命令的时候: sudo apt-get update 一直会遇到下面的错误 W: 无法下载 http://extras.ubuntu.com/ubuntu/dists/trusty/main/binary-amd64/Packages Hash 校验和不符 W: 无法下载 http://extras.ubuntu.com/ubuntu/dists/trusty/main/binary-i386/Packages Hash 校验和不符 Google 找解决方案,尝试了个遍,问题依旧。最让人不解的是 Ubuntu 官...阅读全文

博文 2017-02-10 13:44:03 Xiaohui Wang

Golang语言学习资源

一、知名的Golang开源框架1. Beego: 一个国产的HTTP框架,我们可以用它快速开发各种应用程序。官网地址: http://beego.me2. Gogs: 一个国产的自主Git托管服务程序,我们可以用它来搭建自己的Git服务器。官网地址:http://gogits.org3. Docker: 一个软件部署解决方案,也是一个轻量级的应用容器框架。使用Docker,我们可以轻松地打包、发布和运行任何应用。官网地址:http://www.docker.com非官网网站:http://www.docker.org.cn, https://docker.cn4. Skynet: 一个分布式服务框架,他可以帮助我们构建起大规模的分布式应用系统。源码地址:https://githup.com/...阅读全文

博文 2017-02-10 10:21:00 wangchunyi123

golang错误处理

golang错误处理方式一直是很多人诟病的地方,很多人都吐槽说一半的代码是 if err != nil { /* 错误处理 */ },严重影响正常的处理逻辑,我最开启也反感这种错误处理机制,每调用完一个函数都需要check一下,自定义函数也都要增加一个error类型的返回值,但是查了很多资料慢慢理解这种错误机制的好处。因为调用每一个函数都可能发生错误,及时在错误发生的地方做处理更容易构建复杂的大型系统。 ## 异常与错误 错误与异常是很容易混淆的地方,错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中;而异常指的是不应该出现问题的地方出现了问题,这种情况在人们的意料之外。golang使用 panic,defer,recover 来处理异常情况,类似jav...阅读全文

博文 2017-02-09 20:01:52 shanks

golang语言中map的初始化及使用

文链接:http://studygolang.com/articles/2379 // 先声明map var m1 map[string]string // 再使用make函数创建一个非nil的map,nil map不能赋值 m1 = make(map[string]string) // 最后给已声明的map赋值 m1["a"] = "aa" m1["b"] = "bb" // 直接创建 m2 := make(map[string]string) // 然后赋值 m2["a"] = "aa" m2["b"] = "bb" // 初始化 + 赋值一体化 m3 := map[string]string{ "a": "aa", "b": "bb", } // ===================...阅读全文

博文 2016-09-06 04:00:13 hellochenlu