Go语言基础|青训营笔记

139 阅读3分钟

这是我参与「第三届青训营-后端场」笔记创作活动的的第1篇笔记

第一次接触Go语言,准备这两天快速上手,快速上手一门语言应该速度过一遍大致的语法与数据结构,在windows上下载了GoLand,在ubuntu上配置了vscode,接下来看一看相关小项目如何写。

基础语法

这里主要参考了上课的PPT与Go语言圣经

基础结构

与java一样,有package的概念,通过import()导入,不过包名都是字符串格式,导入的包都在自己的源码头部做了package声明,不同路径相同包名导入需要重命名(也可简化冗长的包名),还有匿名导入,go get下载包等特性,等以后用到再详细看。

变量与函数

变量

由表达式自行判断类型,有整型(int8/32/64)、浮点、字符串(string)、甚至还有复数(可见google野心,部署科学计算领域?),类型转换应该还有一些坑,留给以后慢慢踩了

var 变量名字 类型 = 表达式
    :=可做简短声明

函数

函数名、形式参数列表、返回值列表(可省略)以及函数体。个人感觉有点像python,但是可以多个返回值,这个还是第一次见,感觉对err判断很友好

func main() {}

复合数据类型

数组:
   var a [3]int,初始值为0
   r := [...]int{99: -1}(100个元素前99个为0,第100个为-1)
   可以用 == 比较,为真时类型长度都一样
   可用指针
切片(slice):
    一般写作[]T,有append函数,panic扩容,不能==比较
    估计多线程会有一系列问题,以后慢慢看
哈希表(map):
    可写为map[K]V,key必须是支持==比较运算符的数据类型
    make函数创建:ages := make(map[string]int)
    或者
        ages := map[string]int{
          "alice":   31,//可省略,即空map
        }
    通过下标形式访问 ages["alice"] = 32//失败返回0
    不能对元素取址操作
    _ = &ages["bob"] // compile error: cannot take address of     map element
    delete函数删除delete(ages, "alice")
    遍历:
   for name, age := range ages {
    fmt.Printf("%s\t%d\n", name, age)
   }
结构体(struct):
   type Employee struct {}
   可以指针
   可以==比较
   可以声明成员类型,而不写其名字,叫匿名成员,粗略过一遍,这部分以后用到了再仔细看
JSON:
  原生的Go语言对json序列化做了根本上的支持,基本类型可简单转化为JSON,字符串到字符串或值的映射
HTML模板:
    通过写模板来规范输出,以后用到了再仔细看

方法

在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。 可以基于指针避免大对象拷贝或者更新变量。 这部分目前用得太少了,感觉概念还是有点新的,日后加强

接口

为了实现多态 或声明类型,或组合其他接口,或完成内嵌,如下:

type ReadWriter interface {
    Reader
    Writer
}

第一篇笔记暂时写到这里,语言的学习还要伴随着大量的练习,顺便感慨一下字节给自己的掘金平台用这种方式引流哈哈~不过有一说一,这个写文章的编辑器用着挺顺手的。