golang-复习1

结构体:

  是一种数据类型

  type Person struct{  //l类型定义,地位等价与 int byte boo string ……通常放在全局位置

    name string

    sex byte

    age int

  }

普通变量定义和初始化:

  1.顺序初始化:依次将结构体内部所有成员初始化

    var man Person = Person{"andy",'m',20}

  2.指定成员初始化:

    man  :=Person{name:"rose",age:18}  //未初始化的成员变量,取该数据类型对应的默认值

普通变量的赋值和使用:

  使用“.”索引成员变量。

  var man3 Person

  man3.name="fuck"

  man3.sex ='m'

  man3.age=18

结构体变量的比较:

  1.比较:只能使用==和!=   不能使用> < >= <=等等

  2.相同结构体类型(成员变量的类型、个数和顺序一致)变量之间可以直接赋值。

结构体地址:

  结构体变量的地址==结构体首个元素的地址。

结构体传参:

  unSafe.Sizeof(变量名)  此种类型的变量所占用的内存空间大小

  将结构体变量的值拷贝一份,传递。  几乎不用,内存消耗大,效率底。

指针变量定义和初始化: 1. 顺序初始化: 依次将结构体内部所欲成员初始化。

var man *Person = &Person{"andy", 'm', 20}

2. new(Person)

p := new(Person) p.name = "name" p.age = 10

指针索引成员变变量:

使用“.”索引成员变量。

var man3 Person man3.name = "mike" man3.sex = 'm' man3.age = 99 结构体地址:

结构体指针变量的值 == 结构体首个元素的地址。

结构体指针传参: unSafe.Sizeof(指针) : 不管何种类型的指针,在 64位操作系统下,大小一致。均为 8 字节!!! 将结构体变量地址值,传递(传引用)。 —— 使用频率非常高!!!

练习: 定义一个结构体,包含成员 string、int、bool、[]string.

在main函数中定义结构体 “普通变量”, 不初始化。 封装函数 initFunc, 在该函数内初始化 , main 函数中打印查看。

结构体指针做函数返回值:

不能返回局部变量的地址。—— 局部变量保存栈帧上,函数调用结束后,栈帧释放。局部变量的地址,不再受系统保护,随时可能分配给其他程序。

字符串处理函数: 1. 字符串按 指定分割符拆分: Split

ret := strings.Split(str, " I")

2. 字符串按 空格拆分: Fields

ret = strings.Fields(str)

3. 判断字符串结束标记 HasSuffix

flg := strings.HasSuffix("test.abc", ".mp3")

4. 判断字符串起始标记 HasPrefix

flg := strings.HasPrefix("test.abc", "tes.")

打开、创建文件:

1. 创建文件 Create: 文件不存在创建, 文件存在,将文件内容清空。

参数:name, 打开文件的路径: 绝对路径、相对路径 目录分割符:/

2. 打开文件 Open: 以只读方式打开文件。文件不存在,打开失败。

参数:name, 打开文件的路径: 绝对路径、相对路径

3. 打开文件 OpenFile: 以只读、只写、读写 方式打开文件。文件不存在,打开失败。

参1:name, 打开文件的路径: 绝对路径、相对路径

参2:打开文件权限: O_RDONLY、O_WRONLY、O_RDWR

参3:一般传 6

写文件:

按字符串写:WriteString() --> n个写入的字符个数

n, err := f.WriteString("123")

回车换行: windows: \r\n Linux: \n 按位置写: Seek(): 修改文件的读写指针位置。

参1: 偏移量。 正:向文件尾偏, 负:向文件头偏

参2: 偏移起始位置: io.SeekStart: 文件起始位置

io.SeekCurrent: 文件当前位置

io.SeekEnd: 文件结尾位置

返回值:表示从文件起始位置,到当前文件读写指针位置的偏移量。

off, _ := f.Seek(-5, io.SeekEnd) 按字节写: writeAt(): 在文件制定偏移位置,写入 []byte , 通常搭配 Seek()

参1: 待写入的数据 参2:偏移量

返回:实际写出的字节数。

n, _ = f.WriteAt([]byte("1111"), off)

读文件: 按行读 1). 创建一个带有缓冲区的 Reader(读写器)

reader : = bufio.NewReader(打开的文件指针)

2). 从reader的缓冲区中 ,读取指定长度的数据。数据长度取决于 参数 dlime

buf, err := reader.ReadBytes( ' \n' ) 按行读。

判断到达文件结尾: if err != nil && err == io.EOF 到文件结尾。

文件结束标记,是要单独读一次获取到的。 缓冲区:内存中的一块区域,用来减少物理磁盘访问操作。 《计算硬件及组成原理》 —— 机械工业出版社。

按字节读、写文件。

read([]byte): 按字节读文件

write([]byte):按字节字节

目录操作:

打开目录: OpenFile

打开目录 OpenFile: 以只读方式打开目录。

参1:name, 打开目录的路径: 绝对路径、相对路径

参2:打开目录权限: O_RDONLY

参3:os.ModeDir

返回值: 返回一个可以读目录的 文件指针。

读目录:Readdir 原型:func (f *File) Readdir(n int) ([]FileInfo, error) { 参数: 欲打开的目录项个数。 -1 , 表所有

返回值: FileInfo : type FileInfo interface { Name() string // base name of the file Size() int64 // length in bytes for regular files; system-dependent for others Mode() FileMode // file mode bits ModTime() time.Time // modification time IsDir() bool // abbreviation for Mode().IsDir() Sys() interface{} // underlying data source (can return nil) }

练习题3, 思路分析:

1. 根据用户指定的目录, 只读打开 —— 读目录的练习题。

2. 找到目录中的 .txt, 有可能有多个 —— 目录中找一个 指定类型文件

3. 打开 其中一个 .txt 文件。 循环读取一行。reader := bufio.NewReader, reader.ReadBytes('\n') —— 读一行文件内容练习题

4. 将一行数据的字符串,拆分后,存入 []string 。 Split、Fields —— 字符串练习题

5. 遍历[]string 统计“Love”单词出现的次数。 —— map练习题

C:/itcast/test

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏知识分享

4-STM32物联网开发系统方案微信小程序篇

https://www.cnblogs.com/yangfengwu/p/10979101.html

56320
来自专栏无原型不设计

网页设计太麻烦

Bootstrap作为针对响应式设计和移动优先的前端web开发,是当下最流行的设计框架之一。使用 免费的Bootstrap UI工具包让原型设计和网页设计变得更...

18130
来自专栏信安之路

DataCon 的 DNS 恶意流量检查一题回顾

首先,第二题直接放弃了,算法对我来说很掉头发的,果断放弃了。毕竟现在不是答题时间了,下面的分析如有错误还请各位留言扶正,谢谢!

43020
来自专栏生信技能树

R包安利 ② pubmed.mineR—又一个PubMed利器

使用R语言查询单细胞转录组这个关键词在2010-2019年的文章数量! 如果没有,或者还没来得及动手,那么今天这个R包也可以尝试一下:

25310
来自专栏FREE SOLO

点击一个web网页的流程和所用协议(计算机网络)

客户方启动浏览器; 客户在浏览器的地址栏键入URL; 浏览器分析URL,找到信息资源所在主机地址; 与该主机(服务器)建立TCP连接(端口号80); 向...

21940
来自专栏编程微刊

Thymeleaf 引入公共代码页面

前面写过,写前端页面的时候,尤其是写后台管理系统,每个页面都会遇到一些重复的代码,比如左侧导航栏,头部的信息,前面也做了一些整合,把代码放在了公共的页面,每个页...

82940
来自专栏有趣的django

Django打造大型企业官网(四)

15940
来自专栏CRPER折腾记

Vue 2.x折腾记 - (21) CNZZ统计在引流页中的应用姿势

若是我们要考虑下维护性,基于 vue cli 3 构建项目的小伙伴可以用脚手架封装的特性来抽离;

26610
来自专栏nummy

shiny入门课【2.创建用户界面】

titlePanel 和 sidebarLayout 是fluidPage中非常重要的两个组成部分, 他们用于创建带侧边栏的主页。

10320
来自专栏BanzClub

聊一聊密码学

在古代,战争双方的将军,都会通过传信兵,来调遣各支队伍。假如,A国派出的传信兵,被B国俘虏了,那A国的作战计划将会被B国获取,这样,B做针对性战略,将会直接导致...

45120

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励