go map操作需要注意的地方
map 数据直接赋值,或者作为函数参数传递时是 指针传递, 修改其中一个则会修改全部变量数据 func main() { var s_map = make(map[int]int) for i := 0; i <= 5; i++ { s_map[i] = i } fmt.Println(s_map) s_map2 := s_map s_map2[10] = 100 fmt.Println(s_map) fmt.P...阅读全文
map 数据直接赋值,或者作为函数参数传递时是 指针传递, 修改其中一个则会修改全部变量数据 func main() { var s_map = make(map[int]int) for i := 0; i <= 5; i++ { s_map[i] = i } fmt.Println(s_map) s_map2 := s_map s_map2[10] = 100 fmt.Println(s_map) fmt.P...阅读全文
一个网友问的,如何在64位机器上产生16个F,如何在32位机器产生8个F,当然要动态生成的,所以有了下面的代码: package main import ( "fmt" "strconv" ) func main() { size := strconv.IntSize value := uint(1<<uint(size) - 1) fmt.Println(value) }阅读全文
package main import ( "errors" "fmt" ) type data struct{} func (this *data) Error() string { return "" } func bad() bool { return true } //自定义错误返回函数 func test() error { var p *data = nil if bad() { return p } return nil } //只是返回错误非空 fu...阅读全文
作者:John Graham-Cumming. 原文点击此处。翻译:Lubia Yang 前些天我介绍了我们对Lua的使用,implement our new Web Application Firewall. 另一种在CloudFlare (作者的公司)变得非常流行的语言是Golang。在过去,我写了一篇 how we use Go来介绍类似Railgun的网络服务的编写。 用Golang这样带GC的语言编写长期运行的网络服务有一个很大的挑战,那就是内存管理。 为...阅读全文
1.返回值使用通道 func main() { // 生成随机数作为一个服务 randService := randGenerator() // 从服务中读取随机数并打印 fmt.Printf("%d\n",<-randService) } func randGenerator() chan int { // 创建通道 out := make(chan int) // 创建协程 go func() { for { ...阅读全文
package main import "fmt" func main() { //引用变量赋值 var a string afuzhi(&a) fmt.Println(a) fmt.Println("=========================") bianliang() } func afuzhi(b *string) { *b = "ccc" //fmt.Println(b) } func bianliang() { var a = [3]int{1, 2,...阅读全文
package main import ( "bufio" "bytes" "io" "os" "unicode" ) const ( stat_none = iota stat_group stat_key stat_value stat_comment ) type Attr struct { Name string Value string Comment string next *Attr }...阅读全文
今晚 在拿sqlite3来做个小demo,驱动用到github.com/mattn/go-sqlite3 发现 就算写入 time.now() 都不是本地时区,于是乎到github.com/mattn/go-sqlite3去查看代码,发现 https://github.com/mattn/go-sqlite3/blob/master/sqlite3.go#L324 这个链接里面高亮的 部分是utc ,最后解决办法是把自己本地源码的sqlite3.go 第324行改成一下: ...阅读全文
编译 go 程序可以使用自带的一些 Makefile 脚本来简化编写 Makefile 。官方的文档过于简略,没提到需要指定依赖包位置的方法。翻过那几个脚本代码后,发现原来有 LDIMPORTS 和 GCIMPORTS 可以指定。 比如: include $(GOROOT)/src/Make.inc LDIMPORTS=-L ./pkg/_obj GCIMPORTS=-I ./pkg/_obj TARG=tool GOFILES=\ tool.go\ include $(GOROOT)/...阅读全文
使用go get下载github.com等网站的代码时,有时候会发现下载的代码与网站上的代码不一致。如seelog库 查看了go 1.1.2源码中get.go,发现下载代码时会首先查看命名为"go1"的tag。如果有,则下载此tag的代码,而非master分支的当前代码 解决方法(简单一点的): 到$GOPATH/src/第三方库源代码目录,执行git checkout master(或其他分支),切换分支; 执行go get <第三方库>命令,重新编译pkg中.a库文件; 重新go buil...阅读全文
package beego import ( "errors" "fmt" "strconv" "sync" "time" ) var ( DefaultEvery int = 60 // 1 minute ) type BeeItem struct { val interface{} Lastaccess time.Time expired int } func (itm *BeeItem) Access() interface{} { itm....阅读全文
Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。 操作系统与运行库 并发与并行 (Concurrency and Parallelism) 线程的调度 并发编程框架 goroutine 1. 操作系统与运行库...阅读全文
package mymath func Add(a, b int) int { return a + b } func Max(a, b int) (ret int) { ret = a if b > a { ret = b } return } package mymath_test import ( "mymath" "testing" ) type mathTest struct { a, b, re...阅读全文
最近使用go语言html/template包进行一些静态化工作,发现template对于小于号(左尖括号<)不能正确处理,反复研究,没有弄清楚怎么回事,后来变通了一下,先对模板进行EscapeString编码,格式化以后,再进行UnescapeString编码,问题得到解决;但还是没弄清楚template为什么对单独的小于号(左尖括号<)无法正确格式化,但发现如果左尖括号的右边有一个或多个右尖括号(>),则能正确解析格式化,而template源码包读起来很费解,最终没有弄明白,希望知道的同学能告...阅读全文
我是搞php出身,自然安装lnmp是常规技能。以前的手段还是lnmp安装包,比如军哥的lnmp1.0。随着php和mysql的更新,大多数一键安装都开始版本老化,更新困难的问题。因此,重新研究了一下Ubuntu下lnmp的安装,发现现在简单的多,记录一下。 另外最近在学习golang,Ubuntu下安装自然也是必须的过程。不过golang的安装也有一些奥妙。当然,不是源码安装的啦。 Nginx Stable/Development Ubuntu下的包管理器是apt-get或者...阅读全文
使用glang有一段时间了,最开始其实并不太喜欢他的语法,但是后来熟悉之后发现用起来还挺爽的。之前数据库一直使用mysql,连接起来没有什么问题,github上有很多完善的驱动,所以以为连接其他数据库也应该没什么问题,近日听说其连接orcale比较麻烦,所以就试了试。 之所以连接orcale比较麻烦是因为orcale并没有提供golang的驱动,所以并不能像java那样引入个驱动包就能连接,也不能像mysql之类的开源数据库可以自己实现驱动。不过正所谓天无绝人之路,既然纯go实现...阅读全文
package fmt import "fmt" mt包实现了类似C语言printf和scanf的格式化I/O。格式化verb('verb')源自C语言但更简单。 Printing verb: 通用: %v 值的默认格式表示。当输出结构体时,扩展标志(%+v)会添加字段名 %#v 值的Go语法表示 %T 值的类型的Go语法表示 %% 百分号 布尔值: %t 单词true或false 整数: %b 表示为二进制 %c 该值对应的unicode码值...阅读全文