Go 笔记和疑问?
前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请注明出处!
0. Go语言的可见性原则:
- 函数名首字母小写为 private
- 函数名首字母大写为 public
1. 传递变长参数
- 要加 ...
- 可以全部传递, 也可以传递一个切片
- 多重传递是, 值传递 ? 引用传递(slice)
2. defer 语句
- defer语句向函数注册退出调用, 当函数退出是, defer语句才会执行, 不管函数是否正常退出都会执行.
- 会保存状态吗? // 下面的调用结果是 : 0
func f(){
i :=
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",},
"student":{"roger",},
}
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中, 匿名字段会怎么识别呢? 为什么用类型能引用它们呢?
Go 笔记和疑问?的更多相关文章
- JS学习笔记-OO疑问之对象创建
问一.引入工厂,解决反复代码 前面已经提到,JS中创建对象的方法,不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码. 解决:工厂模式方法(加入一个专门 ...
- JS学习笔记-OO疑问之封装
封装是面向对象的基础,今天所要学习的匿名函数与闭包就是为了实现JS的面向对象封装.封装实现.封装变量,提高数据.系统安全性,封装正是面向对象的基础. 一.匿名函数 即没有名字的函数,其创建方式为 fu ...
- systemtap学习笔记及疑问
http://blog.csdn.net/sunnybeike/article/details/7769663
- .NET学习笔记(1)— C#学习路线图
目录 一:引言 二:.NET技术体系 三:常用工具汇总 四:学习资源汇总 五:书籍推荐 六:关于阅读技术书籍的经验 七:总结 一:引言 因为工作调整,从PHP开发零基础转型到.NET开发,前期没有 ...
- 20155325 2016-2017-2 《Java程序设计》课程总结
(按顺序)每周作业链接汇总 预备作业1:浅谈对师生关系的看法以及对未来学习生活的展望 预备作业2:学习娄老师<做中学>系列文章.自身C语言情况.Java课程目标 预备作业3:安装虚拟机情况 ...
- FrameWork数据权限浅析3之基于角色的配置表实现行级数据安全
带着上一次笔记的疑问和些许欢喜来到了混混沌沌的下午,程序员的脑子一直在不停的思索着,而多思考总是没错的,盼望着盼望着事情就有了转机,现在我们就来说一说基于角色级别的中间表机制实现行级数据安全. 由于本 ...
- 读阮一峰对《javascript语言精粹》的笔记,我有疑问。
<javascript语言精粹>是一本很棒的书籍,其中作者在附录列出了12种他所认为的javascript语言中的糟粕. 我最近开始跟读前端前辈的博客,其中读到了阮一峰的<12种不宜 ...
- 笔记7 AOP练习<有疑问>
场景描述: 核心业务:举行一场古典音乐会. 周边功能:观众入场,关闭手机.落座,觉得音乐好听时鼓掌,觉都不好听则退票.(切面) 1.编写切点(切点用于准确定位应该在什么地方应用切面的通 知)----即 ...
- 【《Objective-C基础教程 》笔记】(八)OC的基本事实和OC杂七杂八的疑问
一.疑问 1.成员变量.实例变量.局部变量的差别和联系,在訪问.继承上怎样表现. 2.属性@property 和 {变量列表} 是否同样.有什么不同. 3.类方法.类成员.类属性:实例方法.实例变量. ...
随机推荐
- 杂项: Redis
ylbtech-杂项: Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 1. 定义返回顶部 re ...
- JSch基本使用
JSch基本使用 JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等.你可以将它的功能集成到你自己的 程序中.同时该项目也提供一个J2 ...
- 用命令行方式关闭CentOS防火墙
#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT #/sbin/iptables -I INPUT -p tcp --dport 22 -j A ...
- Oracle归档与非归档模式
一.什么是Oracle归档模式 Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里.一般数据库至少要有2个联机重做日志组 ...
- MySQL Connector/NET 使用小结(踩坑之路)
背景描述 根据项目的需要,需连接MySQL获取数据. 首先,先了解一下项目的情况: 之前的代码是C#编写的的, 运行时:.NETFramework3.5. 由于项目已经部署上线,因此不能升级运行时,这 ...
- 基于Keepalived高可用集群的MariaDB读写分离机制实现
一 MariaDB读写分离机制 在实现读写分离机制之前先理解一下三种主从复制方式:1.异步复制:MariaDB默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...
- B2B,ERP,SCM
B2B: B2B电子商务平台是指一个市场的领域的一种,是企业对企业之间的营销关系.电子商务是现代B2B marketing的一种具体主要的表现形式.网商通过它将企业内部网,通过B2B网站与客户紧密结合 ...
- Julia - 函数的参数传递
不定参数 不定参数的函数也称变参函数 函数的参数可以被定义成任意个 可以在最后一个参数后紧跟省略号“...”来定义变参函数 julia> bar(x, y, z...) = (x, y, z) ...
- thinkphp5集成微信支付【公众号支付】快捷路径
1 下载官方的测试用例PHP版 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 2 到vendor目录新建weixin文件夹 ...
- [z]IE6各种不兼容问题
http://blqw1.diandian.com/post/2012-01-12/16137399 http://www.cnblogs.com/qiangspecial/archive/2013/ ...