Go学习笔记
前言
Go语言相关基础知识的学习,主要参考菜鸟教程上的相关知识。
Go语言结构
Go基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句、表达式
- 注释
1 | package main |
几点注意:
- 一般来说启动后第一个执行的是main函数,但如果有init()函数则会先执行该函数
- 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )
- “{“符号不能单独放在一行
- 文件夹名、文件名和包名没有直接关系,但同一个文件夹下的文件只能有一个包名
1 | [Running] go run "d:\VScode\Go\project\hello\main\main.go" |
Go语言基础语法
行分隔符
一行即为一个语句,每个语句不需要像C一样添加”;”,这些工作由Go编译器完成。如果打算将多个语句放在同一行,则需要用;区分
关键字
保留字:
预定义标识符:
格式化字符串
Go语言使用fmt.Sprintf格式化字符串并赋值给新串,一般和Print搭配使用:
1 | var stockcode=123 |
Go语言数据类型
- 布尔类型
- 数字类型
- 字符串类型
- 派生类型
- 指针类型(Pointer)
- 数组类型
- 结构化类型(struct)
- Channel 类型
- 函数类型
- 切片类型
- 接口类型(interface)
- Map 类型
数字类型
序号 | 类型和描述 |
---|---|
1 | uint8 无符号 8 位整型 (0 到 255) |
2 | uint16 无符号 16 位整型 (0 到 65535) |
3 | uint32 无符号 32 位整型 (0 到 4294967295) |
4 | uint64 无符号 64 位整型 (0 到 18446744073709551615) |
5 | int8 有符号 8 位整型 (-128 到 127) |
6 | int16 有符号 16 位整型 (-32768 到 32767) |
7 | int32 有符号 32 位整型 (-2147483648 到 2147483647) |
8 | int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
浮点型
序号 | 类型和描述 |
---|---|
1 | float32 IEEE-754 32位浮点型数 |
2 | float64 IEEE-754 64位浮点型数 |
3 | complex64 32 位实数和虚数 |
4 | complex128 64 位实数和虚数 |
Go语言变量
变量的声明一般用var,可以一次声明多个变量
1 | var identifier1, identifier2 type |
变量声明
- 第一种,指定变量类型,如果没有初始化,则变量默认为零值。
- 第二种,根据值自行判定变量类型。
- 第三种,如果变量已经使用 var 声明过了,再使用 *:=* 声明变量,就产生编译错误,格式:
1 | var intVal int |
多变量声明
1 | //类型相同多个变量, 非全局变量 |
注意事项
如果声明了一个局部变量却没有在相同的代码块中使用它,会得到编译错误,例如下面这个例子当中的变量 a:
1 | package main |
但是全局变量是允许声明但不使用的。
并行:
1 | var a, b int |
空白标识符
空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。
_ 实际上是一个只写变量,你不能得到它的值。
这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。
例:
1 | package main |
Go语言常量
常量定义格式:
1 | const identifier [type] = value |
常量还可用于枚举
1 | const ( |
iota
iota是go里面的特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
iota用例:
1 | package main |
1 | package main |
Go语言运算符
这部分没什么好扩充的,记录下容易忘的运算符优先级
5 | * / % << >> & &^ |
---|---|
4 | + - | ^ |
3 | == != < <= > >= |
2 | && |
1 | || |
Go的条件语句
(1)if语句用法
1 | if 布尔表达式 { |
(2)if..else语句用法
1 | if 布尔表达式 { |
(3)if嵌套语句
1 | if 布尔表达式1{ |
(4)switch语句
1 | switch var1 { |
需要注意的是:
- 支持多条件匹配
- 不同的 case 之间不使用 break 分隔,默认只会执行一个 case
- 如果想要执行多个 case,需要使用 fallthrough 关键字,也可用 break 终止
1 | switch{ |