go

u013115610 · · 784 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

变长参数 nums …int

格式化:
在命令行输入 gofmt –w program.go 会格式化该源文件的代码然后将格式化后的代码覆盖原始内容(如果不加参数 -w 则只会打印格式化后的结果而不重写文件);gofmt -w *.go 会格式化并重写所有 Go 源文件;gofmt map1 会格式化并重写 map1 目录及其子目录下的所有 Go 源文件。

格式化:gofmt 也可以通过在参数 -r 后面加入用单引号括起来的替换规则实现代码的简单重构,规则的格式:<原始内容> -> <替换内容> 例如 gofmt -r ‘(a) -> a’ -w .go, gofmt -r ‘a[n:len(a)] -> a[n:]’ –w .go,

c1 := make(chan int) 无缓存 放入第一个值就会发生阻塞。
c2 := make(chant int, 1) 有缓存,大小为1.放入第二个值才会阻塞。

一个双向通道可以直接赋值给一个单向通道
命名函数只能在包级别的作用域声明,在函数域声明一个函数需要使用函数字面量/匿名函数
select在多个通道上监听IO操作,即case后面只能是IO操作。如果某个case后面的通道发生了通信,它就有可能执行。如果有多个case可以执行,会随机选择一个执行,其他的不会执行。即所有的case子句都会得到判断,再进行选择。
在执行select语句的时候,运行时系统会自上而下地判断每个case中的发送或接收操作是否可以被立即执行(立即执行:意思是当前Goroutine不会因此操作而被阻塞)

结构体字面量 通过部分或全部指定成员和其对应的值,使用键值对的形式,以逗号分隔,最后一个也加逗号。

type abc struct {
    a string
    b int64
    c bool
}

func main() {
    a := abc{
        a: "hello_world",
        b: 100,
        c: true,
    }
    fmt.Println(a) //输出结果{hello_world 100 true}
    b := &a
    fmt.Println(b) //输出结果 &{hello_world 100 true}
}

map字面量
m := map[string]int{
“alice”: 31,
}
数组字面量 a := [3]int{1, 2, 3} 或 a := […]int{1, 2, 3}

slice字面量 a := []int{1, 2, 3} 不指定长度

go追求简洁优雅,所以不支持传统的try…catch..finally这种处理异常的方式,因为这将导致一个小小的错误都抛出一个异常。在go中,使用多值来返回错误,不能使用异常来代替错误,更不能用来控制流程。在只有遇到真正异常的情况下,才使用go中的异常处理:defer/panic/recover
使用场景:抛出一个panic异常,在defer中通过recover捕获,然后处理。必须要先声明defer,在其中使用recover捕获异常。
panic时go中内置的函数,表示非常严重的不可恢复的错误。panic一般会导致程序挂掉,除非使用recover,然后打印出调用栈。

导入包,可以使用相对路径。只为了调用init,使用下划线
同一个包下的多个文件的init,按照文件名的字典顺序调用


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:u013115610

查看原文:go

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

784 次点击  
加入收藏 微博
上一篇:go基础
下一篇:golang
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传