基础认知
-
注释
// 单行注释
/*
多行注释
*/
-
25个关键字
-
36个预定义标识符
-
空格
变量的声明必须用空格隔开
var age int
-
变量的声明
只声明变量,不赋值将返回各类型的空值
数值类型(包括complex64/128)为 0
布尔类型为 false
字符串为 ""(空字符串)
以下几种类型为 nil:
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
所以说,go中的空并不能直接等于nil
-
自动推导类型
var i = 1
fmt.Printf("%T",i) >>> int
i := 1
fmt.Printf("%T",i) >>> int
这两种方式是相同的
-
多变量声明
//类型相同多个变量, 非全局变量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要显示声明类型,自动推断
vname1, vname2, vname3 := v1, v2, v3 // 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误
-
常量
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。
显式类型定义: const b string = "abc"
隐式类型定义: const b = "abc"
常量还可以用作枚举:
const (
Unknown = 0
Female = 1
Male = 2
)
数字 0、1 和 2 分别代表未知性别、女性和男性。
-
运算符
算术运算符
var a = 10
a--
a >> 9
a++
a >> 10
-
关系运算符
跟python差不多
注意,只能同类型的进行关系比较,如果int 类型与string类型进行比较,编译不过,提示 (mismatched types int and string)
-
逻辑运算符
&& >> and
|| >> or
! >> 非 (!true) >>false
-
位运算符
异或的理解:按位异或运算符,参与运算的两个二进制对应位进行异或,两数位相同,异或得0,两数位不同时,异或得1.
-
赋值运算符
-
其他运算符
-
条件语句
go没有三目运算符,所以不支持?:形式的条件判断
-
swithch
匿名变量
就是没有名字的变量,在使用多重赋值的时候,如果不需要在左侧接受变量,就可以使用匿名变量
函数名还可以有空格?