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

[Go]通过HTTP获取信息返回JSON

用 HTTP.GET 从开放 API 中查询深圳通信息,然后将 JSON 数据存入结构体中,再格式化输出。注意:获取的并不是实时的深圳通信息Warm upstrconv.ParseUint: 解析无符号的数值字符串func ParseInt(s string, base int, bitSize int) (i uint64, err error)参数1 数字的字符串形式参数2 数字字符串的进制:二进制、八进制、十进制、十六进制参数3 返回结果的bit大小,也就是int8 int16 int32 int64encoding/json.Unmarshal: 解析 JSON 编码的数据json.Unmarshalgo-simplejson代码// 从开放的 Api 中查询深圳通相关信息。 // ...阅读全文

博文 2015-06-18 19:00:34 abv123456789

Go中优雅的HTTP服务关闭

虽然写出7x24小时不间断运行的服务是一件很酷的事情,但是我们仍然在某些时候,譬如服务升级,配置更新等,得考虑如何优雅的结束这个服务。 当然,最暴力的做法直接就是kill -9,但这样直接导致的后果就是可能干掉了很多运行到一半的任务,最终导致数据不一致,这个苦果只有遇到过的人才能深深地体会,数据的修复真的挺蛋疼,有时候还得给用户赔钱啦。 所以,通常我们都是给服务发送一个信号,SIGTERM也行,SIGINTERRUPT也成,反正要让服务知道该结束了。而服务收到结束信号之后,首先会拒绝掉所有外部新的请求,然后等待当前所有正在执行的请求完成之后,在结束。当然很有可能当前在执行一个很耗时间的任务,导致服务长时间不能结束,这时候就得决定是否强制结束了。 具体到go的HTTP Server里面,如何优...阅读全文

博文 2015-05-16 20:05:15 siddontang

Mac 安装 GO语言开发环境

官网:https://golang.org/ go语言的安装:http://docscn.studygolang.com/doc/install 下载:go1.4.darwin-amd64-osx10.8.pkg 默认安装,被安装了 /usr/local/go 目录 并自设置了环境变量。 go env 可查看目前的go的环境变量 这go就可以执行了, 下面还要配置一个GOPATH环境变量,是工作目录。 根据约定,GOPATH下需要建立3个目录: bin 存储编译后的可执行文件 pkg 存放编译后生成的包文件 src 存放项目的源码 我把GOPATH建立在/Users/zhaorai/Desktop/gowork vi ~/.bash_profile 加入:export GOPATH=/Use...阅读全文

博文 2014-12-22 01:00:05 elf8848

golang 垃圾回收 gc

http://ruizeng.net/golang-gc-internals/ 摘要 在实际使用go语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究。本文对研究的结果进行一下总结。 什么是垃圾回收? 曾几何时,内存管理是程序员开发应用的一大难题。传统的系统级编程语言(主要指C/C++)中,程序员必须对内存小心的进行管理操作,控制内存的申请及释放。稍有不慎,就可能产生内存泄露问题,这种问题不易发现并且难以定位,一直成为困扰开发者的噩梦。如何解决这个头疼的问题呢?过去一般采用两种办法: 内存泄露检测工具。这种工具的原理一般是静态代码扫描,通过扫描程序检测可能出现内存泄露的代码段。然而检测工具难免有疏漏和不足,只能起到辅助作用。 智能指针。这是c++中引...阅读全文

博文 2016-06-23 02:00:00 diegodu

docker搭建go开发环境

1、搭建私人仓库: 按照http://dockerpool.com/static/books/docker_practice/repository/local_repo.html执行; 2、创建镜像: 参照http://dockerpool.com/static/books/docker_practice/image/create.html 中的“利用Dockerfile”来创建镜像,以创建go开发环境为例如下: # This is a comment FROM centos:7 MAINTAINER shawn chen RUN yum install -y git RUN yum install -y emacs RUN yum install -...阅读全文

博文 2015-01-07 19:00:01 shawn chen

Go语言 Cookie的使用

首先看看Cookie的结构体 type Cookie struct { Name string Value string Path string // optional Domain string // optional Expires time.Time // optional RawExpires string // for reading cookies only // MaxAge=0 means no 'Max-Age' attribute specified. // MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0' // MaxAge>0 means Max-Age attribute present and ...阅读全文

博文 2016-02-01 17:00:01 project

Go 语言教程实战

安装在线教程 由于墙,golang.org 国内无法访问,其在线教程也一样 tutorial.golang.org http://go-tour-zh.appspot.com/ 可以在本机运行, 先安装Go 编译器 http://code.google.com/p/go/downloads/list 然后安装教程 go get code.google.com/p/go-tour/gotour 或者中文的 go get bitbucket.org/mikespook/go-tour-zh/gotour 最后执行安装产生的 gotour 执行文件,即可在http://localhost:3999 打开教程。 一些练习的答案 #46 练习:斐波纳契闭包 package main import "f...阅读全文

博文 2014-10-26 05:00:00 mebusw

2015 学习推荐书籍(golang ,web ,机器学习)

golang 以下都是来源于studygolang(一般人都知道): 《The Way to Go 中文 — 无闻译》 https://gobyexample.com/ 50 个 Go 开发者常犯的错误(英) 相对于《golang语言编程》比较适合新手入门。 《golang语言编程》 许式伟 比较全面讲解golang,有项目实例,有跟其他语言的对比,有深度也有广度,当然也就没那么细节了。 个人感觉,不适合第一门语言学习吧。唯有对比才有体会这门工程性语言。 估计,c++和python 都了解后 看更有感触! 《Go 学习笔记 第三版 — 雨痕》 总结性,看完语法在看这个不错,下半部分分析源码的,没投精力看,跳看,个人觉得了解/原理得话,看《深入理解go》加上其他blog就够了。。 ps : 他...阅读全文

博文 2015-06-23 13:07:17 u010129347

Intellij idea14安装google-go-lang-idea-plugin插件无法指定sdk的解决办法

idea14 和go1.4不兼容,一直报这样一个错Argument for @NotNull parameter 'virtualFile' of com/intellij/openapi/projectRoots/impl/ProjectRootContainerImpl.addRoot must not be null 解决办法: google-go-lang-idea-plugin 插件虽然好,但是官方的编译版总是更新很慢,所以需要自己编译,问了老外才知道怎么编译,编译方法如下: I opened this project in IDEA Community 13 (or whatever the latest EAP is), then choose the SDK as the p...阅读全文

博文 2015-02-03 19:00:03 qq_19969471

在Golang中,Log打印行号等信息

做个小笔记, 默认情况下,log模块的只打印日期和时间, 没具体行号,比较不爽,嘿嘿 package main /* #include */ import "C" import "log" func main() { log.SetFlags(log.Lshortfile | log.LstdFlags) log.Println( C.random()) } 打印结果: 2012/07/24 19:27:55 X.cgo1.go:14: 1804289383 其中, log.Lshortfile 还可以设置为log.Llongfile 即完整文件路径 获取当前行数,文件名,函数名(方法名): package main import ( "runtime" "fmt" )...阅读全文

博文 2014-11-07 17:31:35 Wendal Chen

golang:高性能消息队列moonmq的简单使用

在上一篇moonmq的介绍中(这里),我只简短的罗列了一些moonmq的设计想法,可是对于怎样使用并没有具体说明,公司同事无法非常好的使用。 对于moonmq的使用,事实上非常easy,例子代码在这里,我们仅仅须要处理好broker,consumer以及publisher的关系就能够了。 首先,我们须要启动一个broker,由于moonmq如今仅仅支持tcp的自己定义协议,所以broker启动的时候须要指定一个listen address。 #启动broker ./simple_broker -addr=127.0.0.1:11182 启动了broker之后,我们就能够向该broker发送消息 #向test这个queue发送 hello msg ./simple_publisher -add...阅读全文

博文 2014-10-04 19:26:13 zfyouxi

Golang测试技术

本篇文章内容来源于Golang核心开发组成员Andrew Gerrand在Google I/O 2014的一次主题分享“Testing Techniques”,即介绍使用Golang开发 时会使用到的测试技术(主要针对单元测试),包括基本技术、高级技术(并发测试、mock/fake、竞争条件测试、并发测试、内/外部测 试、vet工具等)等,感觉总结的很全面,这里整理记录下来,希望能给大家带来帮助。原Slide访问需要自己搭梯子。另外这里也要吐槽一 下:Golang官方站的slide都是以一种特有的golang artical的格式放出的(用这个工具http://go-talks.appspot.com/可以在线观看),没法像pdf那样下载,在国内使用和传播极其不便。 一、基础测试技术 1、测...阅读全文

博文 2014-11-16 21:00:08 大蓝妹

golang map的判断,删除

http://blog.sina.com.cn/s/blog_9e14446a01018q8p.html map是一种key-value的关系,一般都会使用make来初始化内存,有助于减少后续新增操作的内存分配次数。假如一开始定义了话,但没有用make来初始化,会报错的。 package main import ( "fmt" ) func main(){ var test = map[string]string{"姓名":"李四","性别":"男"} name,ok := test["姓名"] // 假如key存在,则name = 李四 ,ok = true,否则,ok = false if ok{ fmt.Println(name) } delete(test,"姓名")//删除为姓名为...阅读全文

博文 2015-06-18 17:04:34 newjueqi

http.ServeMux解析

## web server概述 使用go语言搭建一个web服务器是很简单的,几行代码就可以搭建一个稳定的高并发的web server。 ``` // hello world, the web server func HelloServer(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "hello, world!\n") } func main() { http.HandleFunc("/hello/", HelloServer) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) }...阅读全文

博文 2015-09-29 14:14:51 shanks

用Go语言开发桌面应用--By TSL

【后天就是本地的”三月三“壮族民歌节了,心情大好就把私藏的东西拿出来分享给大家】 我的基本开发环境是win7 32位,go1.4 windows/386,LiteIDE X 27。其实开发环境不重要 首先我们来安装Go 的GUI库 ,我们即将用到的是Tcl/Tk的Go绑定,作者的Git主页是https://github.com/nsf/gothic ‍a 把第三方库下载到本地: 我们进入作者主页的_examples目录里,把任意一个go例子的代码复制到LiteIDE里作为一个新的go文件,接着 可以点LiteIDE的”编译“菜单,再选择”Get“,这时LiteIDE会自动下载github.com/nsf/gothic ,如果提示Out of path请检查GOPATH环境变量并确认你的文件是...阅读全文

博文 2015-04-19 11:00:05 名字不能长

go 安装与使用

一 下载安装包 从http://code.google.com/p/go/downloads/list 网址下载 根据你的操作系统选择响应的版合适版本,我选择的是 go1.1.2.windows-386.zip 32.7 MB 注:你也可以选择.msi文件安装,这样的话会自动的安装到c:/go目录下(这里不建议下载msi版本) 二 解压 将下载后的文件解压,放到一个目录下,我把go放到了D:\go目录下 三设置环境变量 $GOROOT 指向golang安装之后的根目录,如果你选择.msi安装的话,windows平台下默认为c:/go,而且在安装过程中由安装程序自动写入系统环境变量。 $GOARCH 目标平台(编译后的目标平台)的处理器架构(386、amd64、arm) $GOOS 目标平台(...阅读全文

博文 2014-10-24 21:00:01 yiluoAK_47

go语言函数作为参数传递

go语言函数作为参数传递,目前给我的感觉几乎和C/C++一致。非常的灵活。 import "fmt" import "time" func goFunc1(f func()) { go f() } func goFunc2(f func(interface{}), i interface{}) { go f(i) } func goFunc(f interface{}, args... interface{}) { if len(args) > 1 { go f.(func(...interface{}))(args) } else if len(args) == 1 { go f.(func(interface{}))(args[0]) } else { go f.(func())() }...阅读全文

博文 2015-04-03 03:00:00 rojas

Effective Go

自:https://golang.org/doc/effective_go.html Effective Go IntroductionExamplesFormattingCommentaryNamesPackage namesGettersInterface namesMixedCapsSemicolonsControl structuresIfRedeclaration and reassignmentForSwitchType switchFunctionsMultiple return valuesNamed result parametersDeferDataAllocation with newConstructors and composite literalsAllocati...阅读全文

博文 2014-12-01 00:00:01 leonzhouwei

go语言 获取post方式json

正在学习go语言,看了一段时间的文档,想自己写个服务器,在获取接口数据的时候发现获取数据,格式为"form-data"的数据最简单, 传入post json数据:{"username":"","password":"123456"} req.PostFormreq.Header.Get("Content-Type") req.Host req.Form req.FormValue("username") req.FormValue("password") 获取"application/json"的时候,需要处理一下(以下只获取string): pack...阅读全文

博文 2015-12-22 04:00:03 aqiang912

linux 下 安装go

首先肯定是下载资源包了,链接汇总在http://www.golangtc.com/download,我用的是 http://www.golangtc.com/static/go/go1.4beta1.linux-amd64.tar.gz 这个版本的镜像地址。 按照说明cd 进入 /usr/local 目录,然后执行 wget -c http://www.golangtc.com/static/go/go1.4beta1.linux-amd64.tar.gz 通过命令行下载资源包,wget是一个下载工具,-c是支持断点续传的参数。 下载完成后,解压 tar -C /usr/local -xzf go1.4beta1.linux-amd64.tar.gz 然后再cd 进入 go/src 目录,执...阅读全文

博文 2015-04-19 03:00:01 ilahsa

Go net/http 超时指导

当在编写一个Go语言的HTTP服务端或者是客户端时,超时是最容易同时也是最敏感的错误,有很多选择,一个错误可以导致很长时间没有结果,知道网络出现故障,或者进程宕掉。 HTTP是一个复杂的多阶段的协议,所以超时没有一刀切的解决方案。想想一个流的端点与JSON API端点和comet端点。事实上,默认值往往不是你想要的。 在这篇文章中,我将采取不同的阶段,你可能需要申请一个超时,并在服务器和客户端不同的方式来实现。 设置最后期限(超时) 首先,你需要理解Go提供的最初级的网络超时实现:Deadlines(最后期限)。 在Go标准库net.Conn中实现了Deadlines,通过 set[Read|Write]Deadline(time.Time)方法进行设置。Deadlines是一个绝对时间,一...阅读全文

博文 2016-08-12 11:00:08 Lina_ACM

学习Golang的步骤建议

一、快速入门 通过快速入门可以宏观的了解Go相关知识。快速入门可以去学习 go-tour 国内可以访问的中文版的 go-tour 地址有下面一些: http://gotour.qizhanming.com/#1 也可以自行搭建 go-tour 的环境, 搭建方法参考: http://www.cnblogs.com/ghj1976/archive/2013/03/08/2949237.html https://github.com/meilihao/tour_book/blob/master/go/conf.md 完成这个快速入门,就可以自己写一些小工具玩玩了, 碰到问题再具体搜索就行。 比如爬虫 Go语言 爬虫1-网络请求 http://www.cnblogs.com/ghj1976/arc...阅读全文

博文 2015-05-30 03:00:16 ghj1976

go语言 类型:布尔类型

Go语言中的布尔类型与其他语言基本一致,关键字也为bool,可赋值为预定义的true和false示例代码如下: var v1 bool v1 = true v2 := (1 == 2) // v2也会被推导为bool类型 //from http://www.cnblogs.com/osfipin/ 布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换。以下的示例是一些错误的用法,会导致编译错误: var b bool b = 1 // 编译错误 b = bool(1) // 编译错误 以下的用法才是正确的: var b bool b = (1!=0) // 编译正确 fmt.Println("Result:", b) // 打印结果为Result: true 布尔可以做3种逻辑运算,&...阅读全文

博文 2015-10-09 11:00:11 osfipin

golang之http/FormValue踩坑记

今天下午在试 Weed-FS 的 Collection 特性的时候, 发现了一个关于 FormValue 返回结果不符合预期的 bug , 检查了一番, 才发现是因为没有正确使用导致的。 顺便为此提交了一个只包含一行代码 r.ParseForm() 的 PullRequest fix bug 。 真是【查bug千日,修bug一时】。。。 具体原因很简单,看下面这个示例代码就知道了: Bug 重现 package main import ( "net/http" ) func HelloServer1(w http.ResponseWriter, r *http.Request) { //r.ParseForm() val := r.FormValue("key") println("Hell...阅读全文

博文 2015-02-15 18:28:35 YanyiWu

GO语言已经可以写Android项目了,你知道吗?

新的库名叫go.mobile,包含了Go for Android的库的工具 在go.mobile库的readme中有介绍开发环境的搭建,不过仅限于早期版本,整合进IDE的构建系统还没有呢。 首先需要Android SDK,和NDK。然后需要添加一个环境变量:NDK_ROOT=$HOME/android/ndk-toolchain配置NDK工具ndk/build/tools/make-standalone-toolchain.sh -platform=android-9 --install-dir=$NDK_ROOT安装Go cross-compiler hg clone https://code.google.com/p/gocd go/srcCC_FOR_TARGET=$NDK_CC GO...阅读全文

博文 2014-10-15 10:00:00 q26335804

Golang的 signal

在实际项目中我们可能有下面的需求: 1、修改了配置文件后,希望在不重启进程的情况下重新加载配置文件; 2、当用 Ctrl + C 强制关闭应用后,做一些必要的处理; 这时候就需要通过信号传递来进行处理了。golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号;一个是 stop方法用来取消监听。 监听信号 notify方法原型 func Notify(c chan<- os.Signal, sig ...os.Signal) 第一个参数表示接收信号的管道 第二个及后面的参数表示设置要监听的信号,如果不设置表示监听所有的信号。 下面是一个非常简单地例子: package main import ( "fmt" "os" "os/signal"...阅读全文

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

golang-china

golang-china - Go 语言中文翻译项目 - Google Project Hosting翻译任务安排2010年12月:command 2011年01月:pkg部分 发布:Go语言文档初稿 认领任务、翻译进展、检验、疑问等,请邮件讨论 golang-china@googlegroups.com中文文档翻译进度 标题状态进度翻译者校验者Install Go(安装Go环境)初译done完成chaishushanGo Tutorial(Go语言入门教程)初译done完成Bian Jiang && chaishushanchaishushan (60%)Effective Go初译ing完成Bian Jiang && chaishushan && fangoMemory Model(内存...阅读全文

博文 2014-10-04 19:25:55 lexus

使用go,基于martini,和websocket开发简易聊天室

一、首先,需要了解一下websocket基本原理:here 二、go语言的websocket实现: 基于go语言的websocket也有不少,比如github.com/gorilla/websocket。这里选用的应该算是官方的实现code.google.com/p/go.net/websocket 使用go get安装下载即可。(不过,由于周知的原因:(,我是通过golangtc.com的第三方包下载功能才下载来的) 三、server端 第一个遇到的问题,websocket如何和martini集成? 安装websocket的文档,和http服务集成,应该使用如下方式 func ChatService (ws *websocket.Conn) { for{ io.Copy(ws,ws); }...阅读全文

博文 2015-01-16 18:00:02 dajianshi

golang websocket的例子

最近写了一个chrome的websocket extension, server端用的是Java的Netty框架, 后来发现golang 实现websocket 非常简单,高效, 下面是例子, 简单实现了用户登录,广播,相当于聊天室! package main import ( "code.google.com/p/go.net/websocket" "html/template" "log" "net/http" "os" "strings" "time" ) const ( listenAddr = "localhost:9527" // server address ) var ( pwd, _ = os.Getwd() RootTemp = template.Must(templat...阅读全文

博文 2015-06-17 20:03:47 u013834131

超详细Go语言Windows安装全攻略

1,下载go语言windows安装包,你可以直接到官网下载,也可以从本站云盘下载,由于国内被封杀,go语言官网 经常会打不开 win32版本:链接:http://pan.baidu.com/s/1eQlIT2M 密码:qosr win64版本:链接:http://pan.baidu.com/s/1qWmK7wg 密码:r5z7 2.双击安装,默认安装,直接点“下一步”就行,默认是安装在c:\go,你也可以修改成其它目录,目录最好不要包含 中文名 3.设置系统环境变量GOROOT,并把%GOROOT%\bin;加入到path环境变量中去 XP下操作如下 win7下操作如下 4.在命令行模式下输入 go,如果输出以下字符,go语言就基本安装成功了 5. 设置GOPATH环境变量,在c:\新建一目...阅读全文

博文 2015-04-17 03:00:01 onlycoder

Go语言发展状况和前景

在2015年10月16日,技术大牛许式伟做了有关Go语言发展状况的演讲。 “ 1 大纲 . Go语言语法及标准库变化 . Go语言未来发展的判断 . Go语言开源项目 1.1Go语言语法及标准库变化 1.1.1 Go1.1 • 语言变化 – 支持方法值(Method values) •p.Write 等价于: func(b []byte) (int, error) { return p.Write(b) } •区别于方法表达式(Method expressions): (*Foo).Write,结果类型为 func(p *Foo, b []byte) (int, error) – int,uint 类型长度调整 •自 Go1.1 后,int,uint 的尺寸统一是 64bits,即使是在 3...阅读全文

博文 2016-03-02 12:00:02 GreatElite

go 通过nginx代理后获取用户ip

go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) { fmt.Println(r.RemoteAddr) } 另外,在net包中也有 func (c *IPConn) RemoteAddr() Addr 以上是获取用户的ip,是与用户直连的ip,如果走代理,会是代理的ip 如果通过nginx代理,上边方法获得的是nginx的服务器的ip,所以这里要设置nginx代理 proxy_set_header Remote_addr $remote_addr; nginx会 转发ip到go的服务器,在通过go获取header中的romote_adder 获取用户的ip func ip(w ...阅读全文

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

Go 开发 HTTP 的另一个选择 fasthttp

fasthttp 是 Go 的一款不同于标准库 net/http 的 HTTP 实现。fasthttp 的性能可以达到标准库的 10 倍,说明他魔性的实现方式。主要的点在于四个方面: net/http 的实现是一个连接新建一个 goroutine;fasthttp 是利用一个 worker 复用 goroutine,减轻 runtime 调度 goroutine 的压力 net/http 解析的请求数据很多放在 map[string]string(http.Header) 或 map[string][]string(http.Request.Form),有不必要的 []byte 到 string 的转换,是可以规避的 net/http 解析 HTTP 请求每次生成新的 *http.Reque...阅读全文

博文 2017-02-10 16:30:57 傅小黑

实现一个代理服务

在天朝做程序员比较让人蛋疼,比如你想用GOOGLE,你就很蛋疼。原因大家都懂。 然后呢,一开始自己在用GOAGENT, VPN, SSH, ShadowSocks等程序,GOAGENT和SHADOWSOCKS都是非常优秀的。而自己在很早刚开始接触计算机的时候就有想法自己写一个代理程序,因为各种各样的原因总是没去做,或者说自己的需求总是能够被满足,所以没什么动力。但是自从学GO语言后,网络程序的开发变的没有之前做C/C++时那么蛋疼了,所以试着自己写一个代理程序,然后也贯彻Eating your own dog food的实践。这里把一些心得总结记录下。GITHUB地址:https://github.com/eahydra/socks SOCKS5协议 刚开始的时候,是想着做HTTP代理,但是...阅读全文

博文 2014-10-07 09:20:13 concurrency

用Go语言进行ajax回传

一、后端部分 要想使用ajax,先要准备一个func (http.ResponseWriter, *http.Request)类型的函数来处理前端发过来的请求。 func OnAjax(res http.ResponseWriter, req *http.Request) { io.WriteString(res, "这是从后台发送的数据") } 接下来,要把一个网址和它对应起来,例如主页下的“/ajax”: http.HandleFunc("/ajax", OnAjax) 二、HTML部分 网页上的内容很简单,只有一个按钮和一个文字输入框。 阅读全文

博文 2015-03-24 15:00:01 独立风华

Golang 绘图技术(image/draw包介绍)

image/draw 包仅仅定义了一个操作:通过可选的蒙版图(mask image),把一个原始图片绘制到目标图片上,这个操作是出奇的灵活,可以优雅和高效的执行很多常见的图像处理任务。 1: // Draw calls DrawMask with a nil mask. 2: func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op) 3: func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, 4: mask image.Image, mp image.Point, op Op) 第一个函数Dr...阅读全文

博文 2015-07-02 09:35:55 ghj1976

RESTful API 设计最佳实践

本文由 伯乐在线 - bruce-accumulate 翻译。未经许可,禁止转载!英文出处:Vinay Sahni。欢迎加入翻译小组。 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API 格式如何?你的API是否应该加入版本信息?当你开始写一个app的时候,特别是后端模型部分已经写完的时候,你不得不殚精竭虑的设计和实现自己app的public API部分。因为一旦发布,对外发布的API将会很难改变。 在给SupportedFu设计API的时候,我试图以实用的角度来解决上面提到的问题。我希望可以设计出容易使用,容易部署,并且足够灵活的API,本文因此而生。 AP...阅读全文

博文 2015-03-05 13:28:27 伯乐在线

go语言的初始化顺序,包,变量,init

依次见例子代码: p1.go package p1 import "fmt" //1.1 var x float32 = 1.2 //1.2 func init() { //1.3 fmt.Printf("p1 package, x:%f\n", x) //1.4 } func Donothing() { fmt.Println("do nothing.\n") } a.go: package main import "fmt" var WhatIsThe1 = AnswerToLife(2.1) //2.1 var WhatIsThe2 = AnswerToLife(2.2) //2.2 var WhatIsThe3 = AnswerToLife(2.3) //2.3 func init(...阅读全文

博文 2016-03-22 15:00:01 htyu_0203_39

实现一个go语言的简单爬虫来爬取CSDN博文(一)

前言 如何实现一个爬虫系统或则简单的小脚本?一般是定义一个入口页面,然后一个页面会有其他页面的URL,于是从当前页面获取到这些URL加入到爬虫的抓取队列中,然后进入到新页面后再递归的进行上述的操作,其实说来就跟深度遍历或广度遍历一样。 golang由于其编译速度很快,而且对并发(goroutine)的天然支持,配合chan的协程处理,可以很好地实现一个稳定高效的爬虫系统. 用到的包 完全不借助第三方的框架,通过go sdk的标准库来实现一个爬虫应用,主要用到的包 net/http 标准库里内建了对http协议的支持,实现了一个http client,可以直接通过其进行get,post等请求 strings 不像java的String是一个引用类型,go语言中的字符串类型是一个内建的基础类型,...阅读全文

博文 2015-12-24 10:00:00 tyBaoErGe

如何编写一个分布式数据库

大家好, 我是开源项目 分布式 NewSQL 数据库 TiDB 和 分布式缓存 Codis 的 创始人 刘奇, 之前在京东, 豌豆荚做 infrastructure 相关的事情, 现在在创业 (PingCAP), 方向是分布式数据库. 最近如果有朋友关注开源社区或者HackerNews 的话,可能会发现一个叫 TiDB 的数据库项目吸引了一些眼球(https://github.com/pingcap/tidb ) 。 这是我们开源的第一个东西,短短几天得到了过千Star,特别感谢大家的支持和鼓励。 今天主要介绍一下 NewSQL 与 TiDB 的设计实现, 未来的一些 Roadmap 以及 一些做开源项目的心得。 大家可能经常用数据库,但是很少写一个数据库(实在是有点 hardcore),今...阅读全文

博文 2015-09-24 10:26:00 刘奇

Golang的演化历程

Golang的演化历程 十 25 bigwhite技术志 ANSI-C, BCPL, C, Channel, Concurrency, CSP, Go, Golang,Google, Package, RobPike, UTF8, 包, 并发编程, 标准C, 标准库, 素数筛 暂无评论 本文来自Google的Golang语言设计者之一Rob Pike大神在GopherCon2014大会上的开幕主题演讲资料“Hello, Gophers!”。Rob大神在这次分 享中用了两个生动的例子讲述了Golang的演化历程,总结了Golang到目前为止的成功因素,值得广大Golang Programmer & Beginner学习和了解。这里也用了"Golang的演化历程"作为标题。 1、Hello Go...阅读全文

博文 2014-12-05 02:00:02 anlun

Go语言net/http 解读.

Http包提供实现HTTP客户端和服务端的方法与函数。 Get、Head、Post、PostForm配合使用实现HTTP请求: resp, err := http.Get("http://example.com/") resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf) resp, err := http.PostForm("http://example.com/form",url.Values{"key": {"Value"}, "id": {"123"}}) 使用结束后,应该关闭客户端的响应体: resp, err := http.Get("http://example.com/") if err ...阅读全文

博文 2015-09-24 13:00:00 fyxichen

我眼中的编程语言Rust和GO

我已经花了不少时间在把玩一些新语言 – 特别要指出,Rust抓住了我的想象力。我们在Chef中使用大量的Ruby、Erlang和JavaScript(后来是Angular)代码。以下是我喜欢这些语言的东西: Ruby的感觉就像永远在敲打我头脑中“whipuptitude”部分。它很容易,可以简单的坐下来开始编码,你基本不会碰到困难。它也有类似Perl中我很喜欢的表达力。你越熟练这个语言,你就会越觉得你好像可以用英语(母语)表达自己的想法。Erlang和OTP极好操作。那些模式匹配、Actor并发、单一赋值,还有令人愉快的运行时导致运行、管理、调试产品服务是一种乐趣,我认为它语法是丑陋的,但是当你掌握它后,你会发现它的某种简洁美。现代JavaScript以它自己的方式变得越来越讨人喜欢。比如你...阅读全文

博文 2015-09-02 00:00:01 haiguo_gu

gorilla/mux类库解析

golang自带的http.SeverMux路由实现简单,本质是一个map[string]Handler,是请求路径与该路径对应的处理函数的映射关系。实现简单功能也比较单一: 1. 不支持正则路由, 这个是比较致命的 2. 只支持路径匹配,不支持按照Method,header,host等信息匹配,所以也就没法实现RESTful架构 而gorilla/mux是一个强大的路由,小巧但是稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信息匹配,可以从我们设定的路由表达式中提取出参数方便上层应用,而且完全兼容http.ServerMux ##使用事例 ``` r := mux.NewRouter() //与http.ServerMux不同的是mux.Router是完全的...阅读全文

博文 2016-06-11 16:41:09 shanks

Go源码分析——http.ListenAndServe()是如何工作的

Go对web服务器的编写提供了非常好的支持,标准库中提供了net/http包来方便编写服务器。许多教程和书籍在讲到用Go编写web服务器时都会直接教新手用http包写一个最简单的hello world服务器,例子差不多都会像这样: // 这就是用Go实现的一个最简短的hello world服务器. package main import "net/http" func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`hello world`)) }) http.ListenAndServe(":3000", nil) // <-今天讲的就是这个Listen...阅读全文

博文 2014-10-10 22:00:00 u011774512

GoLang 强制类型转换:unsafe.Pointer

注意此种转换只适合简单类型,对于有对象描述的类型是完全不适用的,鸡肋啊 ps:补充另外一种用法,这次就不鸡肋了 Go语言是个强类型语言。也就是说Go对类型要求严格,不同类型不能进行赋值操作。指针也是具有明确类型的对象,进行严格类型检查。下面的代码会产生编译错误 01 package main 02 03 import ( 04 "fmt" 05 ) 06 07 func main() { 08 u := uint32(32) 09 i := int32(1) 10 fmt.Println(&u, &i) // 打印出地址 11 p := &i // p 的类型是 *int32 12 p = &u // &u的类型是 *uint32,于 p 的类型不同,不能赋值 13 p = (*int32)...阅读全文

博文 2015-10-19 13:00:01 Creak_Phone

Go语言http.Get()超时设置

本文中的方案是有缺陷的,本文目前只当成历史记录,完整方案请参考(这篇)[http://1234n.com/?post/mwsw2r] Go自带的http包中提供了很完整的HTTP客户端和服务端功能。最近项目有几个需求需要从游戏服务端发起HTTP请求来调用运营商提供的接口。用Go语言实现起来超简单,http.Get()调一下就行了。 但是,http.Get()是没提供参数让调用者设置连接和读写的超时,项目在线上就遇到了永久阻塞在http.Get()不返回的情况。 上网找了一下资料,最后解决了这个问题,以下是试验代码,先贴代码再分析原理(gist连接): // // How to set timeout for http.Get() in golang // package main impor...阅读全文

博文 2015-02-06 11:18:37 达达

用go语言遍历文件夹

用python遍历文件夹很方便,在go的世界里,我也需要这样的功能。找了找文档,里面有这个功能(具体参考这里:http://golang.org/pkg/path/filepath/ )…… 好,不废话了,我也想早点睡,直接上代码。 代码如下: /* File : getFilelist.go Author : Mike E-Mail : Mike_Zhang@live.com */ package main import ( "path/filepath" "os" "fmt" "flag" ) func getFilelist(path string) { err := filepath.Walk(path, func(path string, f os.FileInfo, err er...阅读全文

博文 2014-10-04 19:26:20 MikeZhang