• Go 笔记和疑问?


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

    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中, 匿名字段会怎么识别呢? 为什么用类型能引用它们呢?

  • 相关阅读:
    icmp隧道手工操作
    Volatility2.4以上版本及fmem使用指南
    服务器解析漏洞总结
    Docker搭建独立服务器
    shell--(二)变量、字符串、数组、注释
    shell--(一)运行示例
    mysql 批量更新,没有就插入
    go 系统监控 cpu、内存等指标
    监控
    maven安装配置 每次都百度,麻烦
  • 原文地址:https://www.cnblogs.com/roger9567/p/4846012.html
Copyright © 2020-2023  润新知