go语言语法基础 | 青训营笔记

116 阅读2分钟

go语言语法基础 | 青训营笔记

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

格式规范

  1. 声明变量/函数时类型后置
  2. 打括号不能单独一行
  3. 一行表示一句结束,可以不加分号
  4. 吃掉(),if、for后面的条件不用括号括起
  5. 通过变量名首字母的大写写区分访问权限,大写外包可引用,小写本包可用

import ""/{"",""}

import "fmt" import {"fmt","math"}`

变量的声明及定义

  1. go变量声明时数据类型是后置的或是能由后面的推出

    • var hello string
    • var hello = "hello world!"
    • hello := "hello world"
  2. 数组的长度是确定的或是能推出的

    • var arr [8]int
    • var arr = [...]int{1,2}
    • arr := [...]int{1,2}
  3. 结构体类似数组

    • arr := typename{memberValue1,,}
  4. map类似,但直接声明得到的是空nil

    • var mp map[int]int //nil
    • mp = make(map[int]int) //make构造map
  5. 切片声明和数组类似,但[]内不写长度

    • var slc []int //但只声明,无实例
    • slc- make([]int,len,cap)
  6. 函数声明同样后置类型

    func name(a int,b,string) int {}

  7. 结构体声明同样后置类型

    type name struct {n1 type1,n2 type2,,,}

  8. 有类似py的多重赋值

    k,v := {,}

循环与cpp和py的相似与不同

  1. go用for实现了cpp的for和while
    • for init;conditon;post {}
    • for conditon {}
    • for {}
  2. go用for和内置操作range实现py的for i in arr
    • for ind:val := arr {}//可遍历数组,map,切片,通道等

结构体

  1. 无论是一般变量还是指针变量,都是通过.访问成员
  2. go没有类的层次,但是可以通过结构体接受函数构成成员函数
    • func (t structName) (){}
    • func (t *structName) (){} //可修改结构体里的值
  3. 初始化成员变量时按先后赋值,也可以按变量名赋值

    a1 := name{e1,e2,,,} a2 := name{nmbName1:e1,nmbName3:e2}

函数

  1. 可返回多个值

    func name() {type1,type2} {}

  2. 可作匿名函数进行值传递

    f := func(){}`

  3. 匿名函数作闭包

其他

  1. map的使用与cpp类似,但要用make创建实例
  2. 切片的使用与py的数组类似,但要用make创建实例
    • slc = append(alc,e)
    • //append超过容量时会新建一个切片