前言: 本文是学习<<go语言程序设计>> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请注明出处!

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

  - 函数名首字母小写为 private

  - 函数名首字母大写为 public

1. 传递变长参数

  - 要加  ...

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

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

2. defer 语句

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

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

  1. func f(){
  2. i :=
  3. defer fmt.Println(i)
  4. i++
  5. return
  6. }

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

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

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

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

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

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

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

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

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

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

6. struct的一些性质

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

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

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

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

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

  1. map1 := map[string]struct{
  2. name string
  3. age int
  4. }{
  5. "teacher":{"roger",},
  6. "student":{"roger",},
  7. }
  8. fmt.Println(map1)

  - 匿名字段

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

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

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

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

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

    - 支持匿名类型指针.

  1. type people struct {
  2. name string
  3. sex bool
  4. }
  5. type teacher struct{
  6. people //匿名结构体中的字段
  7. department string
  8. }
    // 初始化匿名字段
    t := teacher{peopel{"Roger",true},"Computer Science"}

  -

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

  1. func (recv* cor)swap(){
  2. var temp int
  3. temp,recv.x,recv.y = temp,recv.y,recv.x
  4. fmt.Println(*recv)
  5. }

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

Go 笔记和疑问?的更多相关文章

  1. JS学习笔记-OO疑问之对象创建

    问一.引入工厂,解决反复代码 前面已经提到,JS中创建对象的方法,不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码. 解决:工厂模式方法(加入一个专门 ...

  2. JS学习笔记-OO疑问之封装

    封装是面向对象的基础,今天所要学习的匿名函数与闭包就是为了实现JS的面向对象封装.封装实现.封装变量,提高数据.系统安全性,封装正是面向对象的基础. 一.匿名函数 即没有名字的函数,其创建方式为 fu ...

  3. systemtap学习笔记及疑问

    http://blog.csdn.net/sunnybeike/article/details/7769663

  4. .NET学习笔记(1)— C#学习路线图

    目录 一:引言 二:.NET技术体系 三:常用工具汇总 四:学习资源汇总 五:书籍推荐 六:关于阅读技术书籍的经验 七:总结   一:引言 因为工作调整,从PHP开发零基础转型到.NET开发,前期没有 ...

  5. 20155325 2016-2017-2 《Java程序设计》课程总结

    (按顺序)每周作业链接汇总 预备作业1:浅谈对师生关系的看法以及对未来学习生活的展望 预备作业2:学习娄老师<做中学>系列文章.自身C语言情况.Java课程目标 预备作业3:安装虚拟机情况 ...

  6. FrameWork数据权限浅析3之基于角色的配置表实现行级数据安全

    带着上一次笔记的疑问和些许欢喜来到了混混沌沌的下午,程序员的脑子一直在不停的思索着,而多思考总是没错的,盼望着盼望着事情就有了转机,现在我们就来说一说基于角色级别的中间表机制实现行级数据安全. 由于本 ...

  7. 读阮一峰对《javascript语言精粹》的笔记,我有疑问。

    <javascript语言精粹>是一本很棒的书籍,其中作者在附录列出了12种他所认为的javascript语言中的糟粕. 我最近开始跟读前端前辈的博客,其中读到了阮一峰的<12种不宜 ...

  8. 笔记7 AOP练习<有疑问>

    场景描述: 核心业务:举行一场古典音乐会. 周边功能:观众入场,关闭手机.落座,觉得音乐好听时鼓掌,觉都不好听则退票.(切面) 1.编写切点(切点用于准确定位应该在什么地方应用切面的通 知)----即 ...

  9. 【《Objective-C基础教程 》笔记】(八)OC的基本事实和OC杂七杂八的疑问

    一.疑问 1.成员变量.实例变量.局部变量的差别和联系,在訪问.继承上怎样表现. 2.属性@property 和 {变量列表} 是否同样.有什么不同. 3.类方法.类成员.类属性:实例方法.实例变量. ...

随机推荐

  1. Maven构建项目速度太慢的解决办法 Maven 调试

    Apache Maven是当今非常流行的项目构建和管理工具,它把开发人员从繁杂的项目依赖关系处理事务中解放出来,完全自动化管理依赖问题.在Web应用开发过程中,通常我们会用到maven的archety ...

  2. webView放弃capture()截图的替代方法

    float scale = webView.getScale(); height = (int) (webView.getContentHeight() * scale + 0.5); bitmap ...

  3. linux 下查找文件或者内容常用命令

    转自:http://www.cnblogs.com/sunleecn/archive/2011/11/01/2232210.html whereis <程序名称>查找软件的安装路径-b 只 ...

  4. POJ-2282题解&数位DP总结

    一.题意 给定一个区间[a, b](注意输入的时候可能a > b,所以,在数据输入后,要先比较a和b,如果a > b,交换a和b的值),统计这个区间里面,数位上有多少个0.多少个1.--. ...

  5. 【CVE】CVE-2018-4304 Apple多个操作系统函数拒绝服务漏洞

    TextImpact: Processing a maliciously crafted text file may lead to adenial of serviceDescription: A ...

  6. App切图命名规范

    转自:http://www.uisdc.com/slice-rename-in-ui-design(略有修改) 关于切图命名的规范,我个人觉得关键是在于团队能够有一个统一的规则,所有成员严格遵守并且和 ...

  7. NetworkStream.write只能使用一次,后面再使用无效

    public delegate void ShowMessageMethod2(TcpClient tc); private void ShowMessage2(TcpClient tc) { Str ...

  8. DOS口令启用停用的管理员密码

      运行,输入cmd,但是不回车,鼠标右键cmd那个   快捷方式,有个以管理员身份运行,进入的dos是     c:\windows\system32>   输入   c:\windows\s ...

  9. iOS开发基础控件--UISegmentedControl

    UISegmentedControl全局外观设置 分段控件是我们常用的控件之一,今天把具体用法总结了下: 1.初始化UISegmentedControl [plain] view plaincopy ...

  10. Linux环境下安装myeclipse+破解

    1.下载myeclipse安装包,下载myeclipse破解文件. 2.修改myeclipse-pro-2014-GA-offline-installer-linux.run的权限 sudo chmo ...