如题,此贴记录一下学习Go时需要记的一些点。
大量参照(https://www.runoob.com/go)菜鸟教程和
(https://studygolang.com/articles/11869)go语言中文网然后根据自己理解记录的。
仅供本人参考
语法基础
for { //花括号和关键词要在同一行
}
定义的变量就必须使用,不使用就别定义,否则编译不通过。
引用的包也是,引用了就必须使用。
//使用双斜杠单行注释
/*
使用这种格式进行块注释
*/
自动插入分号规则:
if (1 == 0 ) {
fmt.Print("yes")
} else {
//这里else必须跟在}括号后面,因为go语言的自动插入分号机制(分号会自动补全到每个末尾}后面)
fmt.Print("no")
}
如果下面这个样子就是不被允许的:
if (1 == 0 ) {
fmt.Print("yes")
} //错误的写法
else {
fmt.Print("no")
}
变量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。也不能和内定关键词重复。
var variable_name int = 10
var | (name) | [type] | = | [value] |
---|---|---|---|---|
定义变量关键词 | 变量名 | 数据类型 | 赋值关键词 | 值 |
()内必填,[]可选。常见的定义方法:
var a int = 10 //定义一个数据类型为int,值是10的变量
var a = 10 //当不指定数据类型的时候,由go来判断
var a int //不赋值的时候,使用默认空值
var a,b,c,d int //同时定义多个变量
定义多个变量的另一种写法。
var ( //这种被称为因式分解的写法
a int
b int
c int
d int
)
如果没有赋值,go将会赋值默认空值。不同数据类型的默认空值也有不同,如下:
- 数值类型(包括complex64/128)为 0
- 布尔类型为 false
- 字符串为 ""(空字符串)
- 一些特殊类型为 nil:
还可以省略var,使用另一种赋值方法。
a := value
//声明变量并给a赋值value,数据类型自行判断,被称为类型推导。
a,b,c,d := 1,2,3,4 //同时定义多个变量并按照顺序赋值。
不可定义一个已经定义的变量,使用:=的时候至少需要有一个没有初始化的变量。使用:=的时候右边初始化值不能为空
变量的作用范围是根据声明变量语句的代码块判断的
数据类型
Go是强类型语言,当试图用不同的类型赋值时就会出现错误。
var a int = 66
var b string = "77"
a = b //因为变量a b 类型不同,所以此操作是不被允许的。
我们可以用T(v)来进行类型转换,a = int(b)
这样就会把变量b的类型转换成int并赋值给a
Go的数据类型大致分为:
- bool布尔类型
true false
- int整数数字类型
132456 -12
- float32双精度数字类型
0.123 0.5 5.6
- string字符串类型
abcd_-231
有符号整数
有无符号的意思是是否包含正负+-
下面的位代表二进制上面的位数,8位则代表CPU一次可以从寄存器处理的数据量,8位则是1111 1111=255的范围
-
int8:表示 8 位有符号整型
大小:8 位
范围:-128~127 -
int16:表示 16 位有符号整型
大小:16 位
范围:-32768~32767 -
int32:表示 32 位有符号整型
大小:32 位
范围:-2147483648~2147483647 -
int64:表示 64 位有符号整型
大小:64 位
范围:-9223372036854775808~9223372036854775807
int:根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。
常量
const
关键词用来定义常量,如下就是给变量a定义一个常量66
package main
import "fmt"
func main(){
const a = "66"
fmt.Print(a)
}
常量用于定义一个固定的值,定义一个常量后,这个常量不能再被修改,比如`const a = 66`后就不能在给a赋值了`a = 77`。
定义的常量是无类型的,可以用来被赋值给其他类型变量,如下就是将int类型的:
但是其他类型也有要求,必须是相似的 比如数字类型中的 int int32 int64 float等
package main
import "fmt"
func main(){
const num1 = 10 //定义了一个常量
fmt.Printf("\nnum1 type:%T,value:%v", num1, num1) //输出类型和值
//虽然常量是无类型的,但是他有一个默认类型,当他被需要转换的时候就会转换类型。
var num_int32 int32 = num1 //将常量10赋值给int32类型的变量num_int32
fmt.Printf("\n num_int32 type:%T,value:%v \n num1 type:%T,value:%v", num_int32, num_int32, num1, num1)
var num_str float64 = num1
fmt.Printf("\n num_str type:%T,value:%v \n num1 type:%T,value:%v", num_str, num_str, num1, num1)
}
结果:
num1 type:int,value:10
num_int32 type:int32,value:10
num1 type:int,value:10
num_str type:float64,value:10
num1 type:int,value:10
运算符
运算符用于在程序运行时执行数学或逻辑运算。
Go 语言内置的运算符有:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
算术运算符
假定 A 值为 10,B 值为 20
运算符 | 描述 | 实例 |
---|---|---|
+ | 相加 | A + B 输出结果 30 |
- | 相减 | A - B 输出结果 -10 |
* | 相乘 | A * B 输出结果 200 |
/ | 相除 | B / A 输出结果 2 |
% | 求余 | B % A 输出结果 0 |
++ | 自增 | A++ 输出结果 11 |
-- | 自减 | A-- 输出结果 9 |
关系运算符
假定 A 值为 10,B 值为 20。
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个值是否相等,如果相等返回 True 否则返回 False。 | (A == B) 为False |
!= | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 | (A != B) 为 True |
> | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 | (A > B) 为 False |
< | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 | (A < B) 为 True |
>= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 | (A >= B)为 False |
<= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 | (A <= B)为 True |
逻辑运算符
假定 A 值为 True,B 值为 False。
运算符 | 描述 | 实例 |
---|---|---|
&& | 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 | (A && B) 为 False |
|| | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 | (A || B) 为 True |
! | 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 | !(A && B) 为 True |
位运算符
位运算符对整数在内存中的二进制位进行操作。
假设A=100,B=12 二进制如下
A=0110 0100,B=1100
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符"&",可以理解为当二进制位都相同时才为1,否则都为0 | (A&B)结果为4二进制是100 |
| | 按位或运算符"|" 当二进制位有一个为1时,即为1,俩个都是0的时候才该是0了。 | (A|B)108二进制是0110 1100 |
^ | 按位异或运算符"^",二进制位相同是为0,不相同则为1。可以理解成同性相斥,异性相吸。 | (A^B)结果为104二进制是0011 01000 |
<< | 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 | A << 2 结果为 240 ,二进制为 1111 0000 |
>> | 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 | A >> 2 结果为 15 ,二进制为 0000 1111 |