ssdb的golang驱动的同步问题

如果数据库连接只有一个,在某个时间点(指的是某个及其短的时间内),多个读写的话,会出问题,修改了下,加了个mutex,算是解决了此问题,贴下备忘 var mutex sync.Mutex func (c *Client) Do(args ...interface{}) ([]string, error) { var resp []string var err error mutex.Lock() err = c.send(args) resp, er...阅读全文

博客园 2014-07-18 22:07 ziyouchutuwenwu

go语言编译记录

$ 6g mypak.go               #先编译自定义包,生成mypak.6     $ 6g test.go                # 然后编译,生成test.6     $ 6l -o go_test test.6      # 链接生成新文件名 go_test     $ go_test     hello, world 如在程序中有自定义包(如本例test.go中引用了mypak包),则需要使用 import("./mypak"),其中 ./ 告诉编译器(comp...阅读全文

ITEYE博客 2012-12-17 15:38 zdrqq

深入学习golang(4)—new与make

Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives)。对于初学者,这两者的区别也挺容易让人迷糊的。简单的说,new只分配内存,make用于slice,map,和channel的初始化。   1. new 这是一个用来分配内存的内建函数,但是与C++不一样的是,它并不初始化内存,只是将其置零。也就是说,new(T)会为T类型的新项目,分配被置零的存储,并且返回它的地址,一个类型为*T的值。在Go的术语中,其返回一个指向新分配的类型为T的指针,这...阅读全文

博客园 2014-10-03 12:54 hustcat

golang源码解读之map

golang的map实现并不是像c++一样使用红黑树,而是使用了hashmap,用数组来实现。 详细的实现后续补充,这里先做个备忘。 在iterate整个map的时候,使用delete是安全的。这跟c++是不一样的,c++在delete的时候,会导致整棵树发生变化,所以不能在迭代的时候删除元素。 那为什么golang的map是安全的呢,从源码来看,golang的map使用了桶的概念,元素是被hash到桶存储,每个桶预设是存储八个kv,而且在头部有一个uint8 tophash[8]的结构,存储每...阅读全文

博客园 2014-09-16 16:42 weijiaen

go学习笔记-控制流

控制语句 条件语句 条件语句不需要使用括号将条件包含起来(); 无论语句体内有几条语句,花括号{}都是必须存在的; 左花括号{必须与if或者else处于同一行; 在if之后,条件语句之前,可以添加变量初始化语句,使用;间隔; 在有返回值的函数中,不允许将“最终的”return语句包含在if…else…结构中,否则会编译失败: func example(x int) int{ var result int if x == 0 { result = 5 ...阅读全文

开源中国博客 2014-03-19 20:15 Bluven

go语言测试test

Go语言通过testing包提供自动化测试功能。包内测试只要运行命令 go test,就能自动运行符合规则的测试函数。Go语言测试约定规则1.一般测试func TestXxx(*testing.T)测试行必须Test开头,Xxx为字符串,第一个X必须大写的[A-Z]的字幕为了测试方法和被测试方法的可读性,一般Xxx为被测试方法的函数名。 2.性能测试func BenchmarkXxx(*testing.B)性能测试用Benchmark标记,Xxx同上。 3.测试文件名约定go语言测试文件名约定规...阅读全文

ITEYE博客 2013-03-15 15:41 lavafree

golang channel初次接触

goroutine之间的同步 goroutine是golang中在语言级别实现的轻量级线程,仅仅利用go就能立刻起一个新线程。多线程会引入线程之间的同步问题,经典的同步问题如生产者-消费者问题,在c,java级别需要使用锁、信号量进行共享资源的互斥使用和多线程之间的时序控制,而在golang中有channel作为同步的工具。 1. channel实现两个goroutine之间的通信 package main import "strconv" import "fmt" func main() ...阅读全文

博客园 2014-09-04 00:14 pier2

深入学习golang(3)—类型方法

类型方法 1. 给类型定义方法 在Go语言中,我们可以给任何类型(包括内置类型,但不包括指针和接口)定义方法。例如,在实际编程中,我们经常使用[ ]byte的切片,我们可以定义一个新的类型: type ByteSlice []byte 然后我们就可以定义方法了。例如,假如我们不想使用内建的append函数,我们可以实现一个自己的append方法: func Append(slice, data[]byte) []byte {     l := len(slice)     if l + ...阅读全文

博客园 2014-10-03 00:13 hustcat

利用golang实现聊天通信

实现逻辑 1、Golang 版本  1.3 2、实现原理:   1、主进程建立TCP监听服务,并且初始化一个变量 talkChan := make(map[int]chan string)   2、当主进程ACCEPT连接请求后,利用go 启动一个协程A去维持和客户端的连接,把taokChan带入到协程里   3、和客户端建立连接的协程A,发送消息给客户端,使其发送自己的用户信息。   4、协程A在收到客户端发送的用户信息后,建立一个此用户对应的管道 talkChan[uid] = make(c...阅读全文

博客园 2014-10-04 19:26:15 aqsmoke