這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
今天我們完結了這個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
Golang標準庫
未經允許,不得轉載本站任何文章:微度網路 » golang講解(go語言)標準庫分析之strings結束篇