golang-笔记2
结构体:
是一种数据 类型。
type Person struct { —— 类型定义 (地位等价于 int byte bool 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 = "mike"
man3.sex = 'm'
man3.age = 99
结构体变量的比较:
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-笔记2的更多相关文章
- golang笔记1
golang笔记1 go代码是用包来组织的,每个包有一个或多个go文件组成,这些go文件文件放在一个文件夹中 每个源文件开始都用一个package声明,指明本源文件属于哪个包 pakage声明后紧跟这 ...
- Golang笔记(二)面向对象的设计
Golang笔记(二)面向对象的设计 Golang本质还是面向过程的语言,但它实现了一些OOP的特性,包括抽象.封装.继承和多态. 抽象和封装 Golang和C语言一样以struct为数据结构核心,不 ...
- Golang笔记(一)简洁的语言风格
Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是 ...
- Golang笔记集
学习Golang了, 下面分享我的, 还有我收集的Golang的学习资料 我的基础笔记地址: https://github.com/zhuchangwu/go-study-notes 其他参考: Go ...
- Golang笔记整理--One day
题外话: 很早就有整理学习笔记的想法,今天将想法付诸于行动,将Golang相关知识系统整理一遍,此分类为Golang学习笔记,最近开始学习这门语言的同学可以参考. 一 第一个Go程序: hello.g ...
- golang笔记——函数与方法
如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...
- golang笔记——IDE
可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1.Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目 ...
- golang笔记——包
1.包简述 GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包.比如 ...
- golang笔记——环境搭建
1.下载安装 从 https://golang.org/dl/ 这里下载最新版本的 golang 安装包,分别有 Windows\Linux\Apple OSX\源码包. golang的官方网站是 h ...
- 【Golang笔记】Golang工具包Cobra安装记录
0.环境信息 系统:Win10_x64 Go版本:go version go1.8.1 windows/amd64 Git版本:git version 2.17.0.windows.1 1.安装Go运 ...
随机推荐
- postgres 序列
postgres序列(serial)和类型:https://www.cnblogs.com/alianbog/p/5654604.html 序列:https://www.cnblogs.com/mch ...
- VS2019删除大量空白行或者缩进大量空白行
原文:VS2019删除大量空白行或者缩进大量空白行 问题描述: 在vs编辑器的代码中有时含有大量无用的空白行,我们想删除这些大量空白行或者缩进空白行. 注: 不需要将代码复制在类似word的文本编辑器 ...
- 编译基于obs-studio的阿里巴巴直播工具tblive的过程和常见问题解决
tblive 简介 tblive开源项目对应的产品是千牛主播,是一个独立的PC端主播工具,基于开源软件OBS Studio来修改定制. 项目说明 tblive是一款优秀的基于obs-studio的直播 ...
- ZK中使用JS读取客户端txt文件内容问题
最近写一个需求时遇到一个问题,用户需要通过点击一个按钮直接读取他自己电脑上D盘的一个txt文件内容显示到页面,因为项目现在是用ZK写的.我对于ZK也是刚刚了解不就,很多都还不是很熟.起初我是想用io流 ...
- Python2 和 pip2 存在, Python3 也存在,但是 pip3 不存在的解决办法
sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py sudo python3 get-pip.py 输入两行命令即可
- MMU与cache
这一快理解的非常浅: MMU 虚拟存储器对内存进行了逻辑上的扩充.比如一个32位的CPU系统,逻辑上的寻址可以达到4GB,但是如果直接对物理地址进行寻址,就要受到主存大小的限制. 在这种条件下,虚拟地 ...
- https小结
目录: 1.什么是https 2.https实现过程描述(https和证书小结) 3.(在客户端)https抓包解密 4.wireshark分析https数据包解密前后的特点 正文 1.什么是http ...
- vi / vim 基本操作
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi n filename :打开文件,并将光标置于第n行首 vi filename :打开 ...
- Python学习日记(十一) 内置函数
什么是内置函数? 就是Python中已经写好了的函数,可以直接使用 内置函数图表: 以3.6.2为例 内置函数分类: 一.反射相关 1.hasattr() 2.getattr() 3.setattr( ...
- SpringBoot 中的使用事务
转自:https://blog.csdn.net/linzhiqiang0316/article/details/52638039 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数 ...