分享
  1. 首页
  2. 文章

Go 笔记和疑问?

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

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

关注微信
2431 次点击
2 回复 | 直到 2025年05月03日 06:00:07
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏