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

Golang基于TCP/IP的简单聊天程序

Server.go package main import ( "fmt" "io" "net" "os" "strings" ) func main() { addr, err := net.ResolveTCPAddr("tcp", ":4040") checkErr(err) listen, err := net.ListenTCP("tcp", addr) checkErr(err) fmt.Println("Start server...") for { conn, err := listen.Accept() checkErr(err) go Handle(conn)// 每次建立一个连接就放到单独的线程内做处理 } } const BufLength = 128 var use...阅读全文

博文 2014-12-30 22:00:01 lucifd

golang把io.ReadCloser类型转化为[]byte

//比如要解析resp.Body(io.ReadCloser),我们可以这样处理 body, err := ioutil.ReadAll(resp.Body) 接着,我们继续分析分析函数 func ReadAll(r io.Reader) ([]byte, error) { return readAll(r, bytes.MinRead) //const MinRead = 512 } // func readAll(r io.Reader, capacity int64) (b []byte, err error) { buf := bytes.NewBuffer(make([]byte, 0, capacity)) //func NewBuffer(buf []byte) *Buffer...阅读全文

博文 2015-09-08 09:00:02 webyh

Go 语言使用 TCP keepalive

自:http://studygolang.com/articles/951 Go 语言使用 TCP keepalive 如果你写过某些 TCP socket 代码,你可能会疑问:如果网线被拨掉或者远程主机崩溃了我的TCP连接会怎样? 简短的答案是:一点影响都没有。这种情况下连接的结束远程主机是不会发送FIN数据包的,并且本地系统不能检测连接是否已中断。所以需要作为程序员的你来解决这种情况。 --zxp 翻译于 1 个月 前 0人顶 顶 翻译的不错哦! GO语言为你提供了解决这个问题的几种方法。首选的方法可能是 net.Conn 接口中的SetReadDeadline方法。假设你的连接在以一种特定的间隔来接收数据,你可以简单地把读取超时当作一个io.EOF错误并Close这个连接。很多现有的T...阅读全文

博文 2015-01-29 17:00:01 leonzhouwei

golang频率限制 golang.org/x/time/rate 使用说明

官方链接 接口介绍 type Limiter type Limiter struct { // contains filtered or unexported fields } Limter限制时间的发生频率,采用令牌池的算法实现。这个池子一开始容量为b,装满b个令牌,然后每秒往里面填充r个令牌。由于令牌池中最多有b个令牌,所以一次最多只能允许b个事件发生,一个事件花费掉一个令牌。 Limter提供三中主要的函数 Allow, Reserve, and Wait. 大部分时候使用Wait。 func NewLimiter func NewLimiter(r Limit, b int) *Limiter NewLimiter 返回一个新的Limiter。 func (*Limiter) [Al...阅读全文

博文 2017-06-28 09:07:37 kingeasternsun

GO语言HTTP代理服务器

package main import ( "fmt" "io" "log" "net/http" "net/http/httputil" "net/url" ) func httpUserInfo(w http.ResponseWriter, r *http.Request) { ret := "your addr is:" + r.RemoteAddr + "\r\n" ret += "request headers:" + fmt.Sprint(r.Header) io.WriteString(w, ret) } func main() { targetURL, err := url.Parse("http://127.0.0.1:80") log.Println("program s...阅读全文

博文 2015-06-17 23:07:39 scybs

golang之旅--gopm

什么是gopm 在nodejs中我们有npm,可以通过npm来下载安装一些依赖包。在go中也开发了类似的东西,那就是gopm。这玩意儿是七牛开发的。在这里说下,七牛公司大部分程序都是用go语言编写的,所以开发出这么一个方便的东西肯定也是合情合理的。 gopm地址 git地址:https://github.com/gpmgo/gopm 官方地址:https://gopm.io/ gopm文档路径:https://github.com/gpmgo/docs/tree/master/zh-CN gopm安装 go get -u github.com/gpmgo/gopm 通过这个命令来安装插件,默认的会存放到GOBIN,如果没有配置%GOBIN%环境变量,那么会默认安装到%GOPATH%下的bin...阅读全文

博文 2017-09-02 11:03:22 花_现

golang实现AT命令的发送(Windows版)

问题的提出 由于golang的微线程(goroutines)的特征,实现同时交互进行的任务变得自然而容易。一直想实现一个能对手机进行自动发送AT的程序,而实现相应的自动化测试。现在用golang来偿试一下。 问题所依赖的库 使用golang来实现的对串口的操作的库从网上找到了一个,就不用重新发明轮子啦。https://github.com/huin/goserial 在Windows下使用的文件如下: serial.go /* Goserial is a simple go package to allow you to read and write from the serial port as a stream of bytes. It aims to have the same API...阅读全文

博文 2014-10-04 19:26:11 huangliujing

Golang资料集

##Golang资料集 * [《Platform-native GUI library for Go》](https://github.com/andlabs/ui) 介绍:跨平台的golang GUI库,支持Windows(xp以上),Unix,Mac OS X(Mac OS X 10.7以上) * [《Gopm 快速入门》](http://blog.go-china.org/25-gopm-intro) 介绍:Gopm(Go 包管理工具) 是一个用于搜索、安装、更新和分享 Go 包的管理工具。 * [《go build 命令是如何工作的?》](http://blog.go-china.org/19-how-go-build-works) 介绍:本文以 ...阅读全文

资源 2015-05-09 05:02:15 polaris

CLI:使用Go开发命令行应用

文地址 CLI或者“command line interface”是用户在命令行下交互的程序。由于通过将程序编译到一个静态文件中来减少依赖,一次Go特别适合开发CLI程序。如果你编写过安装时需要各种依赖的CLI程序你就知道这个是有多重要了。   在这篇博客中我们将介绍使用Go开发CLI的基本知识。 Arguments    大多数CLI程序都需要输入一些参数。Go 语言将这些参数以字符串slice处理。 var Args []string 查找当前应用的名字。 package main import ( "fmt" "os" ) func main() { // Program Name is always the first (implicit) argument cmd := os.Ar...阅读全文

博文 2016-08-29 12:00:01 hitandrew

使用go的net/http实现读取web页面

package main import ( "fmt" "io/ioutil" //[1] "net/http" //[2] "os" //[3] "path/filepath" // [4] ) func main() { if len(os.Args) != 2 { fmt.Printf("useage:%s http://url", filepath.Base(os.Args[0])) os.Exit(1) } resp, err := http.Get(os.Args[1]) if err != nil { fmt.Println(err) //go语言会内含详细的错误描述,可以尝试不同的参数来测试 os.Exit(2) } defer resp.Body.Close() //The...阅读全文

博文 2014-10-10 07:00:01 学思

golang阿里云的goproxy的使用

这个地址(https://goproxy.io/)的powershell的环境变量配置应该这样:$env:GO111MODULE="on"$env:GOPROXY="https://mirrors.aliyun.com/goproxy/"给等号右边的值加上双引号 阿里云的goproxy: http://mirrors.aliyun.com/goproxy/ 在环境变量里设置,不用每次都敲命令新开一个powershell窗口,可以看到这2个环境变量已经持久化...阅读全文

博文 2019-07-17 20:03:50 EDELWEISS_21g

Go和Rust计算性能大比武

作为Go语言的狂热粉丝最近听说了同样鼎鼎大名的现代化语言-Rust,看了介绍后,发现Rust绝对是一门非常有潜力的系统级语言,因此特抽出业务时间进行了学习。 在网上有不少关于Go和Rust的对比文章,但是从我个人的观点来看,这两个语言没有什么好对比的,因为它们的使用场景基本没有重叠之处。Go适合网络编程、软实时系统; Rust适合内存使用苛刻、无GC、超高性能的场景,因此这两门语言如果结合起来,完全是一对非常美好的CP,大家觉得呢? 当然,光说不干空把式,在学Rust途中,笔者肯定会对Go和Rust进行大量的对比和性能测试,这里先来一个多线程下简单计算的对比。 一、启动8个线程(mac笔记本是4核8u),每个线程执行500万次计算任务,然后统计耗时。 首先看Go的代码:package mai...阅读全文

博文 2016-10-07 17:00:00 abv123456789

谈谈并发编程中的协程

高并发编程里多线程(进程)的弊端 其实从著名的 C10K 问题的时候, 就谈到了高并发编程时, 采用多线程(或进程)是一种不可取的解决方案, 核心原因是因为线程(或进程)本质上都是操作系统的资源, 每个线程需要额外占用1M或者2M的内存空间, 所以2G内存,能承受的线程数差不多只能到1k这个量级。 而且线程的调度由操作系统调度, 当线程或者进程数到达一定量级的时候, 据有人试验的结果是并发的线程数到达1k以上后, 操作系统基本上就已经不堪重负,调度不过来了。 事件驱动 已知多线程已经无法解决高并发问题, 所以才有了异步IO,事件驱动等概念来解决高并发编程。 很典型的就是 Node.js ,传说中的事件驱动, 其实就是在底层使用了 libuv 然后通过各种回调函数来注册事件, 当事件触发的时候...阅读全文

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

iris-go

rt 与其它框架比较 文档说明 基础 index.html test

{{ message }}

main.go package main import ( "gopkg.in/kataras/iris.v6" "gopkg.in/kataras/iris.v6/adaptors/httprouter" "gopkg.in/kataras/iris.v6/adaptors/view" "time" "fmt" "io" ) type User struct {...阅读全文

博文 2017-06-04 14:03:33 中柠檬

golang 包依赖管理 godep 使用

[TOC] 介绍 godep是解决包依赖的管理工具,目前最主流的一种,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理 godep 建议在 golang 1.6 以后使用 godep 依赖 vendor 具体查看 https://stackoverflow.com/questions/37237036/how-should-i-use-vendor-in-go-1-6 请做好 vendor 管理 安装 https://github.com/tools/godep  go get -u -v github.com/tools/godep 成功安装后,在$GOPATH的bin目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这个,建议这个目录加入到全局环境变量中 包...阅读全文

博文 2017-05-26 12:04:43 泛原罪

gogoprotobuf使用(下)

声明:版权所有,谢绝转载。 承接上文《gogoprotobuf使用(上)》,继续说明gogoprotobuf的各个option。 8 gogoproto.testgen & gogoproto.testgen_all testgen选项为true,则gogo会为相应的message生成一个测试用例与性能测试用例。testgen_all则为相应的package level的option。 pb code: option (gogoproto.testgen_all) = true; option (gogoproto.benchgen_all) = true; message A { string msg = 1; } go code: package test import testing ...阅读全文

博文 2015-03-14 22:00:01 alexstocks

Golang网络库中socket阻塞调度源码剖析

本文分析了Golang的socket文件描述符和goroutine阻塞调度的原理。代码中大部分是Go代码,小部分是汇编代码。完整理解本文需要Go语言知识,并且用Golang写过网络程序。更重要的是,需要提前理解goroutine的调度原理。 1. TCP的连接对象: 连接对象: 在net.go中有一个名为Conn的接口,提供了对于连接的读写和其他操作: type Conn interface { Read(b []byte) (n int, err error) Write(b []byte) (n int, err error) Close() error LocalAddr() Addr RemoteAddr() Addr SetReadDeadline(t time.Time) err...阅读全文

博文 2015-10-15 09:48:14 华子

Go实战--使用golang开发Windows Gui桌面程序(lxn/walk)

生命不止,继续 go go go!!! golang官方并没有提供Windows gui库,但是今天还是要跟大家分享一下使用golang开发Windows桌面程序,当然又是面向github编程了。 知乎上有一个问答: golang为什么没有官方的gui包? 这里,主要使用第三方库lxn/walk,进行Windows GUI编程。 lxn/walk github地址: https://github.com/lxn/walk star: 2018 描述: A Windows GUI toolkit for the Go Programming Language 获取: go get github.com/lxn/walk 例子: main.go package main import ( "gi...阅读全文

博文 2017-09-19 11:31:02 wangshubo1989

JSON与Go

介绍 JSON(JavaScript Object Notation)是一种简单的数据交换格式。从语法上来说,它综合了JavaScript的对象(objects)和列表(lists)。通常用于在web后端和运行在浏览器中的JavaScript程序之间通信,不过也可以用在很多其他的地方。官方主页,json.org,提供了对标准的详尽说明。 使用json 包可以轻松地在Go程序中读写JSON数据 编码 通过函数Marshal编码JSON数据。 func Marshal(v interface{}) ([]byte, error) 给定Go的数据结构, Message, type Message struct { Name string Body string Time int64 } 以及Mes...阅读全文

博文 2014-11-21 22:00:00 zhjih123

golang中的select用法

早期的select函数是用来监控一系列的文件句柄,一旦其中一个文件句柄发生IO操作,该select调用就会被返回。golang在语言级别直接支持select,用于处理异步IO问题。 select用法同switch类似,如下: timeout := make (chan bool, 1)ch := make(chan int) select { case <-ch: case <-timeout: fmt.Println("timeout!") default: fmt.Println("default case is running") } 可以看出,ch初始化后,case1读取失败,timeout同样失败,因为channel中无数据,直接跳至default执行并返回。 注意,如果没有def...阅读全文

博文 2016-06-01 00:00:00 caiya928

Golang 通过tcp / ip发送数据

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 如何通过简单的tcp / ip连接将数据从进程a发送到进程b? 在许多情况下,使用更高级别的网络协议无疑会做得更好,从而将所有技术细节隐藏在一个奇特的API下面。并且已经有很多可供选择的,取决于需要:消息队列协议,grpc,protobuf,flatbuffers,restful web api,websockets等等。 但是,在某些情况下(特别是在小型项目中),您选择...阅读全文

博文 2018-01-25 17:33:04 90design

golang orm 框架之 gorm

最近在想给这个小站增加点赞和评论功能,第三方系统又有各种限制,就想自己弄个后端,实现类似的功能,对于个人来说,数据量不是很大,单机的 mysql 足够存下所有数据,mysql 作为底层存储是个不错的选择 之前在公司是直接用的 github.com/go-sql-driver/mysql 访问数据库都是直接用写 sql,取出结果然后自己拼成对象,使用上面不是很方便,可读性也不好。想起之前研究 php laravel 框架的时候,直接把数据库层屏蔽了,用户看到的只有对象,使用非常方便,java 里面这种操作方式基本上已经成了标准做法,就去 github 上找了一下 golang 里面有没有类似的东西,果然已经有非常成熟的框架了,github.com/jinzhu/gorm 已经有 7k+ 的 s...阅读全文

博文 2018-02-08 16:34:39 hatlonely

go package学习——os/exec

package exec用于运行外部命令,它封装了os.StartProcess,从而使操作更容易。 Index Variables func LookPath(file string) (string, error) type Cmd func Command(name string, arg ...string) *Cmd func (c *Cmd) CombinedOutput() ([]byte, error) func (c *Cmd) Output() ([]byte, error) func (c *Cmd) Run() error func (c *Cmd) Start() error func (c *Cmd) StderrPipe() (io.ReadCloser, er...阅读全文

博文 2014-10-04 19:26:13 壬癸甲乙

golang zlib 压缩,解压缩

package main import ( "bytes" "compress/zlib" "fmt" "io" "os" ) //进行zlib压缩 func DoZlibCompress(src []byte) []byte { var in bytes.Buffer w := zlib.NewWriter(&in) w.Write(src) w.Close() return in.Bytes() } //进行zlib解压缩 func DoZlibUnCompress(compressSrc []byte) []byte { b := bytes.NewReader(compressSrc) var out bytes.Buffer r, _ := zlib.NewReader(b) io...阅读全文

博文 2015-03-10 03:00:00 zhangqingping

给自己一条退路,再次比较Erlang和Golang

给自己一条退路,再次比较Erlang和Golang_陈叶皓_新浪博客 雨天的周末,适合码字的时节。。。 一年前我开始学习go语言的时候,如获至宝,既有python的编码效率,又带来性能的15倍提升。尤其是在异步编程方面,可以使用channel同步线程,不必加锁可以充分利用cpu多核计算,真是没有弱点。 后来慢慢了解到,这种无锁异步编程的思想,源自一门叫做erlang的语言,Erlang更加了不起。除了异步编程之外,这门语言天生支持分布式,单机上开发的软件,可以不加修改地运行在集群上,另外还支持软件版本的热升级,自带的OTP框架支持进程间的监督和重启,提供了坚如磐石的运行环境。Erlang是如此完美,我认为是最适合开发互联网应用的语言,一时间有种“终于找到真理”的喜悦。 不过那个时候,心里总觉...阅读全文

博文 2015-01-22 13:00:01 seven1979

golang系统性能监控初探

系统服务(这里不局限于golang写的后台服务,也包括c++,java等后台语言)需要考虑的两个问题 1. 系统的资源使用情况(cpu利用率,内存分配情况等,runtime和syscall都提供了支持,这个是系统内部性质,往往是设计系统资源问题,需要在设计的时候慎重考虑) 2. 系统的服务情况(就是服务时延,这个是client可以直接感知的,往往是client最关注的,决定了服务的qps) 提前评估系统的资源消耗是很重要的,在公司里面,能提供选择的机器类型是很多种的。比如腾讯,往往动则上亿qq号的量,很多时候需要在内存中cache用户的实时信息,如果内存评估不对,后面如果要进行机器迁移,则比较麻烦。另外,cpu的数目太少,则并发性弱,影响服务的性能,特别是在一台机器上部署了多个服务后,抢cp...阅读全文

博文 2014-10-04 19:26:14 weijiaen

golang tar gzip 压缩,解压(含目录文件)

tar是用于文件归档,gzip用于压缩。仅仅用tar的话,达不到压缩的目的。我们常见的tar.gz就是用gzip压缩生成的tar归档文件。 go实现tar压缩与解压与zip类似,区别在于tar需要使用gzip进行处理。tar与zip的Header不同。代码如下 package tartest import ( "archive/tar" "compress/gzip" "io" "os" "strings" ) //压缩 使用gzip压缩成tar.gz func Compress(files []*os.File, dest string) error { d, _ := os.Create(dest) defer d.Close() gw := gzip.NewWriter(d) defe...阅读全文

博文 2016-07-08 08:00:00 xiaofengshuyu

golang与java间的json-rpc跨语言调用

关于如何使用golang调用rpc和json-rpc,网上虽然有很多的帖子,但都仅仅是golang程序间通信,没有牵涉到跨语言调用的问题。在使用golang开发服务端程序的时候,不可避免的要与其他语言的程序进行交互,特别是json-rpc这的协议,本身就应该是用在不同的平台间的调用上的(因为golang程序间的交流已经有了封闭的用gob编码解码的rpc包了,我们自然而言的会想到用json-rpc来提供对其他语言的支持)。本文就来详细探究一下如何实现golang与java之间的json-rpc调用。 首先,实现一个基于socket的java调用golang的样例(这个方法不需要第三方golang库,但是仅能通过tcp协议通信。如果要通过http协议通信的话,必须自己写一个或者用第三方的库,后面...阅读全文

博文 2015-08-25 03:00:00 geomantic

go语言遍历目录中的文件

package main import ( "fmt" "io/ioutil" "os" // "path/filepath" // "strings" ) var ( files []string ) //获取指定目录下的所有文件和目录 func ListDir(dirPth string) ( err error) { //fmt.Println(dirPth) dir, err := ioutil.ReadDir(dirPth) if err != nil { return err } PthSep := string(os.PathSeparator) // suffix = strings.ToUpper(suffix) //忽略后缀匹配的大小写 for _, fi := rang...阅读全文

博文 2015-12-22 10:00:04 woquNOKIA

回复:《golang VS php 性能对比》

连接:http://www.oschina.net/question/29420_138135 看到有一篇博文介绍Golang与PHP性能对比,在此回复一下。这测试结果明显是误导人的。 1,PHP未开启OpCache,那么每次都要读磁盘文件。并且编译PHP为OpCode。性能自然会差,开启OpCache试试吧。 2、php+redis一定要扩展版本的redis客户端,原因是redis扩展是长连接的,可以避免短连接带来的网络开销。 3、php-fpm或者Apache,就算只开20个进程。redis这种纯内存操作绝对可以2ms内返回结果(2ms已经算是很差的情况了,一般0.5ms就能得到响应)。那么每个进程至少可以提供500QPS的处理能力(2ms1次,PHP进程是串行执行的,1秒可以500次)...阅读全文

博文 2014-10-23 08:00:01 matyhtf

对golang服务器开发模式的一些思考

多线程+同步阻塞模型 在我们的游戏项目中使用的golang服务器开发方式如下 1.多线程逻辑 2.同步阻塞. 也就是说, 每个人一个线程(goroutine), io线程=逻辑线程 这种方式的优点: 1. 同步阻塞方式与人的思维方式类同 2. 逻辑处理性能有一定提升 在大规模使用这种模式编写逻辑后, 我们发现了这种模式只有1个缺点: 编写者需要处理多线程关系 但这本身确实直接致命的, 回想C++时代, 多线程处理时, 调试重现的困难… 脑补景象太惨不敢直视 单线程+异步多进程模型 在C++时代, 我曾经编写过一套asio的C++服务器框架. 采用io多线程, 逻辑单线程, 依赖着C++高性能的优势, 让开发便捷简单且无需关心线程问题. 那么到了golang时代, 为什么不能试下单线程异步多进...阅读全文

博文 2015-10-18 03:00:06 zangao

[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 长短连接处理

前言 关于time_wait网上的介绍有很多,咱不啰嗦了,之前公司环境有台机器里有大量的time_wait,研究了下golang和http的基础,小结下。 http协议1.1后默认是长连接,如果一个client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。 Get / HTTP/1.1 Host: example.com User-Agent: Go 1.1 package http **Connection: close** Accept-Encoding: gzip HTTP/1.1 501 Not Implemen...阅读全文

博文 2016-03-07 22:00:04 chenwenhao0304

golang GET 出现 x509: certificate signed by unknown authority

我们编写一个Go程序来尝试与这个HTTPS server建立连接并通信。 //gohttps/4-https/client1.gopackage main import ( "fmt" "io/ioutil" "net/http") func main() { resp, err := http.Get("https://localhost:8081") if err != nil { fmt.Println("error:", err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) fmt.Println(string(body))} 运行这个client,我们得到如下错误: $go run ...阅读全文

博文 2017-09-26 18:30:00 kccdzz

golang tcp socket

golang tcp socket编程和http差不多的感觉,也是请求应答的方式,TCP请求需要(ip地址,协议,端口)这三项,跟http请求差不多,我们现在来模拟一个请求和应答来,请求的一方我们就叫做client.go package main import ( "fmt" "io/ioutil" "net" "os" ) func main() { tcpAddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:7777") //获取一个TCP地址信息,TCPAddr checkError(err) conn, err := net.DialTCP("tcp", nil, tcpAddr) //创建一个TCP连接:TCPConn checkEr...阅读全文

博文 2014-11-03 15:00:02 别人说我名字很长

PHP7+Swoole比Nginx/Golang性能高75%

性能对比 使用apache bench工具对Nginx静态页、Golang Http程序、PHP7+Swoole Http程序进行压力测试。在并发100进行100万次Http请求的基准测试中,PHP7+Swoole比Nginx/Golang性能高75%,QPS对比如下: 软件QPS Nginx 164489.92 Golang 166838.68 PHP7+Swoole 287104.12 Nginx-1.9.9 245058.70 注:Nginx升级到最新的1.9.9,关闭access_log,启用open_file_cache缓存静态文件到内存,最新测试达到了245058.70qps 测试环境 硬件配置 CPU:Intel® Core™ i5-4590 CPU @ 3.30GHz × 4...阅读全文

博文 2015-12-15 21:00:01 chunguang

关于 许式伟谈Go Erlang并发编程差异

写在开头: 这篇文章是ECUG2014年七牛CEO许式伟的演讲稿。这篇文章很详细的分析了Go和 Erlang在实现并发编程的差异,但是有些内容可能因为作者本人个人情感的一些原因有些出入导致了知乎上的一些讨论,http://www.zhihu.com/question/27465406,这种讨论甚至激烈的争辩是无法避免的,因为捍卫者需要站出来维护他们正在使用的兵器。关于这种争辩,在其他编程领域也有许多包括C++和java的争论,C和C++的争论等。为了从多个角度对知识有一个了解,后面我附上了张虎的在知乎上的回答,因为他们正在使用erlang。 但是作为一个很系统的技术层面上的一个分析比较已经很详细了。 By lingtao. ----------------------------------...阅读全文

博文 2015-05-01 12:00:01 u011321908

编译nsq-0.3.8,出现apps/nsq_pubsub/nsq_pubsub.go:20:2: use of internal package not allowed

go 版本为1.9.3 按nsq编译安装页面,http://nsq.io/deployment/installing.html#compiling 编译安装nsq-0.3.8 compiling模块中,已用gpm安装依赖 make时出现 apps/nsq_stat/nsq_stat.go:18:2: use of internal package not allowed apps/nsq_stat/nsq_stat.go:19:2: use of internal package not allowed 等问题 网页搜索无法解决,求助 ...阅读全文

主题 2017-10-23 03:45:21 ayac

(摘抄)GO语言中template的用法

GoLang Tutorials Tuesday, June 14, 2011 Go Templates Other topics in this series - Table of Contents See also: Go Templates - Part 2 See also: Go Templates - Part 3 - Template Sets When a web service responds with data or html pages, there is usually a lot of content that is standard. Within that there needs to be modifications done based on the us...阅读全文

博文 2014-11-12 14:00:02 Joogiyahala

使用client-go实现k8s操作

package main import ( "flag" "fmt" "k8s.io/client-go/1.4/kubernetes" "k8s.io/client-go/1.4/pkg/api" "k8s.io/client-go/1.4/pkg/api/unversioned" "k8s.io/client-go/1.4/pkg/api/v1" "k8s.io/client-go/1.4/tools/clientcmd" "log" ) var ( kubeconfig = flag.String("kubeconfig", "./config", "absolute path to the kubeconfig file") ) func main() { flag.Parse() ...阅读全文

博文 2016-12-21 00:00:02 yevvzi

golang xml解析

golang解析xml真是好用,特别是struct属性的tag让程序简单了许多,其他变成语言需要特殊类型的在golang里直接使用tag舒服 xml文件地址:http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/doc/addresslist.ziphttp://wiki.opensns.qq.com/wiki/【QQ登录】get_info package main import ( "os" "encoding/xml" // "encoding/json" "io/ioutil" "fmt" ) type Location struct { CountryRegion []CountryRegion } type CountryRegion s...阅读全文

博文 2015-02-03 10:00:02 ____追梦人

go语言web框架比较:gin vs iris vs echo

前言 由于golang提供了完善的net/http标准库,基于该标准库实现一个web框架的难度相比其他语言低了不少,所以go web框架简直就是百花齐放。从老牌的revel和beego,到新出的gin,和iris等,而且还有一些类似于chi这种router。个人一般小项目,尤其是中间件需要暴露一些http接口的,基本就使用chi即可。本次测试主要是gin iris echo 这三个框架。侧重在于高性能,从并发和json序列化和反序列化两个方面来测评,毕竟后台项目侧重的也就是这两个方面。 测试 测试环境说明 为了选择符合重IO的框架,现设定如下场景的demo,demo的具体要求如下: 打开日志功能(模拟正常业务时也会记录日志),在请求开始和结束时分别记录一条日志 接口中用sleep暂停1秒,假...阅读全文

博文 2018-02-26 17:34:40 iyacontrol

Go实战--golang中文件以及文件夹路径相关操作

生命不止,继续 go go go!!! 之前介绍过golang的标准库:path/filepath, os Go语言学习之path/filepath包(the way to go) Go语言学习之os包中文件相关的操作(The way to go) 今天就跟大家分享几个关于文件以及文件夹的相关操作。 获取目录中所有文件 使用包: io/ioutil 使用方法: ioutil.ReadDir 读取目录 dirmane 中的所有目录和文件(不包括子目录) 返回读取到的文件的信息列表和读取过程中遇到的任何错误 返回的文件列表是经过排序的 FileInfo type FileInfo interface { Name() string // base name of the file Size() ...阅读全文

博文 2017-09-20 04:31:03 wangshubo1989

Go语言 操作二进制文件

二进制文件的内容: Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00000000 12 31 23 12 31 22 31 23 12 31 22 22 22 22 22 22 1# 1"1# 1"""""" 00000010 22 22 22 12 23 12 23 00 00 00 00 00 00 00 00 00 """ # # 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 0...阅读全文

博文 2015-06-17 23:02:25 king1076

深入理解 Go 标准库之 bufio.Scanner

众所周知,[带缓冲的 IO 标准库](https://golang.org/pkg/bufio/) 一直是 Go 中优化读写操作的利器。对于写操作来说,在被发送到 `socket` 或硬盘之前,`IO 缓冲区` 提供了一个临时存储区来存放数据,缓冲区存储的数据达到一定容量后才会被"释放"出来进行下一步存储,这种方式大大减少了写操作或是最终的系统调用被触发的次数,这无疑会在频繁使用系统资源的时候节省下巨大的系统开销。而对于读操作来说,`缓冲 IO` 意味着每次操作能够读取更多的数据,既减少了系统调用的次数,又通过以块为单位读取硬盘数据来更高效地使用底层硬件。本文会更加侧重于讲解 [bufio](https://golang.org/pkg/bufio/) 包中的 [Scanner](https...阅读全文

博文 2017-12-10 02:49:26 polaris

go-处理字符串导致内存溢出

今日用go来做字符的“+”连接操作,每次连接的字符串大致有10M左右,循环连接100次,直接导致go内存溢出了。 // Text project main.go package main import ( "io/ioutil" "log" "os" ) func main() { log.Println("开始") userFile := "D:\\txt\\2.txt" //读文件 readbuf, _ := ioutil.ReadFile(userFile) //文字数据处理 log.Println("开始处理数据") strcontent := string(readbuf) for i := 0; i < 100; i++ { strcontent += strcontent + ...阅读全文

博文 2014-10-04 19:26:21 jiangguanghe

使用 fasthttp 时要注意的两个点

#我们做的是聚合支付系统,使用的是fasthttp 作为http server, http client 也是使用fasthttp ### 1. 第一个问题出现的场景是我们使用fasthttp client 请求微信支付时报了这个err ErrConnectionClosed ``` the server closed connection before returning the first response byte Make sure the server returns 'Connection: close' response header before closing the connection ``` ![image.png](http://upload-images.jian...阅读全文

博文 2017-12-16 13:45:41 Bulesxz

GO语言结构体相等性

go语言结构体相等性是通过结构体成员的相等来判断的。 之前还在疑惑errors.New返回的结构体为什么会不相等,而且Read函数会返回io.EOF,很多例子代码都会把Read返回返回的error值来和io.EOF做比较,原来io.EOF是错误对象的指针,而不是错误对象本身。一个对象被实例化再多,他们的对象指针一定是不同的,这样就可以得知Read函数返回值和io.EOF比较的原因,因为比较的就是对象指针值,是纯数字的比较,这样也就区分了对象的不同实例...阅读全文

博文 2015-11-29 10:00:02 qscoding

golang中的检验hash

1.对字符串进行hash 大家可以看一下, SHA1 Hashes Go by Example写道: The pattern for generating a hash is sha1.New(), sha1.Write(bytes), then sha1.Sum([]byte{}). 附上golang代码 package main import ( "crypto/sha1" "fmt" ) func main() { s := "sha1 this string" h := sha1.New() h.Write([]byte(s)) bs := h.Sum(nil) fmt.Println(s) fmt.Printf("%x\n", bs) } 结果输出为: sha1 this stri...阅读全文

博文 2014-10-04 19:26:00 getong

介绍Go竞争检测器

文连接http://blog.golang.org/race-detector 介绍: 竞争条件是最狡诈的、最难以找到的编程错误。通常,在代码被布置到生产环境很久以后,它们才会出现并且造成奇怪的、神秘的错误。尽管Go语言的并发机制使得更容易的编写出干净的并发代码,依然无法避免竞争条件的出现。小心、勤勉以及测试是必须的。工具也可以提供帮助。 我们很高兴的宣布Go1.1包含了一个竞争检测器,一个全新的工具,用于在Go代码中找到竞争条件。该工具当前在Linux,OS X 和Windows平台可用,只要CPU是64位的x86架构。 竞争检测器基于C/C++的ThreadSanitizer 运行时库,该库在Google内部代码基地和Chromium找到许多错误。这个技术在2012年九月集成到Go中,从...阅读全文

博文 2014-10-21 01:00:00 fighterlyt