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

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

// 先声明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", } // ========================================== // 查找键值是否存在 if v,...阅读全文

博文 2015-02-07 15:08 YanJiangbo

golang中time包用法

time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1时间常量(时间格式化) const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST...阅读全文

博文 2014-11-26 17:47 chenbaoke

golang中net/http包用法

http包包含http客户端和服务端的实现,利用Get,Head,Post,以及PostForm实现HTTP或者HTTPS的请求. 当客户端使用完response body后必须使用close对其进行关闭.如下所示 resp, err := http.Get("http://example.com/") if err != nil { // handle error } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) // ... 变量: 以下错误是http server使用的 var ( ErrHeaderTooLong = &ProtocolError{"header too long"} ErrShortBo...阅读全文

博文 2015-03-25 11:46 msnsj

golang 中fmt用法

fmt 包中的函数和方法 本文转自Golang学习-fmt包: http://www.cnblogs.com/golove/p/3286303.html // format.go ------------------------------------------------------------ // Fprintf 将参数列表 a 填写到格式字符串 format 的占位符中 // 并将填写后的结果写入 w 中,返回写入的字节数 func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) // Printf 将参数列表 a 填写到格式字符串 format 的占位符中 // 并将填写后的结果写入...阅读全文

博文 2014-10-09 16:12 chenbaoke

golang test测试使用

1.创建测试文件夹mysql,文件夹下的go文件的package必须与文件夹名一致(不然会识别不到) 2.创建需要测试的文件mysql.go(使用github.com/go-sql-driver/mysql包) package mysql import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func findByPk(pk int) int { var num int = 0 db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/plugin_master?charset=utf8") if err != nil { panic(err.Error()) } def...阅读全文

博文 2015-03-05 14:23 benlightning

golang 高效字符串拼接

以下内容摘自许世伟《go语言程序设计》: 连接字符串使用" + "或者使用slice拼接,"这2个转换都不是无代价的" 虽然方便,但是使用+=操作符并不是在一个循环中往字符串末尾追加字符串最有效的方式,一个有效的方式是准备好一个字符串切片([]string),然后使用strings.Join()函数一次性将所有字符串串联起来。但是在go中还有一个更好的方法,其原理类似于java中的stringBuilder package main import ( "bytes" "fmt" ) func main() { var buffer bytes.Buffer //Buffer是一个实现了读写方法的可变大小的字节缓冲 for { if piece, ok := getNextString(); ...阅读全文

博文 2015-04-18 09:52 u012210379

golang Socket编程

Socket基础知识 通过上面的介绍我们知道Socket有两种:TCP Socket和UDP Socket,TCP和UDP 通过上面的介绍我们知道Socket有两种:TCP Socket和UDP Socket,TCP和UDP是协议,而要确定一个进程的需要三元组,需要IP地址和端口。 IPv4地址 目前的全球因特网所采用的协议族是TCP/IP协议。IP是TCP/IP协议中网络层的协议,是TCP/IP协议族的核心协议。目前IP协议的版本号是4(简称为IPv4),发展至今已经使用了30多年。 IPv4的地址位数为32位,也就是最多有2的32次方的电脑可以联到Internet上。近十年来由于互联网的蓬勃发展,IP位址的需求量愈来愈大,使得IP位址的发放愈趋严格,目前基本上IPv4的地址很少了,我们公...阅读全文

博文 2014-08-18 19:48 zhjih123

golang 读写文件

1.读文件 package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) //读取文件需要经常进行错误检查,这个帮助方法可以精简下面的错误检查过程。 func check(e error) { if e != nil { panic(e) } } func main() { //也许大部分基本的文件读取任务是将文件内容读取到内存中。 dat, err := ioutil.ReadFile("/tmp/dat") check(err) fmt.Print(string(dat)) //你经常会想对于一个文件是怎么读并且读取到哪一部分进行更多的控制。对于这个任务,从使用 os.Open打开一个文件获取一个 os.File 值开始。 f, ...阅读全文

博文 2015-04-20 11:46 benlightning

golang中并发sync和channel

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

博文 2014-12-01 15:19 chenbaoke

Goroutine + Channel 实践

背景 在最近开发的项目中,后端需要编写许多提供HTTP接口的API,另外技术选型相对宽松,因此选择Golang + Beego框架进行开发。之所以选择Golang,主要是考虑到开发的模块,都需要接受瞬时大并发、请求需要经历多个步骤、处理时间较长、无法同步立即返回结果的场景,Golang的goroutine以及channel所提供的语言层级的特性,正好可以满足这方面的需要。 goroutine不同于thread,threads是操作系统中的对于一个独立运行实例的描述,不同操作系统,对于thread的实现也不尽相同;但是,操作系统并不知道goroutine的存在,goroutine的调度是有Golang运行时进行管理的。启动thread虽然比process所需的资源要少,但是多个thread之间...阅读全文

golang中io包用法(二)

本文转自https://github.com/polaris1119/The-Golang-Standard-Library-by-Example/blob/master/chapter01/01.1.md,并在此基础上进行修改. io 包为I/O原语提供了基本的接口。它主要包装了这些原语的已有实现。 由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户端不应假定它们对于并行执行是安全的。 在io包中最重要的是两个接口:Reader和Writer接口。本章所提到的各种IO包,都跟这两个接口有关,也就是说,只要实现了这两个接口,它就有了IO的功能。 Reader接口 Reader接口的定义如下: type Reader interface { Read(p []byte) ...阅读全文

博文 2015-01-06 14:33 chenbaoke

Go的reflect机制和reflect包

Go的reflect机制和reflect包 概述 虽然Go是静态语言,然而还是提供了reflect机制,并且定义了reflect包来辅助反射处理。在reflect包中,最重要的两个类型就是Type和Value,分别从类型、值的角度来描述一个Go对象。 Type类型是一个接口,这个接口实现了String() string方法。Value类型是一个结构,但是并未定义任何导出字段,同样定义了String() string方法。 使用如下语句来导入reflect包 import "reflect" 注意: 1.本文中出现在类型章节的函数,都是Type的方法。由于接口的特殊性,无法明确其receiver是指针还是值,所以并未显示其receiver,但都是有receiver的 2.很多方法都有要求,如果...阅读全文

博文 2013-12-16 21:04 fighterlyt

go语言使用redis —— redigo

redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo。选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了。 redis、go、redigo的安装就不需要提了,不能强行增加篇幅。 redigo使用起来很人性化,api设计的符合直觉,我对redis了解较少,使用过程中基本没有遇到障碍。 redigo的使用入门可以去查godoc:http://godoc.org/github.com/garyburd/redigo/redis 接下来就是毫无技术含量的贴代码了: 连接redis我一般是这样写的: 1 c, err := redis.Dial("tcp", "127.0.0.1:6379") 2 if err != nil { 3 ...阅读全文

博文 2015-07-23 16:37 wolfred7464

Go_Json_Unmarshal_Marshal

Go按照RFC 4627的标准实现了一个json编解码的标准库 func Unmarshal(data []byte, v interface{}) error Unmarshal用于反序列化json的函数 根据data将数据反序列化到传入的对象中 仔细查看代码中的四种情况 1 将json反序列化成struct对象 2 将json反序列化到可以存储struct的slice中 3 将json 反序列化到map中 4 将json反序列化到slice中 package main import ( "encoding/json" "fmt" ) func main() { type Person struct { Name string Age int Gender bool } //unmarsh...阅读全文

博文 2014-08-31 21:55 u012807459

Go 字符串格式化

Go对字符串格式化提供了良好的支持。下面我们看些常用的字符串格式化的例子。 package main import "fmt" import "os" type point struct { x, y int } func main() { // Go提供了几种打印格式,用来格式化一般的Go值,例如 // 下面的%v打印了一个point结构体的对象的值 p := point{1, 2} fmt.Printf("%v\n", p) // 如果所格式化的值是一个结构体对象,那么`%+v`的格式化输出 // 将包括结构体的成员名称和值 fmt.Printf("%+v\n", p) // `%#v`格式化输出将输出一个值的Go语法表示方式。 fmt.Printf("%#v\n", p) // 使用`...阅读全文

博文 2014-07-30 09:28 fer_ba

golang 中regexp包用法

本文转自Golove博客:http://www.cnblogs.com/golove/p/3270918.html regexp 包中的函数和方法 // regexp.go ------------------------------------------------------------ // 判断在 b 中能否找到正则表达式 pattern 所匹配的子串 // pattern:要查找的正则表达式 // b:要在其中进行查找的 []byte // matched:返回是否找到匹配项 // err:返回查找过程中遇到的任何错误 // 此函数通过调用 Regexp 的方法实现 func Match(pattern string, b []byte) (matched bool, err e...阅读全文

博文 2014-10-20 21:06 chenbaoke

golang断言的使用(Type Assertion)

golang的语言中提供了断言的功能。golang中的所有程序都实现了interface{}的接口,这意味着,所有的类型如string,int,int64甚至是自定义的struct类型都就此拥有了interface{}的接口,这种做法和java中的Object类型比较类似。那么在一个数据通过func funcName(interface{})的方式传进来的时候,也就意味着这个参数被自动的转为interface{}的类型。 如以下的代码: func funcName(a interface{}) string { return string(a) } 编译器将会返回: cannot convert a (type interface{}) to type string: need type a...阅读全文

博文 2014-11-15 19:18 JonnyHsu

GO语言基础入门--类型

类型 本Go语言基础入门内容均来自于《Go语言编程》,个人记录,加深理解。 Go语言内置以下这些基础类型:  布尔类型: bool。  整型: int8、 byte、 int16、 int、 uint、 uintptr等。  浮点类型: float32 、 float64。  复数类型: complex64、 complex128。  字符串: string。  字符类型: rune。  错误类型: error。 此外, Go语言也支持以下这些复合类型:  指针( pointer)  数组( array)  切片( slice)  字典( map)  通道( chan)  结构体( struct)  接口( interface) 在这些基础类型之上Go还封装了下面...阅读全文

博文 2015-04-18 18:58 chenqijing2

GoLang之协程

GoLang之协程 目前,WebServer几种主流的并发模型: 多线程,每个线程一次处理一个请求,在当前请求处理完成之前不会接收其它请求;但在高并发环境下,多线程的开销比较大; 基于回调的异步IO,如Nginx服务器使用的epoll模型,这种模式通过事件驱动的方式使用异步IO,使服务器持续运转,但人的思维模式是串行的,大量回调函数会把流程分割,对于问题本身的反应不够自然; 协程,不需要抢占式调度,可以有效提高线程的任务并发性,而避免多线程的缺点;但原生支持协程的语言还很少。 协程(coroutine)是Go语言中的轻量级线程实现,由Go运行时(runtime)管理。 在一个函数调用前加上go关键字,这次调用就会在一个新的goroutine中并发执行。当被调用的函数返回时,这个gorouti...阅读全文

博文 2015-05-15 16:35 chenny7

go-import下划线的作用

在Golang里,import的作用是导入其他package,但是今天在看beego框架时看到了import 下划线,不知其意,故百度而解之。 import 下划线(如:import _ hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。 【示例】 目录结构: GOPATH --bin --pkg --src main.go --hello --imp init.go main.go 1 package ...阅读全文

博文 2015-06-19 16:00 hezhixiong

在 Golang 中使用 Protobuf

安装 goprotobuf 1.从 https://github.com/google/protobuf/releases 获取 Protobuf 编译器 protoc(可下载到 Windows 下的二进制版本 wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz tar zxvf protobuf-2.6.1.tar.gz cd protobuf-2.6.1 ./configure make make install protoc -h 2.获取 goprotobuf 提供的 Protobuf 编译器插件 protoc-gen-go(被放置于 $GOPATH/bin 下,...阅读全文

博文 2015-03-11 11:12 wangxusummer

golang的net包

package net import "net" net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。 虽然本包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口。crypto/tls包提供了相同的接口和类似的Dial和Listen函数。 Dial函数和服务端建立连接: conn, err := net.Dial("tcp", "google.com:80") if err != nil { // handle error } fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n") status, err := bufio.Ne...阅读全文

博文 2014-08-21 10:13 刘地

Golang flag包使用详解(一)

概述 flag包提供了一系列解析命令行参数的功能接口 命令行语法 命令行语法主要有以下几种形式 -flag //只支持bool类型 -flag=x -flag x //只支持非bool类型 以上语法对于一个或两个‘-’号,效果是一样的,但是要注意对于第三种情况,只支持非bool类型,原因是碰到如下情况时 cmd -x * *为0,false有可能表示一个文件名或文件,也有可能表示x标签的值为0或false,会产生二义性,因此规定第三种只支持非bool类型。对于整形flag,合法的值可以为1234, 0664,0x1234或负数等。对于布尔型flag,可以为1, 0, t, f, T, F,true, false, TRUE, FALSE, True, False等 命令行参数解析方法 使用f...阅读全文

博文 2014-11-20 13:58 thulpf

Go 语言测试(Test)、性能测试(Benchmark) 学习笔记

简介 Test Package testing provides support for automated testing of Go packages. It is intended to be used in concert with the “go test” command, which automates execution of any function of the form. testing包提供了对Go包的自动测试支持。 这是和go test 命令相呼应的功能, go test 命令会自动执行所以符合格式 func TestXXX(t *testing.T) 的函数。 Benchmark Functions of the form func BenchmarkXxx(b ...阅读全文

Golang -- 字节切片

Go 语言标准库 bytes ,实现了对字节数组的各种操作。 It is analogous to the facilities of strings package. (它和string 标准包提供的功能类似) 提供的功能如下; 字节切片 处理函数 基本处理函数 字节切片比较函数 前后缀检查函数 字节切片位置索引函数 分割函数 大小写处理函数 子字节切片处理函数 Buffer 对象 Reader 对象 字节切片处理函数 基本处理函数 共七个 Contains() 返回是否包含子切片 Count() 子切片非重叠实例的数量 Map() 函数,将byte 转化为Unicode,然后进行替换 Repeat() 将切片复制count此,返回这个新的切片 Replace() 将切片中的一部分 替换为...阅读全文

博文 2015-03-23 19:05 xiaorenwuzyh

【GoLang笔记】浅析Go语言Interface类型的语法行为及用法

Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态在语法上并非完全对等,但至少在最终实现的效果上,它有多态的影子。 那么,Go的Interface类型到底是什么呢?怎么使用呢?这正是本篇笔记试图说明的问题。 1. Method(s) in Go 在说明Interface类型前,不得不先用Go的method(s)概念来热身,因为Go语言的interface与method(s)这两个语法有非常紧密的联系。 虽然Go语言没有类的概念,但它支持的数据类型可以定义对应的method(s)。本质上说,所谓的method(s)其实就是函数...阅读全文

博文 2015-03-20 15:28 slvher

驳狗屎文 "我为什么放弃Go语言"

驳狗屎文 “我为什么放弃Go语言” 此篇文章流传甚广, 其实里面没啥干货, 而且里面很多观点是有问题的. 这个文章在 golang-china 很早就讨论过了.最近因为 Rust 1.0 和 1.1 的发布, 导致这个文章又出来毒害读者.所以写了这篇反驳文章, 指出其中的问题. 原文链接:http://blog.csdn.net/liigo/article/details/23699459 有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。 开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论。但是我...阅读全文

博文 2015-06-30 18:17 chai2010

go的优缺点

1.1 不允许左花括号另起一行1.2 编译器莫名其妙地给行尾加上分号1.3 极度强调编译速度,不惜放弃本应提供的功能1.4 错误处理机制太原始1.5 垃圾回收器(GC)不完善、有重大缺陷1.6 禁止未使用变量和多余import1.7 创建对象的方式太多令人纠结1.8 对象没有构造函数和析构函数1.9 defer语句的语义设定不甚合理1.10 许多语言内置设施不支持用户定义的类型1.11 没有泛型支持,常见数据类型接口丑陋1.12 实现接口不需要明确声明1.13 省掉小括号却省不掉花括号1.14 编译生成的可执行文件尺寸非常大1.15 不支持动态加载类库 Go语言的优点:并发/网络/性能/工具(fmt/pprof/test)/标准库(http/json/log/flags/atomic)/Go...阅读全文

博文 2015-02-13 05:37 findumars

golang 编码转换 gbk

(一)golang 官方转换包 go get golang.org/x/text/encoding https://godoc.org/golang.org/x/text 注:Go里面内建仅支持UTF8字符串编码,因此如果你用fmt.Printf之类的函数无法正常打印出字符串内容,而只能是一堆乱码! 导入package: import ( "bytes" "fmt" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" "io/ioutil" ) gbk转换: src:="编码转换内容内容" data, _ := ioutil.ReadAll(transform.NewReader(bytes...阅读全文

博文 2015-01-07 10:37 ziyouzhiqiu

golang学习笔记:go 语法篇(一)

学习一门新的语言肯定是要从他的基本语法开始,语法构成了整个程序设计的基础,从语法中我们也可以看到这门语言的一些特性,但是话说回来,语法这东西,不同的语言大同小异,所以这也对语法的记忆造成了一定的难度,其实最好的方法应该是旁边有本书,随时可以拿过来查阅或者纠正。当然golang的语法也是这样,下面的一些是我学习七牛云存储团队许式伟等出的《Go语言编程》: http://baike.baidu.com/link?url=vFrjnVJwITN0LaRbL7TmWYpq5V8JLWzL_NycAQy6w0e7JXP6a4bGm61ge0gGMU6jNFQO_RnuDGEQPh7YK9w4S_ 语法部分的时候整理的一些,这本书对于新手入门还是挺有帮助的。为了日后可以及时回顾,所以记录下来了。为了避免...阅读全文

博文 2015-06-09 12:12 u011321908

golang 中bufio包的用法

本文转自GOlove博客:http://www.cnblogs.com/golove/p/3282667.html 并在此基础上进行了一些添加修改. bufio 包中的函数和方法 // bufio 包实现了带缓存的 I/O 操作 // 它封装一个 io.Reader 或 io.Writer 对象 // 使其具有缓存和一些文本读写功能 ------------------------------------------------------------ // bufio.go ------------------------------------------------------------ type Reader struct { buf []byte rd io.Reader // ...阅读全文

博文 2014-10-20 20:54 chenbaoke

Golang计算MD5

Golang计算MD5 1.单向加密 什么是单向加密算法。简而言之就是不可解密的加密方法,也叫作非可逆加密。这些学术 解释都不用管它,反正就是一群数学家老爷爷通过各种证明得到的一种方法,用这种方法加密 过的东西,地球上现有的人类在有限的时间内是无法解密的,包括加密者自己。既然加密者自己 都无法解密,那这乖僻的加密算法有个毛用阿?哪些场景需要这种有去无回的加密方式呢? 这里先了解下单向加密的特征: 首先,不可解密性在上面已经提到了,目的就是掩藏明文。其次单向加密算法的另外两个特征 使得它更接地气,第一是任意两段明文数据,加密以后的密文不能是相同的; 第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。这样当我们需要表征一段 唯一的内容,但是有不想别人知道该段内容时或者仅仅是为一个内容...阅读全文

博文 2014-12-30 11:28 YangJunjie

golang list slice 删除其中一项比对

slice可以动态添加项(使用append()函数),但是没有删除项的函数。变通方法,可以使用slice重新组合的方式删除一个或多个项,slice是引用类型,存的是指针,性能上不会有太多影响,示例如下:package mainimport "fmt"func main() { s := []int{11, 22, 33, 44, 55, 66} // 原始slice i := 2 // 待删除项索引 s = append(s[:i], s[i+1:]...) // 最后面的“...”不能省略 fmt.Println(s) // 数据结果 [11 22 44 55 66]} 有人回答的很好: 这样是可以实现。不过从slice这种数据结构来看,本身并不适合做删除操作。抛开语言,只谈数据结构,我们...阅读全文

博文 2015-06-10 18:52 panda1986_meng

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(err) } //直接访问 scheme。 fmt.Println(u.Scheme) //User 包含了所有的认证信息,这里调用 Username和 Password 来获取独立值。 fmt.Pri...阅读全文

博文 2015-04-20 11:20 benlightning

Go学习笔记之:for循环

for循环是Go语言唯一的循环结构。这里有三个基本的for循环类型。 package main import "fmt" func main() { // 最基本的一种,单一条件循环 // 这个可以代替其他语言的while循环 i := 1 for i <= 3 { fmt.Println(i) i = i + 1 } // 经典的循环条件初始化/条件判断/循环后条件变化 for j := 7; j <= 9; j++ { fmt.Println(j) } // 无条件的for循环是死循环,除非你使用break跳出循环或者 // 使用return从函数返回 for { fmt.Println("loop") break } } 输出结果 1 2 3 7 8 9 loop 在后面的例子中,你将...阅读全文

博文 2014-11-26 00:21 Goopand

Go实例学:可变长参数函数

支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表的函数。 package main import "fmt" // 这个函数可以传入任意数量的整型参数 func sum(nums ...int) { fmt.Print(nums, " ") total := 0 for _, num := range nums { total += num } fmt.Println(total) } func main() { // 支持可变长参数的函数调用方法和普通函数一样 // 也支持只有一个参数的情况 sum(1, 2) sum(1, 2, 3) // 如果你需要传入的参数在一个切片中,像下面一样 // "func(slice...)"把切片打...阅读全文

博文 2014-11-29 16:15 Goopand

golang 正则表达式

package main import "bytes" import "fmt" import "regexp" func main() { //这个测试一个字符串是否符合一个表达式。 match, _ := regexp.MatchString("p([a-z]+)ch", "peach") fmt.Println(match) //上面我们是直接使用字符串,但是对于一些其他的正则任务,你需要使用 Compile 一个优化的 Regexp 结构体。 r, _ := regexp.Compile("p([a-z]+)ch") //这个结构体有很多方法。这里是类似我们前面看到的一个匹配测试。 fmt.Println(r.MatchString("peach")) //这是查找匹配字符串的。 f...阅读全文

博文 2015-04-20 11:05 benlightning

Golang- import 导入包的语法

载自:http://blog.csdn.net/zhangzhebjut/article/details/25564457?utm_source=tuicool 一 包的导入语法 在写Go代码的时候经常用到import这个命令用来导入包文件,看到的方式参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用 fmt.Println("hello world") 上面这个fmt是Go语言的标准库,他其实是去GOROOT下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块: 相对路径 import "./model" //当前文件同一目录的model目录,但是不建议这种方式import 绝对路径 import "shorturl/model" //加...阅读全文

博文 2015-07-30 03:00:00 code-review

Go os包

package main import ( "fmt" "io/ioutil" "os" "reflect" "time" ) func main() { dir, _ := os.Getwd() fmt.Println("dir:", dir) err := os.Chdir("d:/project/test2") dir, _ = os.Getwd() fmt.Println("dir:", dir) //参数不区分大小写 //不存在环境变量就返回空字符串 len(path) = 0 path := os.Getenv("gopath") fmt.Println(path) //返回有效group id egid := os.Getegid() fmt.Println("egid:", ...阅读全文

博文 2014-10-30 15:15 yumuxu

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 20:20 大蓝妹

golang byte转string 字节数组转字符串的问题

golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上大部分都是这样转的(包括google上):string(p[:]),这个转完了是有问题的,我们再来看一下string这个结构体: struct String{ byte* str; intgo len;}; 这个结构体让我想起了nginx的string,他是这样定义的: typedef struct { size_t len; u_char *data;} ngx_str_t; golang里边 string的概念其实不是以前遇到\0结尾的概念了,他其实就是一块连续的内存,首地址+长度,上面那样...阅读全文

博文 2015-08-16 05:03 anjianliang

Go程序设计语言(一)

Go程序设计语言(一) 八 23 bigwhite技术志 Blog, Blogger, C, Cpp, Go, Golang, Google, Opensource, Programmer, 博客, 开源, 程序员, 编程,语言, 编译器 No Comments 本文译自Rob Pike的Go语言PPT教程 – "The Go Programming Language Part 1(updated June 2011)"。由于该教程的最新更新时间早于Go 1版本发布,因此该PPT中的一些内容与Go 1语言规范略有差异,到时我会在相应的地方做上注解。 谁发明了Go Go语言的设计和实现工作是由Google的一个研发小组以及来自世界各地的大量贡献者共同完成的。 联系方式: http://gola...阅读全文

优化 Go 中的 map 并发存取

Catena (时序存储引擎)中有一个函数的实现备受争议,它从 map 中根据指定的 name 获取一个 metricSource。每一次插入操作都会至少调用一次这个函数,现实场景中该函数调用更是频繁,并且是跨多个协程的,因此我们必须要考虑同步。 该函数从 map[string]*metricSource 中根据指定的 name 获取一个指向 metricSource 的指针,如果获取不到则创建一个并返回。其中要注意的关键点是我们只会对这个 map 进行插入操作。 简单实现如下:(为节省篇幅,省略了函数头和返回,只贴重要部分) var source *memorySource var present bool p.lock.Lock() // lock the mutex defer p.l...阅读全文

博文 April 2, 2015 88250

golang 的time包之time

先看看有哪些类型 Time 时间类型,包含了秒和纳秒以及Location Month type Month int 月份.定义了十二个月的常量 Weekday type Weekday int 周,定义了一周的七天 Duration type Duration int64 持续时间.定义了以下持续时间类型.多用于时间的加减 需要传入Duration做为参数的时候.可以直接传入time.Second const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hou...阅读全文

博文 2013-04-12 19:37 zhepama

Golang 简单理解Channel

什么是channel? channel是Go语言在语言级别提供的goroutine间的通信方式。我们可以使用channel在两个或 多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,我们建议用 分布式系统的方法来解决,比如使用Socket或者HTTP等通信协议。Go语言对于网络方面也有非常完善的支持。 channel是类型相关的。也就是说,一个channel只能传递一种类型的值,这个类型需要在声明channel时指定。如果对Unix管道有所了解的话,就不难理解channel,可以将其认为是一种类 型安全的管道。 (我复制pdf上的。个人理解即是并发编程中各线程...阅读全文

博文 2015-02-09 11:25 未来还没来

golang strings包方法

package main import s "strings" //strings取个别名 import "fmt" //我们给 fmt.Println 一个短名字的别名,我们随后将会经常用到。 var p = fmt.Println func main() { //这是一些 strings 中的函数例子。注意他们都是包中的函数,不是字符串对象自身的方法,这意味着我们需要考虑在调用时传递字符作为第一个参数进行传递。 p("Contains: ", s.Contains("test", "es")) p("Count: ", s.Count("test", "t")) p("HasPrefix: ", s.HasPrefix("test", "te")) p("HasSuffix: ", s....阅读全文

博文 2015-04-20 10:42 benlightning

golang 中strconv包用法

本文转自Golove博客:http://www.cnblogs.com/golove/p/3262925.html strconv 包中的函数和方法 // atob.go ------------------------------------------------------------ // ParseBool 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False. // 其它任何值都返回一个错误 func ParseBool(str string) (value bool, err error) package main import ( "fmt" "strconv" ...阅读全文

Go学习笔记之:range函数

range函数是个神奇而有趣的内置函数,你可以使用它来遍历数组,切片和字典。 当用于遍历数组和切片的时候,range函数返回索引和元素; 当用于遍历字典的时候,range函数返回字典的键和值。 package main import "fmt" func main() { // 这里我们使用range来计算一个切片的所有元素和 // 这种方法对数组也适用 nums := []int{2, 3, 4} sum := 0 for _, num := range nums { sum += num } fmt.Println("sum:", sum) // range 用来遍历数组和切片的时候返回索引和元素值 // 如果我们不要关心索引可以使用一个下划线(_)来忽略这个返回值 // 当然我们有的时...阅读全文

博文 2014-11-27 22:47 Goopand

golang判断文件或文件夹是否存在

golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断: 如果返回的错误为nil,说明文件或文件夹存在如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在如果返回的错误为其它类型,则不确定是否在存在 func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err ...阅读全文

博文 2015-11-23 11:21 xielingyun

go语言包与包引用

go语言中包(package)与java中的包(package)非常类似,都是组织代码的方式,而且都和磁盘上的目录结构存在对应关系。 go语言中,包名一般为go代码所在的目录名,但是与java不同的是,go语言中包名只有一级,而在java中包名是以点分割的多级目录组合的。 go语言中,引用包时需要以GOPATH/src目录为相对根目录,依次输入下面的各级目录名。 如:环境变量GOPATH = ~/go 包hello下有hello.go,包所在的磁盘路径为: ~/go/src/golang_everyday/hello 也就是说,hello.go的路径为: ~/go/src/golang_everyday/hello/hello.go 则在其它文件中引用该go文件时,代码应为: import ...阅读全文

博文 2015-03-03 08:59 baiyuxiong