Golang 整理笔记
声明变量
数据类型
字符串
数组
字典map
流程控制
声明变量:
关键字var来声明,类型信息放在变量名之后,且 变量声明语句不需要使用分号作为结束符. 示例如下:
var v1 int var v2 string var v3 [10]int // 数组 var v4 []int // 数组切片 var v5 struct { f int } var v6 *int // 指针 var v7 map[string]int // map,key为string类型,value为int类型 var v8 func(a int) int // 声明函数
var关键字的另一种用法是可以将若干个需要声明的变量放置在一起, 如下示例:
var ( v1 int v2 string )
1. 变量初始化:
在声明变量处于初始化的时候, var 关键字可留可弃. 如下所示:
var v1 int = 10 // 正确的使用方式1 var v2 = 10 // 正确的使用方式2,编译器可以自动推导出v2的类型 v3 := 10 // 正确的使用方式3,编译器可以自动推导出v3的类型 // 指定类型已不再是必需的,Go编译器可以从初始化表达式的右值推导出该变量应该声明为 哪种类型,这让Go语言看起来有点像动态类型语言,尽管Go语言实际上是不折不扣的强类型语 言(静态类型语言)。 // 注意: :=左侧的变量不应该是已经被声明过的,否则会导致编译错误 // err: no new variables on left side of :=
2. 变量赋值: ( 变量初始化和变量赋值是两个不同的概念。)
声明一个变量之后的赋值 过程示例:
var v10 int v10 = 123
且 支持多重赋值功能 示例:
i, j = j, i // 等同于: t = i; i = j; j = t;
3. 类型推断:
在初始化的时候, 可以自动推断出 变量的类型, 也就是说, 可以省略 type
package main import "fmt" func main() { var age = 29 // 可以推断age的类型为 int fmt.Println("my age is", age) }
4. 同时声明多个变量:
语法:
var name1, name2 type = initialvalue1, initialvalue2
5. 简短声明: := 操作符
语法: name := initialvalue
要求:
:= 操作符左边的所有变量都有初始值 赋值。
:= 操作符的左边至少有一个变量是尚未声明的.
注意: 由于 Go 是强类型(Strongly Typed)语言,因此不允许某一类型的变量赋值为其他类型的值 错误示例:
package main func main() { age := 29 // age是int类型 age = "naveen" // 错误,尝试赋值一个字符串给int类型变量 }
数据类型:
Go的基本类型:
-
- bool
- 数字类型
- int8, int16, int32, int64, int
- uint8, uint16, uint32, uint64, uint
- float32, float64
- complex64, complex128
- byte
- rune
- string
bool类型(布尔值):
bool 类型表示一个布尔值,值为 true 或者 false。
数字类型:
有符号整型:
int8: 表示8位的 有符号整型; 大小: 8位(bytes); 范围: -128~127
int16: 表示16位有符号整型; 大小: 16 位(bytes); 范围: -32768~32767
int32:表示 32 位有符号整型; 大小: 32 位(bytes); 范围: -2147483648~2147483647
int64:表示 64 位有符号整型; 大小: 64 位(bytes); 范围: -9223372036854775808~9223372036854775807
int:根据操作系统的位数 而表示 32位,或64位整型. 除非对整型的大小有特定的需求, 一般都用int来表示整型
无符号整型:
详情: https://studygolang.com/articles/11869
浮点数:
float32:32 位浮点数
float64:64 位浮点数
复数:
complex64:实部和虚部都是 float32 类型的的复数。
complex128:实部和虚部都是 float64 类型的的复数。
其他:
byte 是 uint8 的别名。
rune 是 int32 的别名。
类型转换:
Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换。
赋值的情况: 把一个变量赋值给另一个不同类型的变量,需要显式的类型转换;
字符串:
数组:
字典map:
流程控制: