标识符、关键字、命名规则
标识符:
- 由字母、下划线、数字组成
- 以字母或者下划线开头
- 区分大小写
关键字:
系统中有特殊含义的
命名规范:
- 结构体:驼峰式MapReduce
- 接口:以er结尾
- 单元测试:
- 文件命名:example_test.go
- 测试用例的函数名称:TestExample()
变量:
声明:
- 变量声明之后必须使用
- 声明格式:var name type
- 批量声明
var(
• name string
• age int
)
初始化
语法:
- - var name string = "hello"
- var age int = 20
类型推断:
根据初始化的值推导出类型,不用加上类型名的初始化
- var name = "hello"
批量初始化
- var name,age,b = "he",20,true
短变量声明::=
- 函数内部,外部不可以
- 省略var和类型
- func main(){
name := "hello"
age := 30
b := true
}
匿名变量:
- 不起名字
return "hello",30 - 用下划线_表示不使用的变量
- name,_ := GetNameAndAge()
常量:
关键字:const
iota:
被认为是一个可以被编译器修改的常量,默认的开始值是0,每调用一次加1,遇到const关键字时被重置为0。
- 省略:_或者自定义一个其他常量(不用iota)
数据类型:
- 数字类型
- bool类型
- 字符串
- 派生:指针、数组等
判断一个变量的数据类型:%T
- fmt.Printf("%T\n",var)
布尔类型:
- 布尔表达式:
var age = 16
ok:= age > 18
fmt.Println(ok)
- 不能用0或者非0表示布尔类型
var i = 1
if i {//错误的
}
数字类型:
- go语言中没有float类型,只有float32和float64,没有double类型
- int类型
- int32 int 64有符号
- uint32 无符号
字符串
是一组字符数组[]byte
创建方式:
- 双引号
s := "hello"
- 反引号
var s string = `
line 1
line 2
line 3
`
字符串连接:
- +号
var s1 = "hello"
var s2 = "world"
var s3 = s1 + s2
- 格式化输出:fmt.Sprintf()
var s1 = "hello"
var s2 = "world"
var msg = fmt.Sprintf("%s %s",s1,s2)//%s与%s之间的符号表示s1与s2的连接符是什么
- strings.Join()
var s1 = "hello"
var s2 = "world"
var s4 = strings.Join([]string{s1, s2}, " ")
//把要拼接的字符串传进一个字符串数组,然后再传一个字符串之间的连接符,从而进行连接
- buffer.WriteString()
数据类型转换
go中的数据类型转换时,必须显示的转换
var n1 int32 = 10
var n2 int64
n2 = int64(n1) + 20 //强制转换
fmt.Printf("n2: %v\n", n2)
go语言的格式化输出
占位符:
普通占位符:
- %v 默认格式
- %#v Go的语法表示
- %T 值的类型
- fmt.Printf("%T\n",a)
- %b 二进制
- %c 相应的Unicode码点所表示的字符
- Unicode码可以容纳100多万个符号,将各国文字都转换为二进制,是一个字符集
- UTF-8是一种编码方式,常用的字符用短编码,不常用的用长编码。例如英文字母是1个字节,中文一般是2~3个字节
- GBK是个国标的编码方式
运算符
- 自增自减
- 与其他语言不同,go中的++和--不参与运算
var a = 1
var b = a++//错误写法,自增自减不能赋值
流程控制
循环:
for循环:2种,没有其他语言的while / do while
- for 循环
- for range
if语句
- 判断语句不需要加括号
- 即使只有一句,也要加大括号
- 左括号与 if/else在同一行
- 初始化语句可以在if语句中,注意作用范围
if age := 20; age > 18{
fmt.Println("成年")
}
for range
- 针对数组、切片、字符串,返回索引和值
- map返回键和值
- 通道返回通道内的值
break
可以用在循环、switch、select中
- 在循环中可以设置内外层循环的标志,跳出外层循环
- switch语句中,默认每个case后面带有一个break,匹配成果则不会向下执行,而是跳出switch;但是可以使用fallthrough强制执行后面case的代码,直到遇到下一个break
continue
只能用在循环中,结束这一次循环,进行下一次循环
goto
可以跳转到任何语句
for i := 0; i < 10; i++{
if(i == 5){
goto END
}
}
END:
fmt.Println("END……")