一、变量定义
变量类型写在变量名之后
使用 var 关键字
var a, b, c bool
var s1, s2 string="hello", "world"
使用 var() 集中定义变量
var (
i = 00
o = 22
)
让编译器自动决定类型
var a, b, i, sl, s2 = true, false, 3, "hello", "world"
使用 := 定义变量(只能在函数内使用)
a, b, i, s1,s2 := true, false, 3, "hello", "world"
关键字(不能够作为变量名的词)
2 个包管理 :import、package
8 个程序实体声明与定义:chan、const、func、interface、map、struct、type、var
15 个程序流程控制:break、case、continue、default、defer、else、fallthrough、for、 go、goto、if、range、return、select、switch
36 个预定义标识符:int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、float32、float64、complex、complex64、complex128、append、bool、byte、cap、close、copy、false、imag、iota、len、make、new、nil、panic、print、println、real、recover、 string、true、uintptr
二、基本数据类型
整数类型
(u)int、(u)int8、(u)int16、(u)int32、(u)int64:不加 u 表示无符号整数
具体类型基本数据类型取值范围
int8 —— 128 到 127,即 -2^7 到 2^7 - 1
uint8 —— 0 到 255,即 0 到 2^8 - 1
int16 —— -32768 到 32767,即 -2^15 到 2^15 - 1
uint16 —— 0 到 65535,即 0 到 2^16 - 1
int32 —— -2147483648 到 2147483647,即 -2^31 到 2^31 - 1
uint32 —— 0 到 4294967295,即 0 到 2^32 - 1
int64 —— -9223372036854775808 到 9223372036854775807,即 -2^63 到 2^63 - 1
uint64 —— 0 到 18446744073709551615,即 0 到 2^64 - 1
byte:需要字节存储时候才会用到,一般是字节组成的数组
rune:等价于 int32 存储一个 unicoed 编码
浮点类型
float32、float64
字符串类型
string
布尔类型
bool
复数类型:原生支持复数类型
complex64、complex128
①、数据类型判断
fmt.Sprintf("%T",变量或值)
②、强类型转换
string 到 int
int,err:=strconv.Atoi(string)
string 到 int64
int64,err := strconv.Parselnt(string, 10, 64)
int 到 string
string:=strconv.ltoa(int)
int64 到 string
string:=strconv.Formatlnt(int64,10)
string 到 float32/float64
float32,err = ParseFloat(string,32)
float64,err = ParseFloat(string,64)
int64 转 int
int:=int(int64)
int 转 int64
int64:=int64(int)
三、复杂数据类型
结构 struct
接口 interface
数组[数组长度]值类型(值1,值2)
切片slice []值类型{值1,值2}
map [key类型]值类型{key:值}
指针 * uintptr
函数 func
管道 chan
四、包
新建文件 test/test.go
package test
var A string = "test"
新建文件 test/test2.go
package test
var B string = "test2"
修改 main.go
package main
import (
"fmt"
"goclass/test"
)
func main() {
fmt.Println(test.A)
fmt.Println(test.B)
}
修改 main.go
package main
import (
"fmt"
t "goclass/test"
)
func main() {
fmt.Println(t.A)
fmt.Println(t.B)
}
修改 main.go
package main
import (
"fmt"
. "goclass/test"
)
func main() {
fmt.Println(A)
fmt.Println(B)
}
共有与私有(根据首字母大小写划分)
test/test.go 和 test/test2.go 中有两个变量首字母是大写,所以可以在其他文件中使用
五、常量与枚举
5.1、常量
const filename="abc.txt"
const 数值可作为各种类型使用
const a,b = 3,4
var c int = int(math.Sqrt(a*a+b*b))
5.2、枚举
普通枚举类型
const (
a = 0
b = 1
c = 2
d = 3
e = 4
)
自增枚举类型
const (
a = iota
_
c
d
e
)
const (
a = 1 << (10 * iota)
b
c
d
e
)
六、字符和字符串处理
6.1、rune
rune 相当于 go 的char
使用 range 遍历 pos, rune 对
使用 utf8.RuneCountInString 获得字符数量
使用 len 获得字节长度
使用 []byte 获得字节
6.2、代码
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "Yes我爱鲁鲁博客!" // UTF-8
fmt.Println(s)
for _, b := range []byte(s) {
fmt.Printf("%X ", b)
}
//59 65 73 E6 88 91 E7 88 B1 E9 B2 81 E9 B2 81 E5 8D 9A E5 AE A2 21
fmt.Println()
for i, ch := range s { // ch is a rune
fmt.Printf("(%d %X) ", i, ch)
}
//(0 59) (1 65) (2 73) (3 6211) (6 7231) (9 9C81) (12 9C81) (15 535A) (18 5BA2) (21 21)
fmt.Println()
fmt.Println("Rune count:",
utf8.RuneCountInString(s))
//Rune count: 10
bytes := []byte(s)
for len(bytes) > 0 {
ch, size := utf8.DecodeRune(bytes)
bytes = bytes[size:]
fmt.Printf("%c ", ch)
}
//Y e s 我 爱 鲁 鲁 博 客 !
fmt.Println()
for i, ch := range []rune(s) {
fmt.Printf("(%d %c) ", i, ch)
}
//(0 Y) (1 e) (2 s) (3 我) (4 爱) (5 鲁) (6 鲁) (7 博) (8 客) (9 !)
fmt.Println()
}
6.3、其他字符串操作
Fields、Split、Join
Contains、Index
ToLower、ToUpper
Trim、TrimRight、TrimLeft