低延迟图形数据库 Dgraph
dgraph 是可扩展的,分布式的,低延迟图形数据库。 DGraph 的目标是提供 Google 生产水平的规模和吞吐量,在超过TB的结构数据里,未用户提供足够低延迟的实时查询。DGraph 支持 [GraphQL](http://graphql.org/) 作为查询语言,响应 [JSON](http://www.json.org/)...阅读全文
dgraph 是可扩展的,分布式的,低延迟图形数据库。 DGraph 的目标是提供 Google 生产水平的规模和吞吐量,在超过TB的结构数据里,未用户提供足够低延迟的实时查询。DGraph 支持 [GraphQL](http://graphql.org/) 作为查询语言,响应 [JSON](http://www.json.org/)...阅读全文
Richard L. Hudson (Rick) is best known for his work in memory management including the invention of the Train, Sapphire, and Mississippi Delta algorithms as well as GC stack maps which enabled garbage collection in statically typed languages like Java, C#, and Go. He has published papers on language runtimes, memory management, concurrency, synchro...阅读全文
【Go Flow Control】 1、for没有(),必须有{}。 2、for的前后表达式可以为空。 3、没有while,for即是while。 4、无穷循环。 5、if没有(),必须有{}。 6、if临时变量。 Like for, the if statement can start with a short statement to execute before the condition. Variables declared by the statement are only in scope until the end of the if. 7、if临时变量可以在else中使用。 8、switch会自动break。 9、case中表达式可被计算。 10、Switch withou...阅读全文
关键字 defer ⽤于注册延迟调⽤。这些调⽤直到 ret 前才被执⾏,通常⽤于释放资源或错误处理。 一、当defer被声明时,其参数就会被实时解析 func a() { i := 0 defer fmt.Println(i) //输出0,因为i此时就是0 i++ defer fmt.Println(i) //输出1,因为i此时就是1 return } 二、当一个函数内多次调用 defer 时,Go 会把 defer 调用放入到一个栈中,随后按照先进后出的顺序执行。 func main() { defer fmt.Println("1") defer fmt.Println("2") defer fmt.Println("3") defer fmt.Println("4") } 输出顺序为4...阅读全文
函数的结构如下 func(p mytype) funcname(q int)(r,s int){return 0,0} 函数有很多特点 多值返回 Go可以返回多值 延迟代码 在defer后指定函数会在退出的时候调用 func ReadWrite() bool { file.Open("fileName") defer file.Close() //.... } 变参 func myfunc(arg ...int){ } 回调 func callback(y int,f func(int)){ f(y) ...阅读全文
break外层循环 func main() { FirstLoop: for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { fmt.Printf("i=%d, j=%d\r\n", i, j) if j == 5 { break FirstLoop } } } fmt.Println("the end") } range读取slice func main() { array := [3]int32{1, 2} aslice = array[0:2] for i, v := range aslice { fmt.Printf("[%d]=%d ", i, v) } } range读取map for key, value := range map...阅读全文
RawMessage类型 encoding/json的库中有这样一个类型: RawMessage类型是一个保持原本编码的json对象。本类型实现了Marshaler和Unmarshaler接口,用于延迟json的解码或者预计算json的编码。 实际工作中,我们可能会遇到类型这种的json数据: package main import "encoding/json" // jsonText comes from http://json.org/example.html var jsonText = []byte(` { "glossary":{ "title":"example glossary", "GlossDiv":{ "title":"S", "GlossList":{ "GlossE...阅读全文
defer 语句 该语句表示预定对一个函数进行调用,调用的函数被称为延迟函数 eg: defer fmt.Println("thye finishing touches.") defer fmt.println("11") 该语句在函数结束时被调用,其执行顺序和书写顺序相反, 即先打印 11,再打印 the finishing touches, 即在return语句调用之前执行该语句. 即异常发生时,也会调用该函数 该语句一般用于收尾工作和回收资源. 匿名函数 defer func(i int){ fmt.printf("%d",i) }(i) 与c中的atexit函数作用相...阅读全文
我使用blackfriday解析markdown文件却出现吞字的现象,例如 ```go ## util ``` 解析成了 ```go til ``` ....我相当的郁闷。。。。 以下是函数 ```go func LoadMarkdown(f string)([]byte, error) { input, err := ioutil.ReadFile(f) if err != nil { return nil, err } print(string(input)) output := blackfriday.Run(input, blackfriday.WithExtensi...阅读全文
续上一篇的思路,解决延迟计算的问题。相关的keyword很容易想到yield。 在C#中的延迟计算介绍可以参考一些文章,例如 “不能不说的C#特性-迭代器(下) yield以及流的延迟计算” http://www.cnblogs.com/yuyijq/archive/2008/07/19/1246609.html 文章中提到 一、每次只返回一个元素的方法(阅读者请跳到下文的第二部分) 从一个比较形式化的角度想,需要一个函数,每次调用去除列表最前面的元素,如果列表为空,返回false。 type iterator func()(bool,interface{}) 然后在使用的时候,for循环每次都会判断获取的bool返回值为true的话,输出结果。 for ok, next := iter()...阅读全文
go怎么实现延迟任务执行 main函数执行后 直接退出了 在main函数里面是有select{}可以实现执行完后在退出 ,但是实际项目应用中肯定不能这样做,例如执行一个每20秒执行一个任务 应该怎么做func main() { //go timer1() //timer2() for i :=1; i <10 ; i++ { task :=&Task{i+1,"a",""} task.Start() } } type Task struct { delay int key string data string } func NewTask(delay int,key ,data string) *Task { task :=&Task{ delay:delay, key:key, data:...阅读全文
GO语言defer延迟代码假设有一个函数,打开文件并且对其进行若干读写。在这样的函数中,经常有提前返回的地方。如果你这样做,就需要关闭正在工作的文件描述符。这经常导致产生下面的代码:func ReadWrite() bool { file.Open("file") // 做一些工作 if failureX { file.Close() return false } if failureY { file.Close() return false } file.Close() return true } 在这里有许多重复的代码。为了解决这些,Go有了defer语句。在defer后指定的函数会在函数退出前调用。上面的代码可以被改写为下面这样。将Close对应的放置于Open后,能够使函数更加可读、...阅读全文
defer 语句用于延迟调用指定的函数比如: func outerFunc() { defer fmt.Println("defer 执行") fmt.Println("第一个被打印") } defer 语句最后才会被执行 func printNumbers() { for i :=0 ; i < 5; i++ { defer func() { fmt.Println(i) }() } } 会打印55555延迟函数执行时i已经=5了 func printNumbers1() {for i :=0 ; i < 5; i++ {defer func(n int) {fmt.Println(n)}(i)}}会打印43210延迟函数有了传入参数,就会打印传入的参...阅读全文
// code_006_defer_usage project main.go package main import ( "fmt" ) func test(x int) { fmt.Println(100 / x) } func main() { //关键字 defer ⽤于延迟一个函数或者方法(或者当前所创建的匿名函数)的执行。 //注意,defer语句只能出现在函数或方法的内部。 fmt.Println("this is a test") defer fmt.Println("this is a defer") //defer语句经常被用于处理成对的操作,如打开、关闭、连接、断开连接、加锁、释放锁。 //通过defer机制,不论函数逻辑多复杂,都能保证在任何执行路径下,资源被释放。 ...阅读全文
defer语句被⽤于预定对⼀个函数的调⽤。可以把这类被defer语句调⽤的函数称为延迟函数。 延迟的函数是按照后进先出(LIFO)的顺序执行 defer的作用 * 释放占用资源 * 捕捉异常状态 * 输出日志 func ReadWrite() bool { file.Open("file") defer file.Close() //file.Close() 被添加到了 defer 列表 // 做一些工作 if failureX { return false //Close() 现在自动调用 } if failureY { return false //这里也是 } return true //And here ...阅读全文