1 随机数
rand.Intn(10)可以生成指定范围内的随机数。10表示对10取模(求余),所以生成的是0-9范围内的数据。
import "math/rand"
func main(){
# 创建随机种子
rand.Seed(1)
# rand.Int()生成的随机数较大
fmt.Println(rand.Int())
# rand.Intn(10)生成一个10以内的随机数
fmt.Println(rand.Intn(10))
}
2文件操作
2.1文件创建
Create为创建文件函数
Write函数返回写入数据的长度和错误值两个信息
Seek可以获取光标位置
WriteAt指定位置写入
import "os"
func main(){
fp,err := os.Create("./data.txt")
if err != nil {
fmt.Println("文件创建失败")
}
defer fp.Close()
# 写入字符串,如果需要换行,则在尾部写入\r\n,linux下为\n
fp.WriteString("hello")
# 返回数据个数及错误值
count, err1 := fp.Write([]byte("world"))
# 获取光标结束位置,以下两句等效,更推荐第二句
count2,err2 := fp.Seek(0,os.SEEK_END)
count2,err2 := fp.Seek(0,io.SeekEnd)
slice := []byte {'h', 'e', 'k'}
# 从第5个位置开始写入,如果文件之前有内容位置重复,则会被覆盖重复部分
count3,err3 := fp.WriteAt(slice,5)
}
2.2文件打开
文件打开可以使用Open和OpenFile,前者打开的是只读文件,后者使用更广泛
OpenFile需要传入三个值(文件名,打开方式,打开权限)
打开方式中O_RDONLY表示只读,O_WRONLY表示只写,O_RDWR可读可写,O_APPEND追加模式
权限0表示没有任何权限,1执行权限,2写权限,3写权限与执行权限,4读权限,5读权限与执行权限,6读权限与写权限,7读写执行权限
# 打开一个具有读写模式并具有读写权限的data.txt文件
fp,err := os.OpenFile("./data.txt",os.O_RDWR,6)
fp.WriteString("hello")
2.3读文件
使用Read读取数据,传入一个字符切片,一次读取的数据则为切片的容量个字符,对该切片进行重复传参,则对文件进行迭代读取
fp,err := os.Open("./data.txt")
# 表示读取10个长度的数据
buf := make([]byte,10)
# 返回读取的数据个数
# 读取第1个10个字符
n, err := fp.Read(buf)
# 读取第二个10个字符,读取的数据位于buf中
n, err := fp.Read(buf)
迭代文件读取
对文件进行迭代读取时,当读至结尾,err会变为 io.EOF,由此可以判断文件是否读取完毕.
buf2 := make([]byte,1024*2)表示一次读取2kb数据
ReadBytes为按行读取数据,需要传入分割的标志字符('\n')
ReadString直接读取数据为字符串数据,也需要传入分割的标志字符('\n'),用法同ReadBytes一样
fp,err := os.Open("./data.txt")
buf := make([]byte,10)
for {
n, err1 := fp.Read(buf)
if err == io.EOF {
break
}
# 将返回的字符切片转换为字符串打印""
fmt.Println(strings(buf[:n]))
}
# 一次读取2kb的数据
buf2 := make([]byte,1024*2)
n, err1 := fp.Read(buf2)
# 使用文件缓存区读取数据
fp1,err := os.Open("./data.txt")
# 创建文件缓存区
r := bufio.NewReader(fp1)
# 行读取(对slice,err := r.ReadBytes('\n')进行迭代,可以循环读取内容)
slice,err := r.ReadBytes('\n')
go中定义用户输入内容函数为fmt.Scan,使用这个函数接受用户输入数据
var fileName string
fmt.Println("请输入文件名")
fmt.Scan(&fileName)
2.4从一个文件读取数据写入另一个文件
var fileName string
fmt.Println("请输入需要打开的文件名")
fmt.Scan(&fileName)
sf,err1 := os.Open(fileName)
if err1!=nil {
fmt.Println("打开文件失败")
}
df,err2 := os.Create("./data.txt")
if err2!=nil {
fmt.Println("创建文件失败")
}
defer sf.Close()
defer df.Close()
# 读数据与写数据
# 一次读取4kb数据
buf := make([]byte,1024*4)
for {
n,err := sf.Read(buf)
if err != nil {
if err == io.EOF {
break
}
}
# 写入,因为buf是字符型切片,所以不用转换了
df.Write(buf[:n])
}
网友评论