Go语言基础笔记
1.变量的定义
(1)var 变量名 数据类型 (声明)
(2)var 变量名 数据类型 = 值 (定义)
(3)变量名 := 值 (自动推到类型)
2.格式化输入输出:
fmt.Println() //输出数据,自带换行
fmt.Print() //输出数据,不带换行
fmt.Printf() //格式化输出数据
%d(整形)
%f(浮点型)
%t(布尔类型)
%s(字符串类型)
%c(字符类型)
%p(内存地址)
%T(数据类型)
%o(八进制整形数据)
%x(十六进制整形数据)
%%(%百分号打印)
%q(以Go语言格式显示字符串,默认带""符号)
%v(显示对应数据详细信息)
fmt.Scan(&变量) //输入数据,&(取地址符号)
fmt.Scanf() //格式化输入数据
3.常量:
格式:const 常量名 数据类型 = 值 (一般常量名大写)
注意:常量的值在程序运行过程中,其值不能发生改变
常量在内存中的数据区进行存储,变量则是在内存中的栈区存储
iota 枚举
枚举一般用作程序的流程控制
const(
a = iota //a = 0
b, c = iota, iota // b=1 c=1
d = 30 // d=30
e = iota //e=3
)
4.类型转换
格式:数据类型(变量) 数据类型(表达式)
注意:不同类型转换,如果讲浮点型转成整形,会丢失精度,只会保留整数部分,不会四舍五入;
同一类型转换,建议将低类型转成高类型,防止数据丢失
5.切片(传引用)
切片创建:
(1)变量名 := []int{1,2,3,4}
(2)变量名 := make([]int, 长度, 容量)
(3)变量名 := make([]int, 长度) //创建切片没有指定容量时,长度=容量
切片使用:
切片名称[low : high : max] // low:起始下标位置 high:结束下标位置 长度len = high - low 容量cap = max - low
s[:high:max] //从0开始,到high结束(不包含high下标的值)
s[low:] //从low开始,到末尾
s[:high] //从0开始,到high结束。容量跟随原先容量【常用】
append: 在切片末尾追加元素 append(切片对象, 待追加元素)
copy: copy(目标位置切片,源切片) //拷贝过程中,直接对应位置拷贝
len :统计切片长度
cap: 统计切片容量
6.map(传引用)
创建方式:
(1)var m1 map[int]string //声明了一个map, 但是不能存储数据
使用:
var m1 map[int]string
m1 = map[int]string{0:"hello", 2:"world"}
fmt.Println(m1)
相当于(5)
(2)m2 := map[int]string{} //能存储数据
(3)m3 := make(map[int]string) //能存储数据,默认len=0
(4)m4 := make(map[int]string, 10) //定义长度为10,能存储数据
(5)m5 := map[int]string{0:"hello", 1:"world", 2:"map"}
map使用:
遍历map: for key值, value值 := range m{
}
删除map:delete(待删除元素的map, key值)
7.结构体(一种数据类型)
(1)定义结构体类型(一般放在全局位置)
type Person(结构体名称) struct{
id int
name string
}
普通变量定义和初始化:
1⃣️顺序初始化:依次将结构体内部所有成员初始化 var man Person = Person{123456, "joe"}
2⃣️指定成员初始化:man := Person{name:"joe", id:123456}
(未给定初始化值时,则直接赋类型对应的默认值)
普通变量的赋值和使用:(使用“.”索引成员变量)
var man Person
man.id = 123456
man.name = "joe"
结构体变量的地址 == 结构体首个元素的地址。
8. 指针
var p *int //定义指针
var number int = 12
p = &number //取地址赋值
*p == number
9.字符串处理函数:(strings 包)
str := "this is a very nice apple"
(1)字符串按 指定分隔符拆分:Split
ret := strings.Split(str, "i")
(2)字符串按 空格拆分:Fields
ret := strings.Fields(str)
(3)判断字符串结束标记 :HasSuffix
isTxt := strings.HasSuffix("test.txt", ".txt")
(4)判断字符串起始标记:HasPrefix
isTest := strings.HasPrefix("test.txt", "test.")
10.文件操作(os包)
打开创建文件:
(1)创建文件Create: 文件不存在时创建;文件存在时,将文件内的内容清空,重新写入;
参数:name(打开文件的路径:绝对路径、相对路径)
(2)打开文件Open:以只读方式打开文件,文件不存在时,打开失败。
参数:name(打开文件的路径:绝对路径、相对路径)
(3)打开文件 OpenFile: 以只读、只写、读写方式打开文件。文件不存在时,打开失败。
参数1: name (打开文件的路径:绝对路径、相对路径)
参数2: 打开文件权限 O_RDONLY、O_WRONLY、O_RDWR
参数3: 指定操作模式,一般写6模式
写文件:
(1)按字符串写:WriteString() --> n个写入的字符个数
n, err := fp.Writestring("123")
(2)按位置写:Seek() 修改文件的读写指针位置。
参数1:偏移量。 正:向文件尾偏,负:向文件头偏
参数2: 偏移起始位置:
io.SeekStart:文件起始位置
io.SeekCurrent:文件当前位置
io.SeekEnd:文件结尾位置
返回值:表示从文件起始位置,到当前文件读写指针位置的偏移量。
off, _ := fp.Seek(-5, io.SeekEnd)
(3)按字节写:WriteAt() 在文件制定偏移量位置,写入[]byte,通常搭配Seek()
参数1:待写入的数据
参数2:偏移量
返回:实际写出的字节数
n, _ := fp.WriteAt([]byte("2323454sdfsf", off)
读文件:
(1)按行读:
创建一个带有缓冲区的Reader(读写器)
reader := bufio.NewReader(打开的文件指针)
从reader的缓冲区中,读取指定长度的数据。数据长度取决于参数 dlime(分隔符)
buf, err := reader.ReadBytes("\n") // 按行读
判断到达文件结尾: if err != nil && err == io.EOF
缓冲区:内存中的一块区域,用来减少物理磁盘访问操作。
(2)按字节读、写文件
read([]byte):按字节读文件
write([]byte):按字节写文件
目录操作:
打开目录: OpenFile() 以只读的方式打开目录
参数1:name 打开目录的路径(绝对路径,相对路径)
参数2:打开目录权限: O_RDONLY
参数3:os.ModeDir
返回值:返回一个可以读目录的文件指针。
读目录:ReadDir()
参数:欲打开的目录项个数 -1表示所有
返回值:FileInfo

浙公网安备 33010602011771号