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

 

posted @ 2020-03-13 16:37  默&诫  阅读(204)  评论(0)    收藏  举报