1.可以给类型取别名,但是该类型和别名是两个不同的类型:

  type myInt int

2.go支持可变参数:args...

  0个或多个参数:func sum(args... int) sum int {}

  1个或多个参数:func sum(n int, args... int) sum int {}

3.init()函数是初始化函数,如果有全局变量,执行顺序为:全局变量——> init()——>main()

4.匿名函数:

    res := func(n1 int, n2 int) int {
return n1 + n2
}(10, 20)
fmt.Println(res)
    a := func(n1 int, n2 int) int {
return n1 - n2
}
fmt.Println(a(10, 5))

5.全局匿名函数:

var(
Fun1 = func(n1 int, n2 int) int {
return n1 * n2
}
) func main() {
b := Fun1(10, 5)
fmt.Println(b)
}

6.闭包:返回的是一个匿名函数,但是这个匿名函数引用到函数外的n,因此这个匿名函数就和n形成一个整体,构成闭包。

func makeSuffix(suffix string) func (string) string {
return func (name string) string {
if !strings.HasSuffix(name, suffix) {
return name + suffix
}
return name
}
}

7.defer:当执行到defer时,暂时不执行,会将defer后面的语句压入到独立的栈(defer栈),当函数执行完毕后,再从defer栈,按照先入后出的方式出栈:

func sum1(n1 int, n2 int) int {
defer fmt.Println("ok1 n1-", n1)
defer fmt.Println("ok2 n2-", n2) res := n1 + n2
fmt.Println("ok3 res-", res)
return res
}

8.字符串遍历,同时处理有中文的问题 r := []rune(str)

str := "hello北京"
r := []rune(str)
for i := 1; i < len(r); i++ {
fmt.Printf("字符=%c\n", r[i])
}

9.使用defer+recover来处理错误

func test(){
defer func() {
err := recover()
if err != nil {
fmt.Println("err=", err)
}
}()
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res=", res)
} func main() {
test()
}

10.自定义错误:errors.New和panic内置函数

  1)errors.New("错误说明"), 会返回一个error类型的值,表示一个错误

  2)panic内置函数,接收一个interface{}类型的值(也就是 任何值了)作为参数,可以接收error类型的变量,输出错误信息,并退出程序

func readConf(name string) (err error) {
if name == "config.ini" {
return nil
} else {
return errors.New("读取文件错误...")
}
} func test() {
err := readConf("config.ini")
if err != nil {
panic(err)
}
fmt.Println("test()继续执行...")
} func main() {
test()
}

最新文章

  1. Ueditor上传图片后自定义样式类名
  2. 整理BOM时写的关于拆分单元格的VB代码
  3. 烂泥:学习ubuntu远程桌面(一):配置远程桌面
  4. php 获取中文字符拼音首字母
  5. Eclipse中一些快捷键
  6. 把之前写的几个项目放到了github上
  7. Python文本处理(1)
  8. android 系统dialog的应用
  9. css 修改默认滚动条样式
  10. Java限制可以重入次数的锁
  11. javascript history.go(-1) 返回刷新不起作用
  12. urllib.parse.quote
  13. Feature Selection Can Reduce Overfitting And RF Show Feature Importance
  14. 配置MAVEN环境变量
  15. LR 测试http协议xml格式数据接口
  16. How to make an HTTP request 异步 JavaScript 和 XML
  17. ASYNC PROGRAMING IN JAVASCRIPT[转]
  18. js中的事件委托或是事件代理
  19. 聊聊iOS中TCP / UDP 协议
  20. TMG 2010 为HTTPS协议添加非标准端口(443)

热门文章

  1. 8. String to Integer (atoi) ---Leetcode
  2. SSM整合小结
  3. ML_Review_SVM(Ch9)
  4. Mininet系列实验(一):Mininet使用源码安装
  5. Link static data in sql source control
  6. vue-cli项目中使用全局过滤器及传参(日期格式化)
  7. word 2010中设置默认粘贴为 只保留文本粘贴【visio也适用于快捷键方式】
  8. linuxan安装redis出现Newer version of jemalloc required错误
  9. PHP实现简单留言板
  10. [转]Postgres-XL 10r1英文文档