如有笔误,欢迎留言指正或讨论!

一、了解Golang

1.1、为什么用go?

Go是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。其次就和其它常用几个编程语言做个比较,如下:

vs 一次编码 一次编译 无需运行环境 没有虚拟损失 无需自行处理GC 面向对象 并发能力
C
C++
Java
Golang

1.2、go用途

优秀的Go项目:docker(虚拟化)、kubernetes(管理虚拟化)、etcd(强一致的kv数据库)、codis(redis集群的解决方案)、 falcon(小米公司开源的系统检测)、bilibili、tidb(上海开发强大的关系型数据库)

二、25个关键字

  • 关键字
    func 定义函数                                interface 定义接口
    select 监听和channel有关的IO操作               switch 选择结构
    case 选择结构标签                             break 跳出循环
    default 选择结构体的默认选项                    chan 定义channel
    continue 跳过本次循环                         const 定义常量
    defer 延迟执行(先入后出)                       go 并发执行(定义协程)
    map 定义map                                  struct 定义结构体
    if 选择结构                                   else 选择结构
    goto 跳转语句                                 packagefallthrough 强制执行后面的case代码              range 从slice、map等结构中取出元素
    type 定义类型                                 for 循环
    import 导入包                                 return 返回
    var 定义变量(a:=1 定义变量简写)                            

三、36个预定义标识符

  • 内建常量
    true        false       iota:常量计数器        nil
  • 内建类型
    整数有符号:int   int8    int16   int32   int64
    
    整数无符号:uint  uint8   uint16  uint32  uint64  uintpat
    
    浮点类型:float32     float64     
    
    复数:complex64   complex128
    
    数据类型:bool    byte    rune    string      error
  • 内建函数
    make:堆上分配内存,初始化内存,返回引用类型本身
    new:堆上分配内存,没有初始化内存,返回指向类型的指针
    len:返回参数的长度
    cap:返回参数的容量
    append:在原切片的末尾添加元素
    copy:复制切片到另一个切片
    close:用于关闭通道
    delete:用于删除集合的某个元素
    complex:创建一个复数
    real:获取一个复数的实部
    imag:获取一个复数的虚部
    painc:程序崩溃抛出错误
    recover:捕获程序中抛出的panicrecover函数只能在defer延迟函数中调用

四、数据定义及错误处理

4、1 各个数据类型定义

  • 变量、常量、函数
    //定义变量
    a := 1
    var a int
    var (
        a int
        b sting
    )
    
    //定义常量
    const a = 1
    
    //定义函数
    func 函数名(参数)(返回值){
        函数体
    }
  • 数组及切片(Slice)
    //定义数组
    var arr [10]int
    
    //定义切片
    var arr_s []int
    
    //两者的去区别:
    //1、切片值传递是指针传递,是引用类型;数组值传递是将整个数组拷贝一份,是值类型
    //2、切片称之为动态数组;数组是内置类型,是一组同类型的集合,初始化长度固定无法修改
  • 集合(Map)
    //注意:map是k/v键值对的无序集合,是引用类型,必须初始化才能使用!
    
    //KeyType:表示键的类型
    //ValueType:表示键对应的值的类型
    var map[KeyType]ValueType
    
    make(map[KeyType]ValueType, [cap])
    //cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量,当你的容量超过时会自动扩充
    data := make(map[int][sting], 3)
    
    //遍历:range
    //读取值:data[2]
    //删除值:dalate(data, 2)

4、2 捕获错误处理

  • defer+recover
    // 利用 defer+recover 来获取错误,defer后加上匿名函数的调用
    defer func() {
        err := recover()
        if err != nil {
            fmt.printn("捕获到错误了, err = ", err)
        }
    }()