注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老狗的博客

尽管每一步都很微小,但我确认我在进步

 
 
 

日志

 
 
关于我
sky

认真生活,努力工作 热爱技术,关注DB,存储,分布式,中间层,java,c++,php

go语法学习  

2016-05-12 15:20:29|  分类: language |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1. gopath 设定
gopath目录用来存放用go编写的源码文件,编译后的可运行文件,以及编辑之后的包文件
这三种文件对应的目录分别为src, bin, pkg
gopath可以指定多个目录,用冒号进行分割

2. channel
var ch int = make(chan int)  //创建一个仅能容纳1个int的channel
var ch int = make(chan int, 2) //创建一个可以容纳两个int的channel

3. signal.Notify
func Notify(c chan os.Signal, sig ...os.Signal)
将列举的信号传递给channel c
如果没有传递sig参数,则所有的信号都会被传递给c

signal包在传递给c的时候,不会进行阻塞,notify的调用者必须保证c有足够的空间跟得上
信号的产生速度,对于仅仅用于一个信号通知的channel,buffer size为1就够了

4. signal.



5. sync.WaitGroup
type WaitGroup struct {
        // contains filtered or unexported fields
}
A WaitGroup waits for a collection of goroutines to finish. The main goroutine calls Add to set the number of goroutines to wait for. Then each of the goroutines runs and calls Done when finished. At the same time, Wait can be used to block until all goroutines have finished.
一个WaitGroup等待一组goroutines完成,main goroutine调用add设定需要等待的goroutine的数目,
每一个goroutines在完成的时候,调用Done,同时,Wait可以用来阻塞直到所有的goroutines完成

6. sync.Mutex
type Mutex struct { // contains filtered or unexported fields }
func (*Mutx)Lock()
func (*Mutx)Unlock()

7. interface type assertion
将interface转化为具体的type
package main

import (
"fmt"
)

func print_value(val interface{}) {
if value, ok := val.(string); ok {
fmt.Printf("parm is string:%s\n", value)
} else {
fmt.Printf("parm is not a string\n")
}
}
func main() {
val := "hello,world"
print_value(val)
}

8. strings
func Split(s, sep string) []string
func Repeat(s string, count int) string
func Join(a []string, sep string) string

9. if/switch short statement
if err := file.Chmod(0664); err != nil { log.Print(err) return err }

10. switch可以没有条件
switch {
case
}

12. struct默认值
var p person
等价于
var p person = Person{}


13. 声明对各种变量的影响
var a int //a = 0
var b bool //b false
var c string // ""
var s []int // nil
var y [3]int //[0 0 0]
var m map[string]int //nil
14. 数组的初始化
myarray := [3]int{1,2,3}
var myarray1 = [3]int{1,2,3}
14. slice的三种种初始化方法
make构造
myslice := make([]string, 5, 10)
基于非匿名数组
var myarray = [3]int{1, 2, 3}
myslice := myarray[:]
基于匿名数组
myslice := []int{1,2,3}

slice赋值操作
slice1 := []string{"test1","test2"}
var slice2 []string
slice2 = slice1
测试ok

15. 结构体的初始化
type Person struct {
name string
age int
}
构造1
p := Persion{ name : "zhangsan", age : 19}
构造2
var p Person
p.name = "zhangsan"
p.age = 19
构造3
var p = Person{ name:"zhangsan", age:19}
注意field不要加引号

16. struct到interface{}的转化
func main() {
p := Person{"liudong", 19}
var v interface{}
v = p
p.name = "zhangsan"
fmt.Printf("%+v, %+v\n", p, v)
}
说明了p和v指向不同的对象,当执行v = p的时候,发生了如下动作
1. 首先在堆上分配一个新的Person大小的内存
2. copy p的内容到新的内存
3. v的指针指向新分配的内存

17. map的初始化
var m = map[string]bool {
"lisan" : true,
"zhangsan" : true,
}
make构造
m := make(map[string]bool)

17. interface{}的类型断言
var a interface{}
a1, ok := a.(string)
if !ok {
      fmt.Println("not string")
      return
}
fmt.Println("is string")

18. interface{}的type switch
switch v := a.(type) {
case int:
case string:
default:
}
  评论这张
 
阅读(130)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018