一、Go语言介绍
1. 介绍、优势
- 部署简单
- 静态语言,但有动态语言的感觉
- 开发效率高 GC(内存垃圾回收机制)
- 支持并发
- 含很多第三方库
2. 用来做什么
- 服务器编程
- 分布式系统
- 网络编程
- 内存数据库
- 云平台
二、基础类型
1. 命名
- 字母或下划线开头
- 关键字不能用于自定义名字
2. 变量:
1). 变量声明
- 变量声明了必须要使用
- 只是声明没有初始化的变量,默认为0 同一个{}里
- 声明的变量名唯一
- 可以同时声明多个变量
2). 变量初始化:
- 声明变量时,同时赋值
3). 自动推导类型
- 必须初始化,通过初始化的值来确定类型
c := 30
- 已经有变量c后,不能再新建一个变量c
- 例:再次初始化声明c := 20
4). 多重初始化
a, b, c := 10, 20, 30
5). 变量赋值
- 可以多重赋值
6). 匿名变量
- _ 是特殊的变量名,任何赋予它的值都会被丢弃
3. 常量
- 程序运行期间,不可以改变的量
- 常量不允许修改
- 常量自动推导类型只要=,不需要:=
1). 多个变量或常量定义
- 变量定义
var ( a int b float 64 ) a, b = 10, 2.11 fmt.Println("a = ", a) fmt.Println("b = ", b)
- 常量定义
const ( i int = 10 j float64 = 2.22 // 可以自动推导类型 // i = 10 // j = 2.22 ) fmt.Println("i = ", i) fmt.Println("j = ", j)
2). iota枚举
- iota常量自动生成器, 每隔一行,自动累加1
- iota给常量赋值使用
- iota遇到const,重置为0
- 可以只写一个iota
- 如果是同一行,值都一样
4. 基础数据类型
1). 布尔类型
- 没有初始化时的初始值为false
// 声明变量
var a bool
a = false
// 自动推导的两种方法:
var a = false
b := false
2). 整型
3). 浮点型
- 默认值为float64
- float64存储小数比float32更准确
4). 字符类型
- 支持两种字符类型
- (1). byte
- 是uint8的别名
- 代表utf-8字符串的单个字节的值
- (2). rune
- 代表单个unicode字符
- (1). byte
- ascii码
- 65 ‘A’
- 97 ‘a’
- 10 ‘\n’ 换行
5). 字符串
- 内建函数:len()
- 字符和字符串区别
- 字符:单引号
- 往往只有一个字符,转义字符除外
- 字符:串双引号
- 一个或多个字符组成
- 字符串都是隐藏了一个结束符,’\0’
var ch byte var str string ch = 'a' str = "a" // 由'a'和‘0’组成了一个字符串 str = 'hi yyy' fmt.Printf("str[0] = %c, str[1] = %c', str[0], str[1])
- 字符:单引号
6). 复数类型
- 复数实际上由两个实数构成,一个表示实部, 一个表示虚部
-
real()
-
imag()
var t complex128 // 声明 t = 2.1 + 3.14i // 赋值 fmt.println("t = ", t) // 自动推导类型 t2 := 3.2 + 2.3i // 通过内建函数取实部、虚部 fmt.Println(real(t2), imag(t2))
-
5. 输入的使用
var v int
fmt.printf("请输入一个整型: ")
// 两种方法:
fmt.Scanf("%d", &v)
fmt.Scan(&v)
6. 类型转换
- 允许隐式转换,所有类型转换必须显式声明
- 转换只能发生在两种相互兼容的类型之间
7. 类型别名
type bigint int64 //int64类型改名为bigint
var x bigint = 100
type (
myint int //int改名为myint
mystr string //string改名为mystr
)
三、运算符
- Go语言的bool类型和int不兼容
四、 流程控制
1. 选择结构
1). if … .else
- 支持初始化表达式, 初始化和条件表达式用分号分隔
- 左大括号必须和条件语句或else在同一行
- if … else if … else
2). switch语句
- go里的switch相当于每个case后带有break,匹配成功后跳出整个switch
- 可以用fallthrough强制执行后边的case代码
2. 循环语句
1). for
sum := 0
// 初始条件; 判断条件是否为真; 如果为真,执行循环体,为假跳出循环体
for i := 1; i <= 100; i++ {
sum = sum + i
}
2). range
- 迭代
- 返回两个值,第一个返回值是元素的数组下标,第二个返回值是元素的值
str = 'hello' for i , data := range str { fmt.Printf("str[%d]=%c\n, i, data) } for i := range str { //第二个返回值默认丢弃 fmt.Printf("%c\n", str[i]) }
3. 跳转语句
1). break和continue
- break
- 跳出当前循环
- continue
- 跳过本次循环
2). goto
- 用goto跳转必须在当前函数内定义的标签
五、其他:
1. 导入包必须要使用
2. 赋值前必须先声明变量
3. 字符是单引号
4. Println和Printf区别
- Println:一段一段处理,自动加换
- Printf:格式化输出
fmt.Println(“a = %d\n”, a)
fmt.Printf(“a = %d, b=%d”, a, b)
- %c: 以字符方式打印
- %d: 以整型方式打印
- %s: 以字符串打印
- %f: 以标准计数法表示的浮点数或复数值
- %T: 使用Go语法输出的值的类型
- %v: 使用默认格式输出的内置或自定义类型的值