Go 语言入门指南:基础语法| 青训营

77 阅读3分钟

基础语法

go是强类型语言,字符串是内置类型,可以通过“+”拼接,运算符与C/C++类似。

变量&常量

变量
  • 标识符只能由字母和下划线开头,且区分大小写。任何命名需要对外暴露的必须以大写命名开头。1690340311174.jpg
  • var name=表达式(var a=1/true/“hello world”) 变量名1,变量名2...=表达式1,表达式2...批量初始化。
  • 函数内才可以短变量申明,name :=表达式(f:=float32(e)。
  • 变量必须声明才能使用,且同一作用域内不能重复声明,变量声明后必须使用
  • 声明变量语法 var identifier type,或者var(多个变量)批量声明。
  • 匿名变量1690341753340.jpg
常量
  • const constName [type]=value,也可以批量声明。
  • 常量const与之类似,go中常量没有固定类型,根据上下文自动确定,type可以省略。
  • iota,可修改的常量,默认值为1,每调用一次加1,遇到const被重置为0.通过-可以跳过一个值,中间声明也可以跳过。

关键字

1690293090534.jpg

数据类型

布尔类型

逻辑表达式不能用0或非0表达ture或false。

数字类型

没有float、double类型,只有double64/double32.

字符串

字符串连接

  • “=”
  • fmt.springf("%s,%s,s1,s2)
  • strings.join([]string{s1,s2},",")
  • buffer.WriteString() 转义字符 image.png 字符串的切片,和python基本类似。

循环/分支语句

  • if-else同样变量名后无括号,switch不跑其他分支。
  • for循环 for 初始语句;条件表达式;结束语句{循环体语句}
  • goto通过标签进行代码间的无条件跳转

数组

  • var variablename [size]variabletype
  • 数组初始化 variablename:=[...]variabletype{}

切片

  • 切片可变长度的数组,具有相同元素的序列,操作与python类似
  • 声明切片 var identifier []type / name:=make([]type,len) / make([]T,length,capac ity),与数组区别在不用添加size
  • 直接初始化 name:=[]type{值}/利用数组或数组切片表达式初始化。
  • 使用append(操作数组,添加元素)
  • 删除索引为x的元素s:=append(s[:x],s[x+1:]...)

map

  • 声明 var mapvariable map[key_type]valuetype
  • 创建name:=make(map[key type]value_type)
  • 写入map,name:= map[key_type]valuetype{} /[key]=value
  • delete删除键值对

函数

  • 函数不允许重载,不能再嵌套函数(可以嵌套匿名函数),可以传递给一个变量和另一个函数,可以返回一个函数
  • 传参时传的是拷贝副本
  • 使用时必须先定义
  • func functionname(参数列表)(return type){函数体},参数和返回值都可以是函数
  • 函数闭包
func cal(base int) (func(int) int, func(int) int) {  
add := func(a int) int {  
base += a  
return base  
}  
sub := func(b int) int {  
base -= b  
return base  
}  
return add, sub  
}  
func main() {  
add, sub := cal(100)  
//x := add(200)  
//y := sub(50)  
fmt.Printf("%v\n", add(200))  
fmt.Printf("%v\n", sub(50))  
}
  • defer语句,先定义的后执行。
  • init函数优先于main函数之前自动执行,没有输入函数与返回值,变量初始化先于init,init先于mian。

指针

  • var ptr *type,不能进行偏移和运算。
  • 指向数组的指针 var ptr [max]*int
  • 类型定义 type NewType type
  • 类型别名 type NewType=type