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
golang-复习1的更多相关文章
- golang(10)interface应用和复习
原文链接 http://www.limerence2017.com/2019/10/11/golang15/ interface 意义? golang 为什么要创造interface这种机制呢?我个人 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- channel Golang
Golang, 以17个简短代码片段,切底弄懂 channel 基础 (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的 ...
- [Golang]实习最后一天小纪念+并发爬虫小练习
今天是我在公司实习的最后一天,一个月的时间真的是太短暂了,我非常享受在公司工作的这一个月,在这里Leader和同事们对我的帮助极大地促进了我技术水平的进步和自信心的提升,我发自内心地感谢白山云科技给我 ...
- 初生牛犊不怕虎 golang入坑系列
读前必读,下面所有内容都是来自这里. 放到这里的目的,就是为了比对一下,哪里的读者多.平心而论,同样的Markdown,博客园排版真心X看,怎么瞅怎么X看.(X := '难' || X :='耐' | ...
- 崩溃 golang入坑系列
早上(11.30)收到邮件,Vultr东京机房网络故障.当时搭建SS时,考虑到了机房故障.所以特意分出了日本和香港两条线路.但千算万算,忘记数据库还在东京机房中. 现在网络故障,SS服务器无法读取数据 ...
- golang实现aes-cbc-256加密解密过程记录
我为什么吃撑了要实现go的aes-cbc-256加密解密功能? 之前的项目是用php实现的,现在准备用go重构,需要用到这个功能,这么常用的功能上网一搜一大把现成例子,于是基于go现有api分分钟实现 ...
- 【Golang 接口自动化02】使用标准库net/http发送Post请求
写在前面 上一篇我们介绍了使用 net/http 发送get请求,因为考虑到篇幅问题,把Post单独拎了出来,我们在这一篇一起从源码来了解一下Golang的Post请求. 发送Post请求 net/h ...
- 有趣的动态规划(golang版本)
多年前就听过这个动态规划,最近在复习常用算法的时候才认真学习了一下,发现蛮有意思,和大家安利一波. 定义: 准确来说,动态规划师吧一个复杂问题分解成若干个子问题,并且寻找最优子问题的一种思想,而不是一 ...
- 漫谈golang设计模式 简易工厂模式
目前学习golang的主要需求是为了看懂TiDB的源码,下面我们复习一下简易工厂模式的思想 工厂类型分为三种,创建型模式,结构型模式,行为型模式. 简单工厂 使用场景:考虑一个简单的API设计,一个模 ...
随机推荐
- 快速生成html文本文档——typora
下载地址:https://www.typora.io/#windows 一.工具界面: 二.使用工具编辑: 三.导出为html: 四.打开html查看: Markdown语法教程:https://ww ...
- 使用activiti的designer插件记录
1.activiti添加排他网,条件下载condition中 2.activiti添加监听Listener,知道3种方法 1.实现taskListener 通过加载java class的方式去加载实现 ...
- 逆波兰表达式求值 java实现代码
根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说 ...
- Fortify漏洞之Dynamic Code Evaluation: Code Injection(动态脚本注入)和 Password Management: Hardcoded Password(密码硬编码)
继续对Fortify的漏洞进行总结,本篇主要针对 Dynamic Code Evaluation: Code Injection(动态脚本注入) 和 Password Management: Har ...
- centos没有service命令的恢复方法(-bash: service: command not found)
转载自:https://blog.csdn.net/u014175572/article/details/53375049?utm_source=itdadao&utm_medium=refe ...
- object-c 连接mysql
1. 通读 'mysql的使用' 2. 在Target->build setting 修改配置 User Header Search Paths 加入 /usr/local/mysql/incl ...
- SSH框架笔记01_SSH整合的两种方式
目录 1. 框架回顾 2. 创建项目,引入jar包 2.1 Struts2的jar包 2.2 Hibernate的jar包 2.3 Spring的jar包 3. 引入配置文件 3.1 Struts2配 ...
- MySQL DataType--隐式类型转换
隐式类型转换 在官方文档中对隐式类型转换规则有如下描述: 1. If one or both arguments are NULL, the result of the comparison is N ...
- Android笔记(五十四) Android四大组件之一——ContentProvider(一)
ContentProvider提供数据 在Android中,他的每个应用都是相互独立的,各自运行在自己的Dalvik虚拟机中,但现实使用中常常需要在多个应用之间进行数据交换,例如发短信需要获取联系人中 ...
- sql的匹配和正则表达式
1. 匹配:like 关键字 #假设存在表 my_test_copy select * from my_test_copy; 则使用like关键词匹配:注意下划线 '_'和百分号 '%' # 下划线' ...