goroutine

Posted by 夏泽民
  1. 动态栈 每一个OS线程都有一个固定大小的内存块(一般会是2MB)来做栈,这个栈会用来存储当前正在被调用或挂起(指在调用其它函数时)的函数的内部变量。这个固定大小的栈同时很大又很小。因为2MB的栈对于一个小小的goroutine来说是很大的内存浪费,比如对于我们用到的,一个只是用来WaitGroup之后关闭channel的goroutine来说。而对于go程序来说,同时创建成百上千个goroutine是非常普遍的,如果每一个goroutine都需要这么大的栈的话,那这么多的goroutine就不太可能了。除去大小的问题之外,固定大小的栈对于更复杂或者更深层次的递归函数调用来说显然是不够的。修改固定的大小可以提升空间的利用率允许创建更多的线程,并且可以允许更深的递归调用,不过这两者是没法同时兼备的。


go test

Posted by 夏泽民

在包目录内,所有以_test.go为后缀名的源文件在执行go build时不会被构建成包的一部分,它们是go test测试的一部分。



进程和线程、协程的区别

Posted by 夏泽民


golang 返回函数的匿名函数 vs 接收器的方法

Posted by 夏泽民

返回函数的匿名函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
import "fmt"
type Point struct{ X, Y float64 }
func main() {
	f := func(p Point)  func () int {
		var x int
		return func () int {
			x++
			return x * x
		}
	}
	p := Point{1, 2}
	g:=f(p)
	fmt.Println("result:",g())
	fmt.Println("result:",g())
}

result: 1 result: 4



go-tour 安装

Posted by 夏泽民

由于 go get code.google.com/p/go-tour/gotour
报错: # cd .; hg clone -U https://code.google.com/p/go-tour /usr/home/huaying/go/src/pkg/code.google.com/p/go-tour
abort: error: EOF occurred in violation of protocol
package code.google.com/p/go-tour/gotour: exit status 255



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required