go 语言实现http请求转发

package main import ( "bytes" "flag" "fmt" "io" "log" "net" "os" "strings" "time" ) func main() { var srcHost, agencyHost string flag.StringVar(&srcHost, "srcHost", "", "srcHost") flag.StringVar(&agencyHost, "agencyHost", "", "agencyHost") flag.Parse...阅读全文

开源中国博客 2017-01-19 19:00:08 KelvinQ

golang互斥锁跟读写锁

golang中sync包实现了两种锁Mutex (互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能. type Mutex func (m *Mutex) Lock() func (m *Mutex) Unlock() type RWMutex func (rw *RWMutex) Lock() func (rw *RWMutex) RLock() func (rw *RWMutex) RLocker() Locker func ...阅读全文

开源中国博客 2017-01-18 19:00:17 tree2013

实效go编程

实效Go编程 版本:2013年12月22日 引言 示例 格式化 注释 命名 包名 获取器 接口名 驼峰记法 分号 控制结构 If 重新声明与再次赋值 For Switch 类型选择 函数 多值返回 可命名结果形参 Defer 数据 new 分配 构造函数与复合字面 make 分配 数组 切片 二维切片 映射 打印 追加 初始化 常量 变量 init 函数 方法 指针 vs. 值 接口与其它类型 接口 类型转换 接口转换与类型断言 通用性 接口和方法 空白标识符 多重赋值中的空白标识符 未使用的导...阅读全文

开源中国博客 2017-01-18 18:00:08 四明狂客

A tour of Go

A Tour of Go(GO之旅) Posted on Thursday, June 21, 2012.(投递于2012年6月21号星期四) Last week, I gave a talk about Go at the Boston Google Developers Group meeting. There were some problems with the recording, so I have rerecorded the talk as a screencast and po...阅读全文

开源中国博客 2017-01-18 18:00:07 四明狂客

试玩 go-socks5

测试环境 centos7 64 安装配置 安装 golang git yum install golang git 设置golang环境变量 export GOPATH=/root/gopath/ export GOROOT=/usr/lib/golang/ GOROOT 是golang安装的目录 如果是yum安装 用rpm查找出安装目录: rpm -ql golang GOPATH gopath可以自己新建个目录,安装的go-socks5会放在 $GOPATH目录中 安装go-socks5 g...阅读全文

开源中国博客 2017-01-17 15:00:03 dworry

golang的事务操作sync.once

复习复习golang的库函数 type Once struct { m Mutex done uint32 //相当于一个flag值 } func (o *Once) Do(f func()) { //atomic库是原子操作,由汇编代码实现 if atomic.LoadUint32(&o.done) == 1 { return } // Slow-path. //读取o.done值前设置一个锁mutex o.m.Lock() defer o.m.Unlock() if o.done == 0 ...阅读全文

开源中国博客 2017-01-16 16:00:09 golang_yh

[Go语言]binary tree算法的华山论剑

前言 在benchmarkgame(世界上最火的性能对比网站)上,Go语言一直有一个槽点,就是极其慢的binary tree性能,执行用时40秒 (我的机器上,16秒),与此对比,Java版本是6秒,那么问题来了:为什么慢得令人发指?我们来深入研究下慢的原因,然后看看能否对其进行改进。 对于binary tree算法中,最耗性能的地方就是海量的node分配和bottomUpTree()递归函数的调用,与这两项对应的go的特性就是gc的goroutine的堆栈分配。 GC 这个世界没有完美的GC,...阅读全文

CSDN博客 2016-12-31 16:32 abv123456789

golang 的url模块示例

package main import "fmt" import "net/url" import "strings" func main() { //我们将解析这个 URL 示例,它包含了一个 scheme,认证信息,主机名,端口,路径,查询参数和片段。 s := "postgres://user:pass@host.com:5432/path?k=v#f" //解析这个 URL 并确保解析没有出错。 u, err := url.Parse(s) if err != nil { panic(e...阅读全文

开源中国博客 2017-01-15 23:00:11 面码

golang异常处理

package main import ( "fmt" ) type TryTarget func() type CatchTarget func() func TryAndCatch(target TryTarget, catch CatchTarget) { defer func() { if err := recover(); err != nil { catch() } }() target() } func main() { TryAndCatch(func() { panic("抛出...阅读全文

开源中国博客 2017-01-15 03:00:12 醉人的笑容你有没有

go语言中sync包和channel机制

golang中实现并发非常简单,只需在需要并发的函数前面添加关键字"Go",但是如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel机制来解决这一问题. sync 包提供了互斥锁这类的基本的同步原语.除 Once 和 WaitGroup 之外的类型大多用于底层库的例程。更高级的同步操作通过信道与通信进行。 type Cond func NewCond(l Locker) *Cond func (c *Cond) Broadcast() f...阅读全文

开源中国博客 2017-01-14 16:00:05 vaptu

raspberry pi 2用golang 控制GPIO

/* # Date: 2016-11-10 # Author: simonzhang # web: www.simonzhang.net # Email: simon-zzm@163.com */ package main import ( "os" "github.com/stianeikeland/go-rpio" "time" ) var ( aio = rpio.Pin(14) fio = rpio.Pin(4) alertCount int = 0 ) // 风扇端口 func fWr...阅读全文

开源中国博客 2017-01-13 15:00:06 zhangzhihai

[Golang]Socket编程01----实现基本功能的Client和Server

支持多连接。 Server运行之后,进入Accept阻塞状态。Accept得到一个Conn之后,开启一个协程,分别有两个协程阻塞在Read和Write。当Read一个数据之后,将Read得到的数据写入readChannel中,之后再对其进行处理。在writeChannel得到一个数据之后,向Conn写入数据。 Client运行后,接入Server,之后开启两个协程阻塞在Read和Write的Channel中。在Scan得到一个数据之后,向writeChannel写入数据,唤醒阻塞的协程向Conn...阅读全文

开源中国博客 2017-01-13 11:00:02 码农小骚年

go单元测试进阶篇

版权声明:本文由腾讯云数据库团队 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/921985001483606833 来源:腾云阁 https://www.qcloud.com/community 作者介绍:熊训德(英文名:Sundy),16年毕业于四川大学大学并加入腾讯。目前在腾讯云从事hadoop生态相关的云存储和计算等后台开发,喜欢并专注于研究大数据、虚拟化和人工智能等相关技术。 本文档说明go语言自带的测试框架...阅读全文

开源中国博客 2017-01-11 17:00:01 偶素浅小浅

GO中的“泛型”?

Golang不支持一般的类似Java中的标记式泛型。很多人因此而十分不满,认为没有泛型增加了很多工作量。而目前由于泛型支持的复杂性,Golang的设计和实现者并没有把这个泛型支持作为紧急需要增加的特性。但是,如果真的没有泛型,就一定不行了么?答案当然是否定的。没有泛型也可以,而且我觉得代码更简单,直接,有趣(个人观点,勿喷)。 我们这里打算以一些例子来讲解Golang中如何处理这个问题。 首先,我们看一个冒泡排序的问题。针对整型数组切片的排序。 package main import ( "fm...阅读全文

开源中国博客 2017-01-11 16:00:00 vaptu

Golang Package-database/sql

一、导入库 import ( "database/sql" _ "github.com/lib/pq" ) 二、连接DB func main() { db, err := sql.Open("postgres", "user=pqgotest dbname=pqgotest sslmode=verify-full") /*db, err := sql.Open("postgres", "postgres://pqgotest:password@localhost/pqgotest?sslmode...阅读全文

开源中国博客 2017-01-10 21:00:10 吃一堑消化不良

Golang 结构体

一、结构体声明和初始化: /*声明结构体*/ type person struct { name string age int } /*初始化结构体,并赋给变量 per*/ per := person {name : "eagle", age : 24} 二、匿名结构体声明和初始化 per := struct { name string age int }{ name : "eagle", age : 24, } /*备注: (1) 匿名结构体的初始化和声明必须合并,不能拆分开 (2) 这里的最...阅读全文

开源中国博客 2017-01-10 20:00:08 吃一堑消化不良

centos 7 golang gogs 部署

centos 7 golang gogs 部署 很久没有时间记录一些东西了,用起来的时候就很麻烦, golang 的安装 yum install go 这个原生安装但是 似乎docker 的环境有问题,主要是gorootpath的问题,会导致后面 go get 报错(import path does not begin with hostname), cd /tmp curl -LO https://storage.googleapis.com/golang/go1.7.linux-amd64....阅读全文

CSDN博客 2016-12-23 11:06 jzbis

Go 1.6中cgo的变化记录

北京时间2016年2月18日凌晨,在Go 1.5发布 半年后,Go 1.6正式Release 了。与Go 1.5的“惊天巨变”(主要指Go自举)相比,Go 1.6的Change 算是很小的了,当然这也与Go 1.6的dev cycle过于短暂有关。但Go社区对此次发布却甚是重视,其热烈程度甚至超出了Go 1.5。在Dave Cheney的倡导 下,Gophers们在全球各地举行了Go 1.6 Release Party。 Go Core Team也在Reddit上开了一个AMA – Ask Me...阅读全文

开源中国博客 2017-01-10 11:00:01 Lancerio

Go语言并发的设计模式和应用场景

生成器 在Python中我们可以使用yield关键字来让一个函数成为生成器,在Go中我们可以使用信道来制造生成器(一种lazy load类似的东西)。 当然我们的信道并不是简单的做阻塞主线的功能来使用的哦。 下面是一个制作自增整数生成器的例子,直到主线向信道索要数据,我们才添加数据到信道: func xrange() chan int{ // xrange用来生成自增的整数 var ch chan int = make(chan int) go func() { // 开出一个goroutine...阅读全文

开源中国博客 2017-01-10 10:00:01 四明狂客