Go基础语法印象 | 青训营笔记

87 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

1 学习方法

  • 选择 goland IDE

  • 先看入门代码熟悉

  • 学会看Go的官方文档,比如看点builtin包或常用的接口

  • 再看Go圣经准确学习

2 从语法点角度看Golang

因为熟悉C++、Java、Python,就从其他语言特征来看Go

  • 简洁性,类比Python,C+

    • 不用写分号
    • if / switch / for 当中的condition可以不用圆括号()
    • 定义变量的语法糖,冒等号 :=
    • 花括号不能省略
  • 用切片操作数组,类似Python

    • 用 slice_array[left, right] 表示数组的一个左闭右开区间
    • 负数不能用来表示从末尾索引
    • 切片操作是高效的,因为底层的操作数据一样
  • 隐式封包与解包,类似python

    • 函数可以返回多个值了

    • 接收函数返回值时也可以用多个变量接收

    • 用range循环时,对于一次迭代,可以用多个值来接收

    • 可以一行代码实现swap

      a, b = b, a
      
  • 指针操作,类似C++

    • 变量地址符 用 &
    • 地址 取 变量 用 *
    • 优化了指针操作,比如隐式地给指针取地址等
  • 用花括号数据作为初始化列表,类似C++

    括号内写法的格式类似 JSON

    mutable_len_arr := []int{2, 3, 5, 7, 11, 13} // slice literal
    
    fixed_len_arr := [6]int{2, 3, 5, 7, 11, 13} // array literal
    
    var m = map[string]Vertex{
    	"Bell Labs": {40.68433, -74.39967},
    	"Google":    {37.42202, -122.08408},
    }
    
  • fmt包,类似java

    • fmt.Println
    • fmt.Scanf
  • 函数做为值,类似java函数式接口

    • 将方法当参数传递
    • 更多扩展
  • Go 特有的

    • 变量类型后置
    • 关键字 var,make,func,chan,range
    • 结构体代替类Class
      • 隐式实现interface的约定
      • 结构体方法
        • 在struct外面定义方法
        • 使用接收器 reciver 来实现,而不是 self / this
    • 包可见性,用首字母大写约定
    • 空定义 nil,不是null
    • switch
      • 可以省略 condition
      • 隐式给 case分支 加 break
    • struct、interface 继承

3 进阶的

  • goroutine channel
  • GC
  • 反射
  • Go 和 云原生