Go语言中的变量需要声明以后才可以使用(需要提前定义变量)并且声明后必须使用(不适用会报错)
标准声明 var 变量名 变量类型example:
var name string var id int var isOk bool多变量声明可以整合在一起
var ( name string id int isOk bool ) 变量初始化Go语言在声明变量的时候,会自动对变量对应的内存区进行初始化操作。
var 变量名 变量类型 = 表达式example:
var name string = "A2rcher" var id int = 123 类型推断Go语言提供了一种简易的方式,不需要提供变量类型,可以根据后面的初始化操作后自动推断其变量类型
var name = "A2rcher" var id = 123 短变量声明在之后学习到的函数中,还可以用更简单的方式来声明一个变量(也是最常用的声明方法),使用:=声明并初始化变量
package main import ( "fmt" ) var m = 100 //全局变量 func main(){ n:=100 m:=300//声明并初始化局部变量 fmt.Println(m, n) } 匿名变量所谓匿名,通俗的讲就是没有名字的变量,用下划线_表示,匿名变量不占用命名空间(Go语言中变量声明后必须使用,匿名变量除外),不会分配内存,所以匿名变量之间不存在重复声明。
package main import "fmt" func foo() (string, int) { return "A2rcher", 20 } func main() { x, _ := foo() _, y := foo() fmt.Println("x=", x, "y=", y) } 常量变量中还有一中是常量,它相对于变量来讲是永恒不变的值,对于变量来说一开始可以不做赋值直接定义类型,但是对于常量来讲他需要在定义的时候就要赋值,用const
const p = 3.1415 const e = 2.7182多常量声明可以整合在一起
const ( p = 3.1415 e = 2.7182 ) iota常量计算器iota是Go语言中的常量计算器,在常量表达式中使用。
package main import "fmt" const ( n1 = iota n2 n3 n4 ) func main() { fmt.Println(n1)//0 fmt.Println(n2)//1 fmt.Println(n3)//2 fmt.Println(n4)//3 }iota在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。
使用下划线_可以跳过其中一个
package main import "fmt" const ( n1 = iota//0 _ //1 n2 //2 n3 //3 n4 //4 ) func main() { fmt.Println(n1)//0 fmt.Println(n2)//2 fmt.Println(n3)//3 fmt.Println(n4)//4 } 数据类型 整型 类型 描述uint8 无符号 8位整型 (0 到 255)
uint16 无符号 16位整型 (0 到 65535)
uint32 无符号 32位整型 (0 到 4294967295)
uint64 无符号 64位整型 (0 到 18446744073709551615)
int8 有符号 8位整型 (-128 到 127)
int16 有符号 16位整型 (-32768 到 32767)
int32 有符号 32位整型 (-2147483648 到 2147483647)
int64 有符号 64位整型 (-9223372036854775808 到 9223372036854775807)
特殊整型 类型 描述
uint 32位操作系统上就是uint32,64位操作系统上就是uint64
int 32位操作系统上就是int32,64位操作系统上就是int64
uintptr 无符号整型,用于存放一个指针
浮点型
Go语言支持两种浮点型数:float32和float64。这两种浮点型数据格式遵循IEEE 754标准: float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32。 float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64。
打印浮点数时,可以使用fmt包配合动词%f,代码如下:
package main import ( "fmt" "math" ) func main() { fmt.Printf("%f\n", math.Pi) fmt.Printf("%.2f\n", math.Pi) } 复数complex64和complex128
var c1 complex64 c1 = 1 + 2i var c2 complex128 c2 = 2 + 3i fmt.Println(c1) fmt.Println(c2)复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。
布尔 字符串 byte和rune 运算符 运算符 描述+ 相加
- 相减
* 相乘
/ 相除
% 求余
运算符 描述
== 检查两个值是否相等,如果相等返回 True 否则返回 False。
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。
运算符 描述
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。
! 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。
运算符 描述
& 参与运算的两数各对应的二进位相与。 (两位均为1才为1)
| 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1)
^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1)
<< 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。
>> 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。
运算符 描述
= 简单的赋值运算符,将一个表达式的值赋给一个左值
+= 相加后再赋值
-= 相减后再赋值
*= 相乘后再赋值
/= 相除后再赋值
%= 求余后再赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
|= 按位或后赋值
^= 按位异或后赋值
流程控制 if else for 初始语句;条件表达式;结束语句{ 循环语句 }
example:
package main import "fmt" func main() { for i := 0; i < 10; i++ { fmt.Println(i) } }for循环的初始语句可以被忽略,但是用作与隔开的分号;还是要有的。
package main import "fmt" var i = 0 func main() { for ; i < 10; i++ { fmt.Println(i) } }for循环的结束语句也是可以省略掉的
package main import "fmt" var i = 0 func main() { for i < 10 { fmt.Println(i) i++ } } for range(键值循环)键值循环可以用作与遍历,切片,map还有channel。遵循一下规律
数组、切片、字符串返回索引和值。
map返回键和值。
通道(channel)只返回通道内的值。
switch goto(跳转指定标签)