golang讲解(go语言)标准库分析之strings结束篇
今天我们完结了这个strings的包,其实我们就剩下了type Reader和type Replacer这个我们之间讲过io的包,这样大家理解起来就比较省劲了!
(1)func NewReader(s string) *Reader
通过读取一个字符串之后返回Reader对象,然后实现io.Reader, io.ReaderAt, io.Seeker, io.ByteScanner, 和io.RuneScanner 接口
import (
"fmt"
"reflect"
"strings")func main() {
reader := strings.NewReader("widuu web")
fmt.Println(reflect.TypeOf(reader)) //*strings.Reader
fmt.Println(reader.Len()) //9}
(2)func (r *Reader) Len() int
这个函数很简单就是实现上边的接口的读取的字符串的数,上边已经写了,哈哈这里就省了哈
(3)func (r *Reader) Read(b []byte) (n int, err error)
,读取数据到b中,返回读取的实际大小n,如果出错返回err,例如EOF或者b的长度为0
import (
"fmt"
"strings")func main() {
reader := strings.NewReader("hello widuu web")
n, err := reader.Read(make([]byte, 10))
if err != nil {
fmt.Println(err)
}
fmt.Println(n) //10}
(4)func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
这个跟我们前边写的是一样的都是根据偏移量来读取数据的
import (
"fmt"
"strings")func main() {
reader := strings.NewReader("hello widuu web")
b := make([]byte, 10)
n, err := reader.ReadAt(b, 2)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(b[:n])) //llo widuu}
(5)func (r *Reader) ReadByte() (b byte, err error)
,这个估计我都不用说大家都知道就是读取一个byte数据,然后返回的直接就是byte
import (
"fmt"
"strings")func main() {
reader := strings.NewReader("hello widuu web")
data, err := reader.ReadByte()
if err == nil {
fmt.Println(string(data))
return
}
fmt.Println(err) //返回一个字节h}
(6)func (r *Reader) ReadRune() (ch rune, size int, err error)
这个同上只不过返回的是一个rune类型的
import (
"fmt"
"strings")func main() {
reader := strings.NewReader("hello widuu web")
r, n, err := reader.ReadRune()
if err != nil {
fmt.Println(err)
}
fmt.Println(string(r), n) //h,1}
(7)func (r *Reader) Seek(offset int64, whence int) (int64, error)
根据whence来移动offset,改变指针的
import (
"fmt"
"strings")func main() {
reader := strings.NewReader("hello widuu")
b := make([]byte, 8)
n, _ := reader.Read(b)
fmt.Println(string(b[:n])) //hello wi 这个时候没有读到要读d
reader.Seek(2, 1) //这个时候我们在读取位置 偏移2
n1, _ := reader.Read(b)
fmt.Println(string(b[:n1])) //u}
(8)func (r *Reader) UnreadByte() error
当前读取的位置向前移一个byte
import (
"fmt"
"strings")func main() {
reader := strings.NewReader("hello widuu")
b := make([]byte, 8)
n, _ := reader.Read(b)
fmt.Println(string(b[:n])) //hello wi 这个时候没有读到要读d
reader.Seek(2, 1) //这个时候我们在读取位置 偏移2
reader.UnreadByte() //然后向前偏移1字节
n1, _ := reader.Read(b)
fmt.Println(string(b[:n1])) //uu}
(9)func (r *Reader) UnreadRune() error
这个一样只不过类型变了而已,参照上边的
(10)func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
这个借口主要继承了io.Write的功能所以我们可以这样做
import (
"fmt"
"os"
"strings")func main() {
reader := strings.NewReader("hello widuu")
w, _ := os.Create("test.txt")
defer w.Close()
n, err := reader.WriteTo(w)
if err != nil {
fmt.Println(err)
}
fmt.Println(n) //11}
(11)func NewReplacer(oldnew ...string) *Replacer NewReplacer
从列表中返回一个新的替换后的字符串,oldnew是slice
import (
"fmt"
"strings")func main() {
r := strings.NewReplacer("<", "<", ">", ">")
fmt.Println(r.Replace("This is <b>HTML</b>!")) //This is <b>HTML</b>!}
(2)func (r *Replacer) Replace(s string) string
这个上边已经写出函数了,就是对字符串进行替换,大家可以参考上边的程序
(3)func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
函数讲字符串替换后,然后写入w中
import (
"fmt"
"io/ioutil"
"os"
"strings")func main() {
r := strings.NewReplacer("<", "<", ">", ">")
w, _ := os.OpenFile("test1.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
defer w.Close()
n, err := r.WriteString(w, "This is <b>HTML</b>!")
if err != nil {
fmt.Println(err)
}
fmt.Println(n)
d, _ := ioutil.ReadFile("test1.txt") //32
fmt.Println(string(d)) //This is <b>HTML</b>!}
每天只讲一点golang的标准库,方便大家学习和使用,更多的时候去理解标准库,大家多动手,如果你喜欢请继续关注我们
github https://github.com/widuu/gopkg
- 生物信息学技能面试题(第5题)-根据GTF画基因的多个转录本结构
- 学会WCF之试错法——超时
- 学会WCF之试错法——客户端调用基础
- 【直播】我的基因组58:用R包SNPRelate来对我的基因型跟hapmap计划数据比较
- 生物信息学技能面试题(第4题)-多个同样的行列式文件合并起来
- PHP 底层的运行机制与原理
- asp.net web api 版本控制
- 如何编写更好的SQL查询:终极指南(上)
- asp.net web api 异常捕获
- asp.net web api 文件上传
- 使用MySQL正则表达式 __MySQL必知必会
- 史上最好用的免费翻蔷利器
- asp.net web api 接口安全与角色控制
- TensorFlow从0到1 | 第十五章 重新思考神经网络初始化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈Python爬虫原理与数据抓取
- PHP封装cURL工具类与应用示例
- php中isset与empty函数的困惑与用法分析
- 布隆过滤器(bloom filter)及php和redis实现布隆过滤器的方法
- PHP使用反向Ajax技术实现在线客服系统详解
- PHP设计模式之适配器模式(Adapter)原理与用法详解
- laravel5.5框架的上传图片功能实例分析【仅传到服务器端】
- Laravel5.1框架自带权限控制系统 ACL用法分析
- php使用filter_var函数判断邮箱,url,ip格式示例
- Python json格式化打印实现过程解析
- PHP使用DOM对XML解析处理操作示例
- OpenCV Python实现图像指定区域裁剪
- Laravel框架实现多个视图共享相同数据的方法详解
- python如何快速生成时间戳
- 从python读取sql的实例方法