Files
uTools-Manuals/src/docs/go/bytes.html
2020-06-28 23:41:19 +08:00

422 lines
42 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="container">
<h1 id="pkg-overview">package bytes</h1>
<p><code>import "bytes"</code>
</p><p>bytes包实现了操作[]byte的常用函数。本包的函数和strings包的函数相当类似。</p>
<h2 id="pkg-constants">Constants </h2>
<pre>const <span id="MinRead">MinRead</span> = 512</pre>
<p>MinRead是被Buffer.ReadFrom传递给Read调用的最小尺寸。只要该Buffer在保存内容之外有最少MinRead字节的余量其ReadFrom方法就不会增加底层的缓冲。</p>
<h2 id="pkg-variables">Variables </h2>
<pre>var <span id="ErrTooLarge">ErrTooLarge</span> = <a href="errors.htm">errors</a>.<a href="errors.htm#New">New</a>("bytes.Buffer: too large")</pre>
<p>如果内存中不能申请足够保存数据的缓冲ErrTooLarge就会被传递给panic函数。</p>
<h2 id="Compare">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes_decl.go?name=release#24" title="View Source">Compare</a> </h2>
<pre class="funcdecl">func Compare(a, b []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#int">int</a></pre>
<p>Compare函数返回一个整数表示两个[]byte切片按字典序比较的结果类同C的strcmp。如果a==b返回0如果a&lt;b返回-1否则返回+1。nil参数视为空切片。</p>
<div class="panel-group">
<div class="panel panel-default" id="example-Compare">
<div class="panel-heading" onclick="document.getElementById('ex-Compare').style.display = document.getElementById('ex-Compare').style.display=='none'?'block':'none';">Example</div>
<div class="panel-collapse collapse" id="ex-Compare">
<div class="panel-body">
<pre><span class="com">// Interpret Compare's result by comparing it to zero.</span>
var a, b []byte
if bytes.Compare(a, b) &lt; 0 {
<span class="com">// a less b</span>
}
if bytes.Compare(a, b) &lt;= 0 {
<span class="com">// a less or equal b</span>
}
if bytes.Compare(a, b) &gt; 0 {
<span class="com">// a greater b</span>
}
if bytes.Compare(a, b) &gt;= 0 {
<span class="com">// a greater or equal b</span>
}
<span class="com">// Prefer Equal to Compare for equality comparisons.</span>
if bytes.Equal(a, b) {
<span class="com">// a equal b</span>
}
if !bytes.Equal(a, b) {
<span class="com">// a not equal b</span>
}
</pre>
</div>
</div>
</div>
<div class="panel panel-default" id="example-Compare--Search">
<div class="panel-heading" onclick="document.getElementById('ex-Compare--Search').style.display = document.getElementById('ex-Compare--Search').style.display=='none'?'block':'none';">Example (Search)</div>
<div class="panel-collapse collapse" id="ex-Compare--Search">
<div class="panel-body">
<pre><span class="com">// Binary search to find a matching byte slice.</span>
var needle []byte
var haystack [][]byte <span class="com">// Assume sorted</span>
i := sort.Search(len(haystack), func(i int) bool {
<span class="com">// Return haystack[i] &gt;= needle.</span>
return bytes.Compare(haystack[i], needle) &gt;= 0
})
if i &lt; len(haystack) &amp;&amp; bytes.Equal(haystack[i], needle) {
<span class="com">// Found it!</span>
}
</pre>
</div>
</div>
</div>
</div>
<h2 id="Equal">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes_decl.go?name=release#17" title="View Source">Equal</a> </h2>
<pre class="funcdecl">func Equal(a, b []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#bool">bool</a></pre>
<p>判断两个切片的内容是否完全相同。</p>
<h2 id="EqualFold">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#646" title="View Source">EqualFold</a> </h2>
<pre class="funcdecl">func EqualFold(s, t []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#bool">bool</a></pre>
<p>判断两个utf-8编码切片将unicode大写、小写、标题三种格式字符视为相同是否相同。</p>
<h2 id="Runes">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#593" title="View Source">Runes</a> </h2>
<pre class="funcdecl">func Runes(s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#rune">rune</a></pre>
<p>Runes函数返回和s等价的[]rune切片。将utf-8编码的unicode码值分别写入单个rune</p>
<h2 id="HasPrefix">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#331" title="View Source">HasPrefix</a> </h2>
<pre class="funcdecl">func HasPrefix(s, prefix []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#bool">bool</a></pre>
<p>判断s是否有前缀切片prefix。</p>
<h2 id="HasSuffix">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#336" title="View Source">HasSuffix</a> </h2>
<pre class="funcdecl">func HasSuffix(s, suffix []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#bool">bool</a></pre>
<p>判断s是否有后缀切片suffix。</p>
<h2 id="Contains">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#81" title="View Source">Contains</a></h2>
<pre class="funcdecl">func Contains(b, subslice []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#bool">bool</a></pre>
<p>判断切片b是否包含子切片subslice。</p>
<h2 id="Count">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#50" title="View Source">Count</a> </h2>
<pre class="funcdecl">func Count(s, sep []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#int">int</a></pre>
<p>Count计算s中有多少个不重叠的sep子切片。</p>
<h2 id="Index">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#86" title="View Source">Index</a> </h2>
<pre class="funcdecl">func Index(s, sep []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#int">int</a></pre>
<p>子切片sep在s中第一次出现的位置不存在则返回-1。</p>
<h2 id="IndexByte">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes_decl.go?name=release#10" title="View Source">IndexByte</a> </h2>
<pre class="funcdecl">func IndexByte(s []<a href="builtin.htm#byte">byte</a>, c <a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#int">int</a></pre>
<p>字符c在s中第一次出现的位置不存在则返回-1。</p>
<h2 id="IndexRune">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#143" title="View Source">IndexRune</a> </h2>
<pre class="funcdecl">func IndexRune(s []<a href="builtin.htm#byte">byte</a>, r <a href="builtin.htm#rune">rune</a>) <a href="builtin.htm#int">int</a></pre>
<p>unicode字符r的utf-8编码在s中第一次出现的位置不存在则返回-1。</p>
<h2 id="IndexAny">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#158" title="View Source">IndexAny</a> </h2>
<pre class="funcdecl">func IndexAny(s []<a href="builtin.htm#byte">byte</a>, chars <a href="builtin.htm#string">string</a>) <a href="builtin.htm#int">int</a></pre>
<p>字符串chars中的任一utf-8编码在s中第一次出现的位置如不存在或者chars为空字符串则返回-1</p>
<h2 id="IndexFunc">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#510" title="View Source">IndexFunc</a> </h2>
<pre class="funcdecl">func IndexFunc(s []<a href="builtin.htm#byte">byte</a>, f func(r <a href="builtin.htm#rune">rune</a>) <a href="builtin.htm#bool">bool</a>) <a href="builtin.htm#int">int</a></pre>
<p>s中第一个满足函数f的位置i该处的utf-8码值r满足f(r)==true不存在则返回-1</p>
<h2 id="LastIndex">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#126" title="View Source">LastIndex</a> </h2>
<pre class="funcdecl">func LastIndex(s, sep []<a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#int">int</a></pre>
<p>切片sep在字符串s中最后一次出现的位置不存在则返回-1。</p>
<h2 id="LastIndexAny">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#183" title="View Source">LastIndexAny</a> </h2>
<pre class="funcdecl">func LastIndexAny(s []<a href="builtin.htm#byte">byte</a>, chars <a href="builtin.htm#string">string</a>) <a href="builtin.htm#int">int</a></pre>
<p>字符串chars中的任一utf-8字符在s中最后一次出现的位置如不存在或者chars为空字符串则返回-1。</p>
<h2 id="LastIndexFunc">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#517" title="View Source">LastIndexFunc</a> </h2>
<pre class="funcdecl">func LastIndexFunc(s []<a href="builtin.htm#byte">byte</a>, f func(r <a href="builtin.htm#rune">rune</a>) <a href="builtin.htm#bool">bool</a>) <a href="builtin.htm#int">int</a></pre>
<p>s中最后一个满足函数f的unicode码值的位置i不存在则返回-1。</p>
<h2 id="Title">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#443" title="View Source">Title</a> </h2>
<pre class="funcdecl">func Title(s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p align="left">返回s中每个单词的首字母都改为标题格式的拷贝。</p>
<p align="left">BUG: Title用于划分单词的规则不能很好的处理Unicode标点符号。</p>
<h2 id="ToLower">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#391" title="View Source">ToLower</a> </h2>
<pre class="funcdecl">func ToLower(s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将所有字母都转为对应的小写版本的拷贝。</p>
<h2 id="ToLowerSpecial">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#404" title="View Source">ToLowerSpecial</a> </h2>
<pre class="funcdecl">func ToLowerSpecial(_case <a href="unicode.htm">unicode</a>.<a href="unicode.htm#SpecialCase">SpecialCase</a>, s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>使用_case规定的字符映射返回将所有字母都转为对应的小写版本的拷贝。</p>
<h2 id="ToUpper">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#388" title="View Source">ToUpper</a> </h2>
<pre class="funcdecl">func ToUpper(s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将所有字母都转为对应的大写版本的拷贝。</p>
<h2 id="ToUpperSpecial">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#398" title="View Source">ToUpperSpecial</a> </h2>
<pre class="funcdecl">func ToUpperSpecial(_case <a href="unicode.htm">unicode</a>.<a href="unicode.htm#SpecialCase">SpecialCase</a>, s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>使用_case规定的字符映射返回将所有字母都转为对应的大写版本的拷贝。</p>
<h2 id="ToTitle">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#394" title="View Source">ToTitle</a> </h2>
<pre class="funcdecl">func ToTitle(s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将所有字母都转为对应的标题版本的拷贝。</p>
<h2 id="ToTitleSpecial">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#410" title="View Source">ToTitleSpecial</a> </h2>
<pre class="funcdecl">func ToTitleSpecial(_case <a href="unicode.htm">unicode</a>.<a href="unicode.htm#SpecialCase">SpecialCase</a>, s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>使用_case规定的字符映射返回将所有字母都转为对应的标题版本的拷贝。</p>
<h2 id="Repeat">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#378" title="View Source">Repeat</a> </h2>
<pre class="funcdecl">func Repeat(b []<a href="builtin.htm#byte">byte</a>, count <a href="builtin.htm#int">int</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回count个b串联形成的新的切片。</p>
<h2 id="Replace">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#608" title="View Source">Replace</a> </h2>
<pre class="funcdecl">func Replace(s, old, new []<a href="builtin.htm#byte">byte</a>, n <a href="builtin.htm#int">int</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将s中前n个不重叠old切片序列都替换为new的新的切片拷贝如果n&lt;0会替换所有old子切片。</p>
<h2 id="Map">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#344" title="View Source">Map</a> </h2>
<pre class="funcdecl">func Map(mapping func(r <a href="builtin.htm#rune">rune</a>) <a href="builtin.htm#rune">rune</a>, s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>将s的每一个unicode码值r都替换为mapping(r)返回这些新码值组成的切片拷贝。如果mapping返回一个负值将会丢弃该码值而不会被替换返回值中对应位置将没有码值</p>
<h2 id="Trim">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#570" title="View Source">Trim</a> </h2>
<pre class="funcdecl">func Trim(s []<a href="builtin.htm#byte">byte</a>, cutset <a href="builtin.htm#string">string</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将s前后端所有cutset包含的unicode码值都去掉的子切片。共用底层数组</p>
<h2 id="TrimSpace">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#588" title="View Source">TrimSpace</a> </h2>
<pre class="funcdecl">func TrimSpace(s []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将s前后端所有空白unicode.IsSpace指定都去掉的子切片。共用底层数组</p>
<h2 id="TrimFunc">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#485" title="View Source">TrimFunc</a> </h2>
<pre class="funcdecl">func TrimFunc(s []<a href="builtin.htm#byte">byte</a>, f func(r <a href="builtin.htm#rune">rune</a>) <a href="builtin.htm#bool">bool</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将s前后端所有满足f的unicode码值都去掉的子切片。共用底层数组</p>
<h2 id="TrimLeft">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#576" title="View Source">TrimLeft</a> </h2>
<pre class="funcdecl">func TrimLeft(s []<a href="builtin.htm#byte">byte</a>, cutset <a href="builtin.htm#string">string</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将s前端所有cutset包含的unicode码值都去掉的子切片。共用底层数组</p>
<h2 id="TrimLeftFunc">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#462" title="View Source">TrimLeftFunc</a> </h2>
<pre class="funcdecl">func TrimLeftFunc(s []<a href="builtin.htm#byte">byte</a>, f func(r <a href="builtin.htm#rune">rune</a>) <a href="builtin.htm#bool">bool</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将s前端所有满足f的unicode码值都去掉的子切片。共用底层数组</p>
<h2 id="TrimPrefix">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#491" title="View Source">TrimPrefix</a> </h2>
<pre class="funcdecl">func TrimPrefix(s, prefix []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回去除s可能的前缀prefix的子切片。共用底层数组</p>
<div class="panel-group">
<div class="panel panel-default" id="example-TrimPrefix">
<div class="panel-heading" onclick="document.getElementById('ex-TrimPrefix').style.display = document.getElementById('ex-TrimPrefix').style.display=='none'?'block':'none';">Example</div>
<div class="panel-collapse collapse" id="ex-TrimPrefix">
<div class="panel-body">
<pre>var b = []byte("Goodbye,, world!")
b = bytes.TrimPrefix(b, []byte("Goodbye,"))
b = bytes.TrimPrefix(b, []byte("See ya,"))
fmt.Printf("Hello%s", b)</pre>
<p>Output:
</p><pre>Hello, world!
</pre>
</div>
</div>
</div>
</div>
<h2 id="TrimRight">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#582" title="View Source">TrimRight</a> </h2>
<pre class="funcdecl">func TrimRight(s []<a href="builtin.htm#byte">byte</a>, cutset <a href="builtin.htm#string">string</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将s后端所有cutset包含的unicode码值都去掉的子切片。共用底层数组</p>
<h2 id="TrimRightFunc">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#472" title="View Source">TrimRightFunc</a> </h2>
<pre class="funcdecl">func TrimRightFunc(s []<a href="builtin.htm#byte">byte</a>, f func(r <a href="builtin.htm#rune">rune</a>) <a href="builtin.htm#bool">bool</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回将s后端所有满足f的unicode码值都去掉的子切片。共用底层数组</p>
<h2 id="TrimSuffix">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#500" title="View Source">TrimSuffix</a> </h2>
<pre class="funcdecl">func TrimSuffix(s, suffix []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回去除s可能的后缀suffix的子切片。共用底层数组</p>
<div class="panel-group">
<div class="panel panel-default" id="example-TrimSuffix">
<div class="panel-heading" onclick="document.getElementById('ex-TrimSuffix').style.display = document.getElementById('ex-TrimSuffix').style.display=='none'?'block':'none';">Example</div>
<div class="panel-collapse collapse" id="ex-TrimSuffix">
<div class="panel-body">
<pre>var b = []byte("Hello, goodbye, etc!")
b = bytes.TrimSuffix(b, []byte("goodbye, etc!"))
b = bytes.TrimSuffix(b, []byte("gopher"))
b = append(b, bytes.TrimSuffix([]byte("world!"), []byte("x!"))...)
os.Stdout.Write(b)</pre>
<p>Output:
</p><pre>Hello, world!
</pre>
</div>
</div>
</div>
</div>
<h2 id="Fields">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#262" title="View Source">Fields</a> </h2>
<pre class="funcdecl">func Fields(s []<a href="builtin.htm#byte">byte</a>) [][]<a href="builtin.htm#byte">byte</a></pre>
<p>返回将字符串按照空白unicode.IsSpace确定可以是一到多个连续的空白字符分割的多个子切片。如果字符串全部是空白或者是空字符串的话会返回空切片。</p>
<h2 id="FieldsFunc">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#270" title="View Source">FieldsFunc</a> </h2>
<pre class="funcdecl">func FieldsFunc(s []<a href="builtin.htm#byte">byte</a>, f func(<a href="builtin.htm#rune">rune</a>) <a href="builtin.htm#bool">bool</a>) [][]<a href="builtin.htm#byte">byte</a></pre>
<p>类似Fields但使用函数f来确定分割符满足f的utf-8码值。如果字符串全部是分隔符或者是空字符串的话会返回空切片。</p>
<h2 id="Split">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#250" title="View Source">Split</a> </h2>
<pre class="funcdecl">func Split(s, sep []<a href="builtin.htm#byte">byte</a>) [][]<a href="builtin.htm#byte">byte</a></pre>
<p>用去掉s中出现的sep的方式进行分割会分割到结尾并返回生成的所有[]byte切片组成的切片每一个sep都会进行一次切割即使两个sep相邻也会进行两次切割。如果sep为空字符Split会将s切分成每一个unicode码值一个[]byte切片。</p>
<h2 id="SplitN">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#233" title="View Source">SplitN</a> </h2>
<pre class="funcdecl">func SplitN(s, sep []<a href="builtin.htm#byte">byte</a>, n <a href="builtin.htm#int">int</a>) [][]<a href="builtin.htm#byte">byte</a></pre>
<p>用去掉s中出现的sep的方式进行分割会分割到最多n个子切片并返回生成的所有[]byte切片组成的切片每一个sep都会进行一次切割即使两个sep相邻也会进行两次切割。如果sep为空字符Split会将s切分成每一个unicode码值一个[]byte切片。参数n决定返回的切片的数目</p>
<pre>n &gt; 0 : 返回的切片最多n个子字符串最后一个子字符串包含未进行切割的部分。
n == 0: 返回nil
n &lt; 0 : 返回所有的子字符串组成的切片
</pre>
<h2 id="SplitAfter">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#256" title="View Source">SplitAfter</a> </h2>
<pre class="funcdecl">func SplitAfter(s, sep []<a href="builtin.htm#byte">byte</a>) [][]<a href="builtin.htm#byte">byte</a></pre>
<p>用从s中出现的sep后面切断的方式进行分割会分割到结尾并返回生成的所有[]byte切片组成的切片每一个sep都会进行一次切割即使两个sep相邻也会进行两次切割。如果sep为空字符Split会将s切分成每一个unicode码值一个[]byte切片。</p>
<h2 id="SplitAfterN">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#242" title="View Source">SplitAfterN</a> </h2>
<pre class="funcdecl">func SplitAfterN(s, sep []<a href="builtin.htm#byte">byte</a>, n <a href="builtin.htm#int">int</a>) [][]<a href="builtin.htm#byte">byte</a></pre>
<p>用从s中出现的sep后面切断的方式进行分割会分割到最多n个子切片并返回生成的所有[]byte切片组成的切片每一个sep都会进行一次切割即使两个sep相邻也会进行两次切割。如果sep为空字符Split会将s切分成每一个unicode码值一个[]byte切片。参数n决定返回的切片的数目</p>
<pre>n &gt; 0 : 返回的切片最多n个子字符串最后一个子字符串包含未进行切割的部分。
n == 0: 返回nil
n &lt; 0 : 返回所有的子字符串组成的切片
</pre>
<h2 id="Join">func <a href="https://github.com/golang/go/blob/master/src/bytes/bytes.go?name=release#308" title="View Source">Join</a> </h2>
<pre class="funcdecl">func Join(s [][]<a href="builtin.htm#byte">byte</a>, sep []<a href="builtin.htm#byte">byte</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>将一系列[]byte切片连接为一个[]byte切片之间用sep来分隔返回生成的新切片。</p>
<h2 id="Reader">type <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#17" title="View Source">Reader</a> </h2>
<pre>type Reader struct {
<span class="com">// 内含隐藏或非导出字段</span>
}</pre>
<p>Reader类型通过从一个[]byte读取数据实现了io.Reader、io.Seeker、io.ReaderAt、io.WriterTo、io.ByteScanner、io.RuneScanner接口。</p>
<h3 id="NewReader">func <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#144" title="View Source">NewReader</a> </h3>
<pre class="funcdecl">func NewReader(b []<a href="builtin.htm#byte">byte</a>) *<a href="#Reader">Reader</a></pre>
<p>NewReader创建一个从s读取数据的Reader。</p>
<h3 id="Reader.Len">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#25" title="View Source">Len</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) Len() <a href="builtin.htm#int">int</a></pre>
<p>Len返回r包含的切片中还没有被读取的部分。</p>
<h3 id="Reader.Read">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#32" title="View Source">Read</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) Read(b []<a href="builtin.htm#byte">byte</a>) (n <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<h3 id="Reader.ReadByte">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#60" title="View Source">ReadByte</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) ReadByte() (b <a href="builtin.htm#byte">byte</a>, err <a href="builtin.htm#error">error</a>)</pre>
<h3 id="Reader.UnreadByte">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#70" title="View Source">UnreadByte</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) UnreadByte() <a href="builtin.htm#error">error</a></pre>
<h3 id="Reader.ReadRune">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#79" title="View Source">ReadRune</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) ReadRune() (ch <a href="builtin.htm#rune">rune</a>, size <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<h3 id="Reader.UnreadRune">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#94" title="View Source">UnreadRune</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) UnreadRune() <a href="builtin.htm#error">error</a></pre>
<h3 id="Reader.Seek">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#104" title="View Source">Seek</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) Seek(offset <a href="builtin.htm#int64">int64</a>, whence <a href="builtin.htm#int">int</a>) (<a href="builtin.htm#int64">int64</a>, <a href="builtin.htm#error">error</a>)</pre>
<p>Seek实现了io.Seeker接口。</p>
<h3 id="Reader.ReadAt">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#45" title="View Source">ReadAt</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) ReadAt(b []<a href="builtin.htm#byte">byte</a>, off <a href="builtin.htm#int64">int64</a>) (n <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<h3 id="Reader.WriteTo">func (*Reader) <a href="https://github.com/golang/go/blob/master/src/bytes/reader.go?name=release#125" title="View Source">WriteTo</a> </h3>
<pre class="funcdecl">func (r *<a href="#Reader">Reader</a>) WriteTo(w <a href="io.htm">io</a>.<a href="io.htm#Writer">Writer</a>) (n <a href="builtin.htm#int64">int64</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>WriteTo实现了io.WriterTo接口。</p>
<h2 id="Buffer">type <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#17" title="View Source">Buffer</a> </h2>
<pre>type Buffer struct {
<span class="com">// 内含隐藏或非导出字段</span>
}</pre>
<p>Buffer是一个实现了读写方法的可变大小的字节缓冲。本类型的零值是一个空的可用于读写的缓冲。</p>
<div class="panel-group">
<div class="panel panel-default" id="example-Buffer">
<div class="panel-heading" onclick="document.getElementById('ex-Buffer').style.display = document.getElementById('ex-Buffer').style.display=='none'?'block':'none';">Example</div>
<div class="panel-collapse collapse" id="ex-Buffer">
<div class="panel-body">
<pre>var b bytes.Buffer <span class="com">// A Buffer needs no initialization.</span>
b.Write([]byte("Hello "))
fmt.Fprintf(&amp;b, "world!")
b.WriteTo(os.Stdout)</pre>
<p>Output:
</p><pre>Hello world!
</pre>
</div>
</div>
</div>
<div class="panel panel-default" id="example-Buffer--Reader">
<div class="panel-heading" onclick="document.getElementById('ex-Buffer--Reader').style.display = document.getElementById('ex-Buffer--Reader').style.display=='none'?'block':'none';">Example (Reader)</div>
<div class="panel-collapse collapse" id="ex-Buffer--Reader">
<div class="panel-body">
<pre><span class="com">// A Buffer can turn a string or a []byte into an io.Reader.</span>
buf := bytes.NewBufferString("R29waGVycyBydWxlIQ==")
dec := base64.NewDecoder(base64.StdEncoding, buf)
io.Copy(os.Stdout, dec)</pre>
<p>Output:
</p><pre>Gophers rule!
</pre>
</div>
</div>
</div>
</div>
<h3 id="NewBuffer">func <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#402" title="View Source">NewBuffer</a> </h3>
<pre class="funcdecl">func NewBuffer(buf []<a href="builtin.htm#byte">byte</a>) *<a href="#Buffer">Buffer</a></pre>
<p>NewBuffer使用buf作为初始内容创建并初始化一个Buffer。本函数用于创建一个用于读取已存在数据的buffer也用于指定用于写入的内部缓冲的大小此时buf应为一个具有指定容量但长度为0的切片。buf会被作为返回值的底层缓冲切片。</p>
<p>大多数情况下new(Buffer)或只是声明一个Buffer类型变量就足以初始化一个Buffer了。</p>
<h3 id="NewBufferString">func <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#410" title="View Source">NewBufferString</a> </h3>
<pre class="funcdecl">func NewBufferString(s <a href="builtin.htm#string">string</a>) *<a href="#Buffer">Buffer</a></pre>
<p>NewBuffer使用s作为初始内容创建并初始化一个Buffer。本函数用于创建一个用于读取已存在数据的buffer。</p>
<p>大多数情况下new(Buffer)或只是声明一个Buffer类型变量就足以初始化一个Buffer了。</p>
<h3 id="Buffer.Reset">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#75" title="View Source">Reset</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) Reset()</pre>
<p>Reset重设缓冲因此会丢弃全部内容等价于b.Truncate(0)。</p>
<h3 id="Buffer.Len">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#57" title="View Source">Len</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) Len() <a href="builtin.htm#int">int</a></pre>
<p>返回缓冲中未读取部分的字节长度b.Len() == len(b.Bytes())。</p>
<h3 id="Buffer.Bytes">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#43" title="View Source">Bytes</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) Bytes() []<a href="builtin.htm#byte">byte</a></pre>
<p>返回未读取部分字节数据的切片len(b.Bytes()) == b.Len()。如果中间没有调用其他方法修改返回的切片的内容会直接改变Buffer的内容。</p>
<h3 id="Buffer.String">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#47" title="View Source">String</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) String() <a href="builtin.htm#string">string</a></pre>
<p>将未读取部分的字节数据作为字符串返回如果b是nil指针会返回"&lt;nil&gt;"。</p>
<h3 id="Buffer.Truncate">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#61" title="View Source">Truncate</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) Truncate(n <a href="builtin.htm#int">int</a>)</pre>
<p>丢弃缓冲中除前n字节数据外的其它数据如果n小于零或者大于缓冲容量将panic。</p>
<h3 id="Buffer.Grow">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#114" title="View Source">Grow</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) Grow(n <a href="builtin.htm#int">int</a>)</pre>
<p>必要时会增加缓冲的容量以保证n字节的剩余空间。调用Grow(n)后至少可以向缓冲中写入n字节数据而无需申请内存。如果n小于零或者不能增加容量都会panic。</p>
<h3 id="Buffer.Read">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#251" title="View Source">Read</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) Read(p []<a href="builtin.htm#byte">byte</a>) (n <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>Read方法从缓冲中读取数据直到缓冲中没有数据或者读取了len(p)字节数据将读取的数据写入p。返回值n是读取的字节数除非缓冲中完全没有数据可以读取并写入p此时返回值err为io.EOF否则err总是nil。</p>
<h3 id="Buffer.Next">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#273" title="View Source">Next</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) Next(n <a href="builtin.htm#int">int</a>) []<a href="builtin.htm#byte">byte</a></pre>
<p>返回未读取部分前n字节数据的切片并且移动读取位置就像调用了Read方法一样。如果缓冲内数据不足会返回整个数据的切片。切片只在下一次调用b的读/写方法前才合法。</p>
<h3 id="Buffer.ReadByte">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#289" title="View Source">ReadByte</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) ReadByte() (c <a href="builtin.htm#byte">byte</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>ReadByte读取并返回缓冲中的下一个字节。如果没有数据可用返回值err为io.EOF。</p>
<h3 id="Buffer.UnreadByte">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#345" title="View Source">UnreadByte</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) UnreadByte() <a href="builtin.htm#error">error</a></pre>
<p>UnreadByte吐出最近一次读取操作读取的最后一个字节。如果最后一次读取操作之后进行了写入本方法会返回错误。</p>
<h3 id="Buffer.ReadRune">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#307" title="View Source">ReadRune</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) ReadRune() (r <a href="builtin.htm#rune">rune</a>, size <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>ReadRune读取并返回缓冲中的下一个utf-8码值。如果没有数据可用返回值err为io.EOF。如果缓冲中的数据是错误的utf-8编码本方法会吃掉一字节并返回(U+FFFD, 1, nil)。</p>
<h3 id="Buffer.UnreadRune">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#330" title="View Source">UnreadRune</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) UnreadRune() <a href="builtin.htm#error">error</a></pre>
<p>UnreadRune吐出最近一次调用ReadRune方法读取的unicode码值。如果最近一次读写操作不是ReadRune本方法会返回错误。这里就能看出来UnreadRune比UnreadByte严格多了</p>
<h3 id="Buffer.ReadBytes">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#362" title="View Source">ReadBytes</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) ReadBytes(delim <a href="builtin.htm#byte">byte</a>) (line []<a href="builtin.htm#byte">byte</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>ReadBytes读取直到第一次遇到delim字节返回一个包含已读取的数据和delim字节的切片。如果ReadBytes方法在读取到delim之前遇到了错误它会返回在错误之前读取的数据以及该错误一般是io.EOF。当且仅当ReadBytes方法返回的切片不以delim结尾时会返回一个非nil的错误。</p>
<h3 id="Buffer.ReadString">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#390" title="View Source">ReadString</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) ReadString(delim <a href="builtin.htm#byte">byte</a>) (line <a href="builtin.htm#string">string</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>ReadString读取直到第一次遇到delim字节返回一个包含已读取的数据和delim字节的字符串。如果ReadString方法在读取到delim之前遇到了错误它会返回在错误之前读取的数据以及该错误一般是io.EOF。当且仅当ReadString方法返回的切片不以delim结尾时会返回一个非nil的错误。</p>
<h3 id="Buffer.Write">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#125" title="View Source">Write</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) Write(p []<a href="builtin.htm#byte">byte</a>) (n <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>Write将p的内容写入缓冲中如必要会增加缓冲容量。返回值n为len(p)err总是nil。如果缓冲变得太大Write会采用错误值ErrTooLarge引发panic。</p>
<h3 id="Buffer.WriteString">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#134" title="View Source">WriteString</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) WriteString(s <a href="builtin.htm#string">string</a>) (n <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>Write将s的内容写入缓冲中如必要会增加缓冲容量。返回值n为len(p)err总是nil。如果缓冲变得太大Write会采用错误值ErrTooLarge引发panic。</p>
<h3 id="Buffer.WriteByte">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#226" title="View Source">WriteByte</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) WriteByte(c <a href="builtin.htm#byte">byte</a>) <a href="builtin.htm#error">error</a></pre>
<p>WriteByte将字节c写入缓冲中如必要会增加缓冲容量。返回值总是nil但仍保留以匹配bufio.Writer的WriteByte方法。如果缓冲太大WriteByte会采用错误值ErrTooLarge引发panic。</p>
<h3 id="Buffer.WriteRune">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#237" title="View Source">WriteRune</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) WriteRune(r <a href="builtin.htm#rune">rune</a>) (n <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>WriteByte将unicode码值r的utf-8编码写入缓冲中如必要会增加缓冲容量。返回值总是nil但仍保留以匹配bufio.Writer的WriteRune方法。如果缓冲太大WriteRune会采用错误值ErrTooLarge引发panic。</p>
<h3 id="Buffer.ReadFrom">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#150" title="View Source">ReadFrom</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) ReadFrom(r <a href="io.htm">io</a>.<a href="io.htm#Reader">Reader</a>) (n <a href="builtin.htm#int64">int64</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>ReadFrom从r中读取数据直到结束并将读取的数据写入缓冲中如必要会增加缓冲容量。返回值n为从r读取并写入b的字节数会返回读取时遇到的除了io.EOF之外的错误。如果缓冲太大ReadFrom会采用错误值ErrTooLarge引发panic。</p>
<h3 id="Buffer.WriteTo">func (*Buffer) <a href="https://github.com/golang/go/blob/master/src/bytes/buffer.go?name=release#198" title="View Source">WriteTo</a> </h3>
<pre class="funcdecl">func (b *<a href="#Buffer">Buffer</a>) WriteTo(w <a href="io.htm">io</a>.<a href="io.htm#Writer">Writer</a>) (n <a href="builtin.htm#int64">int64</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>WriteTo从缓冲中读取数据直到缓冲内没有数据或遇到错误并将这些数据写入w。返回值n为从b读取并写入w的字节数返回值总是可以无溢出的写入int类型但为了匹配io.WriterTo接口设为int64类型。从b读取是遇到的非io.EOF错误及写入w时遇到的错误都会终止本方法并返回该错误。</p>
</div>