Go 笔记和疑问?

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

0. Go语言的可见性原则:

  - 函数名首字母小写为 private

  - 函数名首字母大写为 public

 

1. 传递变长参数

  - 要加  ... 

  - 可以全部传递, 也可以传递一个切片 

  - 多重传递是, 值传递 ? 引用传递(slice)

 

2. defer 语句

  - defer语句向函数注册退出调用, 当函数退出是, defer语句才会执行, 不管函数是否正常退出都会执行.

  - 会保存状态吗?  // 下面的调用结果是 : 0

func f(){
    i := 0
    defer fmt.Println(i) 
    i++
    return
}

  - defer 用于清理工作很方便:  将关闭释放资源和打开资源物理位置放在一起. 

srcFile, err := os.Open("MyFile")
defer srcFile.Close()

 

4. Go 语言的异常恢复机制

  - panic() 引发错误(类似 throw/raise)

    - panic() 为内置函数, 可以中断原有的控制流程, 执行函数中的延迟函数, 然后进入异常流. 

  - 在defer语句中调用recover()捕获错误.

  - 如何捕获多个/多种异常? 

 

5. Go中使用struct来实现面向对象

  - 可以使用new() 来创建一个结构体对象,并为其分配存储空间. 返回指向对象的指针.

  - 都是用 点号来访问成员.

 

6. struct的一些性质

  - 嵌入式结构 :  定义字段的时候嵌入它对应的类型,而这个类型也是结构体

  - 嵌入式结构直接定义结构体变量:   

    -  可以在嵌入是结构的基础上直接给变量赋初值

    - 可以直接使用  new(struct{})  赋值给一个变量.

  - 嵌入式结构定义Map的value, 可初始化.

map1 := map[string]struct{
    name string
    age int
}{
    "teacher":{"roger",21},
    "student":{"roger",22},
}
fmt.Println(map1)

   - 匿名字段

    - 支持只提供类型, 而不写字段名的定义方式, 就是匿名字段, 匿名字段将结构体和指针嵌入到另一个结构体中, 但是不提供字段名.

    - 匿名字段的嵌入不是继承, GO中没有继承的概念.

    - 结构体中的正常字段/匿名字段/多级匿名字段等都是用点号进行访问. 查找是从外层向里层.

    - 匿名字段可以有多种形式:  struct/自定义(i.e. type skills [] string )/内置数据类型(int) , 除了该结构体本身, 其他所有的内置数据类型和自定义类型都可以.

    - 匿名字段的重名, 访问的时候从访问外层的字段, 可以通过加字段类型前缀来访问匿名字段内的重名字段.

    - 支持匿名类型指针.

type people struct {
    name string
    sex bool
}
type teacher struct{
    people //匿名结构体中的字段
    department string
}
// 初始化匿名字段
t := teacher{peopel{"Roger",true},"Computer Science"}

  - 

7.为什么下面能执行交换?

func (recv* cor)swap(){
    var temp int
    temp,recv.x,recv.y = temp,recv.y,recv.x
    fmt.Println(*recv)
}

 

8. 在struct中, 匿名字段会怎么识别呢? 为什么用类型能引用它们呢?

 


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

本文来自:博客园

感谢作者:roger9567

查看原文:Go 笔记和疑问?

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

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