go标准库中的base32包与base64包的提供的方法以及使用几乎一至,不同的地方就是就是底层实现,一个是进行base32编解码操作,另一个是进行base64编解码操作。如果是已经知道go base32包的使用的话,可以不用看下面的内容,或者是简单的过一遍。
1、golang中的base64包中有什么内容?
2、base64给我们开发者提供了什么?以及用法?
3、编码与解码各有哪几种操作?
一、golang中的base64包中有什么内容?
这个包实现了RFC 4648 里定义的 base64 编码。封装了base64的编解码操作。
二、base64给我们开发者提供了什么?以及用法?
变量
RFC 4648 里定义的标准 base64 编码方法
var StdEncoding = NewEncoding(encodeStd)
修改过的 base64 编码,一般用于URL和文件名
var URLEncoding = NewEncoding(encodeURL)
函数:
func NewDecoder(enc *Encoding, r io.Reader) io.Reader
func NewEncoder(enc *Encoding, r io.Writer) io.WriteCloser
CorruptinputError 类型
func (e CorruptinputError) Error() string
Encoding 类型
func NewEncoding(encoder string) *Encoding
func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
func (enc *Encoding) DecodeString(s string) ([]byte, error)
func (enc *Encoding) DecodedLen(n int) int
func (enc *Encoding) Encode(dst, src []byte)
func (enc *Encoding) EncodeToString(src []byte) string
func (enc *Encoding) EncodedLen(n int) int
详解
1、func NewDecoder(enc *Encoding, r io.Reader) io.Reader
参数列表:
enc Encoding 结构指针
w io.Reader 接口
返回值:
io.Reader 接口
功能说明:
返回一个 io.Reader 接口,用于流式解码
代码实例
package main
import (
"strings"
"encoding/base64"
"fmt"
)
func main() {
// base 64 数据
src := "dGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg=="
reader := strings.NewReader(src)
decoder := base64.NewDecoder(base64.StdEncoding, reader)
// 以流式解码
buf := make([]byte, 2)
// 保存解码后的数据
dst := ""
for {
n, err := decoder.Read(buf)
if n == 0 || err != nil {
break
}
dst += string(buf[:n])
}
fmt.Println("解码后的数据为:", dst)
}
2)func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser
参数列表:
enc Encoding 指针结构
w io.Writer 接口
返回值:
io.WriteCloser 接口
功能说明:
返回一个io.WriteCloser 接口,用于流式编码
代码实例
package main
import (
"os"
"encoding/base64"
)
func main() {
src := []byte("this is a test string.")
encoder := base64.NewEncoder(base64.StdEncoding, os.Stdout)
encoder.Write(src)
encoder.Close()
}
3)func (e CorruptinputError) Error() string
参数列表:无
返回值:错误描述
4)func NewEncoding(encoder string) *Encoding
参数列表:encoder 64字节长的字符串,用做转换表
返回值:Encoding 结构指针
功能说明:计算 base64 解码输出需要的最大字节数
代码实例
package examples
import (
"fmt"
"encoding/base64"
)
// 我们的编码表,64 字节
const encodeTest = "----------------------------------------------------------------"
func ExampleNewEncoding1() {
enc := base64.NewEncoding(encodeTest)
src := "this is a test string."
dst := enc.EncodeToString([]byte(src))
// 最后不足4字节的会用"="补全
fmt.Println(dst)
fmt.Println(len(dst) % 4 == 0)
}
5)func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
参数列表:
1)dst 解码缓冲区
2)src 要解码的字符串切片
返回值:
1)n 解码到缓冲区的字节数
2)err 可能的错误
功能说明:对输入的字符串进行 base 64 解码
代码实例
package main
import (
"encoding/base64"
"fmt"
"log"
)
func main() {
src := []byte("dGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg==")
maxLen := base64.StdEncoding.DecodedLen(len(src))
dst := make([]byte, maxLen)
n, err := base64.StdEncoding.Decode(dst, src)
if err != nil {
log.Fatalln(err)
}
fmt.Println("解码后的数据为:", string(dst[:n]))
}
6)func (enc *Encoding) DecodeString(s string) ([]byte, error)
参数列表:s 要进行 base64 解码的字符串
返回值:
1)经过 base64 解码后字符串切片
2)可能的错误
功能说明:对传入的字符串进行 base64 解码
参数实例
package main
import (
"encoding/base64"
"fmt"
"log"
)
func main() {
src := "dGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg=="
dst, err := base64.StdEncoding.DecodeString(src)
if err != nil {
log.Fatalln(err)
}
fmt.Println("解码后的数据为:", string(dst))
}
7)func (enc *Encoding) DecodedLen(n int) int
参数列表:n 要进行 base64 解码的字节数
返回值:base64 解码输出需要的最大字节数
代码实例
package main
import (
"encoding/base64"
"fmt"
)
func main() {
src := []byte("dGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg==")
maxLen := base64.StdEncoding.DecodedLen(len(src))
fmt.Println("解码后的数据最长长度:", maxLen)
}
8)func (enc *Encoding) Encode(dst, src []byte)
参数列表:
1)dst 编码缓冲区
2)src 要编码的字符串切片
返回值:无
功能说明:对输入的字符串进行base64编码
代码实例
package main
import (
"encoding/base64"
"fmt"
)
func main() {
src := []byte("this is a test string.")
maxLen := base64.StdEncoding.EncodedLen(len(src))
dst := make([]byte, maxLen)
base64.StdEncoding.Encode(dst, src)
fmt.Println("编码后的数据为:", string(dst))
}
9)func (enc *Encoding) EncodeToString(src []byte) string
参数列表:src 表示要进行 base64 编码的字符串切片
返回值:经过 base64 编码后的字符串
功能说明:对传入的字符串切片进行 base64 编码
代码实例:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
src := []byte("this is a test string.")
dst := base64.StdEncoding.EncodeToString(src)
fmt.Println("编码后的数据:", dst)
}
10)func (enc *Encoding) EncodedLen(n int) int
参数列表:n 要进行 base64 编码的字节数
返回值:经过 base64 编码后的字节数
功能说明:计算编码输出的字节数
代码实例
package main
import (
"encoding/base64"
"fmt"
)
func main() {
src := []byte("this is a test string.")
maxLen := base64.StdEncoding.EncodedLen(len(src))
fmt.Println("编码后的数据长度为:", maxLen)
}
三、编码与解码各有哪几种操作?
编码:
1)方法一:func (enc *Encoding) Encode(dst, src []byte)
2)方法二:func (enc *Encoding) EncodeToString(src []byte) string
解码:
1)方法一:func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
2)方法二:func (enc *Encoding) DecodeString(s string) ([]byte, error)
有疑问加站长微信联系(非本文作者)