GO

GO

Posted by chinaljr on August 2, 2016

输出

import "fmt"
fmt.Println(a)

文件读写

contents ,err := ioutil.ReadFile(filename)
outFiles ,err := os.Create(filename)
  • err 错误信息,如果为空为nil

make

a := make([]int ,5 ,10)
  • 类型,分配空间,预留分配空间
  • 预留分配空间需要切片

log.Fatal / defer

log.Fatal(err)
  • 打印错误信息,结束程序.
defer fmt.Printf("printf after return")

json

enc := json.NewEncoder(file)
err := enc.Encode(&kv)

for

for i := 0 ; i< n ;i++{

}

string

words := strings.FieldsFunc(contents,func(c rune) bool{
	return !unicode.Isletter(c)
})
  • FieldsFunc 根据函数(参数2)来分割字符串(参数1)

GO 并发 goroutines

  • 官网
    func Announce(message string, delay time.Duration) {
      go func() {
          time.Sleep(delay)
          fmt.Println(message)
      }()  // Note the parentheses - must call the function.
    }
    
  • sync.WaitGroup
var wg sync.WaitGroup
wg.Add(N)
wg.Done()
wg.Wait()

实现进程的计数,我要完成N个线程,每个进程go最后调用一个.Done表示进程结束,配合.Wait表示程序现在挂起,全部完成之后进行接下来的语句.

  • 资源请求
ok := false
var source int
for !ok {
	source <-sourcePool
	ok = do(source)
}
sourcePool <- source

小例子

fmt.Printf("test begin\n")
c := make(chan int, 2)
c<-1
c<-1
var wg sync.WaitGroup
wg.Add(10)
for i := 0 ; i<10; i++{
	go func(k int){
		ok := false
		for !ok{
			<-c
			fmt.Println(k)
			ok = true
		}
		c <- 1		
		wg.Done()
	}(i)
}
wg.Wait()
fmt.Printf("test end\n")