一、math
提供基本常数和数学函数
1.数的绝对值
func Abs(x float64 ) float64
特殊情况
Abs(±Inf) = +Inf
Abs(NaN) = NaN
2.func Cbrt(x float64 ) float64
func Cbrt(x float64 ) float64
3.Floor 返回小于或等于 x 的最大整数值。
func Floor(x float64 ) float64
4.Ceil 返回大于或等于 x 的最小整数值。
func Ceil(x float64 ) float64
5.Copysign 返回一个具有 x 大小和 y 符号的值。
func Copysign(x, y float64 ) float64
package main
import (
"fmt"
"math"
)
func main() {
fmt.Printf("%.2f", math.Copysign(3.2, -1))
}
输出
-3.20
6.Dim 返回 x-y 或 0 的最大值。
func Dim(x, y float64 ) float64
func main() {
fmt.Printf("%.2f\n", math.Dim(4, -2))
fmt.Printf("%.2f\n", math.Dim(-4, 2))
}
输出
6.00
0.00
7.Max 返回 x 或 y 中的较大者。
func Max(x, y float64 ) float64
8.函数最小值 ¶
func Min(x, y float64 ) float64
9.Mod 返回 x/y 的浮点余数。结果的大小小于 y,其符号与 x 的符号一致。
func Mod(x, y float64 ) float64
10.Modf 返回总和为 f 的整数和小数浮点数。两个值的符号都与 f 相同。
func Modf(f float64 ) (int float64 , frac float64 )
int, frac := math.Modf(3.14)
fmt.Printf("%.2f, %.2f\n", int, frac)
3.00, 0.14
11.Round 返回最接近的整数,从零四舍五入。
func Round(x float64 ) float64
12.Sqrt 返回 x 的平方根。
func Sqrt(x float64) float64
12.Trunc 返回 x 的整数值。
func Trunc(x float64 ) float64
返回 x 的反余弦值(以弧度为单位)
func Acos(x float64 ) float64
特殊情况
Acos(x) = NaN if x < -1 or x > 1
返回 x 的反双曲余弦值。
func Acosh(x float64) float64
Asin 返回 x 的反正弦,以弧度为单位。
func Asin(x float64 ) float64
Asinh 返回 x 的反双曲正弦值。
func Asinh(x float64 ) float64
二、fmt包的使用
type person struct {
Name string `json:"name"`
}
var a = person{Name:"校长"}
%v 打印结构时默fmt.Println(fmt.Sprintf("%#v", a))认格式的值,加号(%+v)添加字段名称
输入:fmt.Println(fmt.Sprintf("%v", a))
输出:{校长}
%#v 值的 Go 语法表示
输入:fmt.Println(fmt.Sprintf("%#v", a))
输出:main.person{Name:"校长"}
%T 值类型的 Go 语法表示
输入:fmt.Println(fmt.Sprintf("%T", a))
输出:main.person
%% 文字百分号;不消耗任何价值
输入:fmt.Println(fmt.Sprintf("%%", a))
输出:%%!(EXTRA main.person={校长})
%t 真或假这个词
输入:fmt.Println(fmt.Sprintf("%t", false))
输出:false
%b 打印二进制
%c 打印int类型对应的数字编码
%d 打印10进制数据据
%0 打印八进制数据
%O 打印八进制已0o开头
%q 一个单引号字符文字,用 Go 语法安全转义。
%x 16进制,用小写a-f
%X 16进制,用大写A-F
%U Unicode 格式:U+1234;与“U+%04X”相同
%f 默认宽度,默认精度
%9f 宽度 9,默认精度
%.2f 默认宽度,精度 2
%9.2f 宽度 9,精度 2
%9.f 宽度 9,精度 0
fmt.Println(fmt.Sscanf(" 123456 7 ", "%5d%d%d", &s, &i, &c))
fmt.Println(fmt.Sscanf("12 34 567 ", "%d%d%d", &s, &i,&c))
字符中间无空格,则按照数字进行取和划分,如果有空格则按照空格划分
三、IO包
提供I/O原语的基本操作。
将数据复制
func Copy(dst Writer, src Reader) (written int64, err error)
带缓冲区的复制
func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error)
CopyN 将 n 个字节(或直到出现错误)从src复制到dst。它返回复制的字节数和复制时遇到的最早错误。返回时,写 == n 当且仅当 err == nil。
func CopyN(dst Writer, src Reader, n int64) (written int64, err error)
Pipe 创建一个同步的内存管道。它可用于将需要 io.Reader 的代码与需要 io.Writer 的代码连接起来
管道上的读取和写入是一对一匹配的,除非需要多个读取来消耗单个写入。也就是说,对 PipeWriter 的每次写入都会阻塞,直到它满足来自 PipeReader 的一次或多次读取,这些读取完全消耗了写入的数据。数据直接从Write复制到对应的Read(或Reads);没有内部缓冲。
func Pipe() (* PipeReader , * PipeWriter )
package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
r, w := io.Pipe()
go func() {
fmt.Fprint(w, "some io.Reader stream to be read\n")
w.Close()
}()
if _, err := io.Copy(os.Stdout, r); err != nil {
log.Fatal(err)
}
}
ReadAll 从 r 读取直到出现错误或 EOF 并返回它读取的数据。
func ReadAll(r Reader ) ([] byte , error )
ReadAtLeast 从 r 读取到 buf 中,直到读取至少 min 个字节。如果读取的字节数较少,则返回复制的字节数和错误。仅当未读取字节时,错误才为 EOF。如果在读取少于 min 字节后发生 EOF,ReadAtLeast 将返回 ErrUnexpectedEOF。如果 min 大于 buf 的长度,ReadAtLeast 返回 ErrShortBuffer。返回时,n >= min 当且仅当 err == nil。如果 r 返回读取至少 min 个字节的错误,则删除该错误。
func ReadAtLeast(r Reader , buf [] byte , min int ) (n int , err error )
ReadFull 将 len(buf) 字节从 r 准确读取到 buf 中。如果读取的字节数较少,则返回复制的字节数和错误。
func ReadFull(r Reader , buf [] byte ) (n int , err error )
WriteString 将字符串 s 的内容写入 w,它接受一个字节片。如果 w 实现了 StringWriter,则直接调用其 WriteString 方法。否则, w.Write 只会被调用一次。
func WriteString(w Writer , s string ) (n int , err error )
读取文件
func (s * SectionReader ) Read(p [] byte ) (n int , err error )
func (s * SectionReader ) ReadAt(p [] byte , off int64 ) (n int , err error )
package main
import (
"fmt"
"io"
"log"
"strings"
)
func main() {
r := strings.NewReader("some io.Reader stream to be read\n")
s := io.NewSectionReader(r, 5, 17)
buf := make([]byte, 6)
if _, err := s.ReadAt(buf, 10); err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", buf)
}
搜索
func (s * SectionReader ) Seek(offset int64 , whence int ) ( int64 , error )
package main
import (
"io"
"log"
"os"
"strings"
)
func main() {
r := strings.NewReader("some io.Reader stream to be read\n")
s := io.NewSectionReader(r, 5, 17)
if _, err := s.Seek(10, io.SeekStart); err != nil {
log.Fatal(err)
}
if _, err := io.Copy(os.Stdout, s); err != nil {
log.Fatal(err)
}
}
大小
大小以字节为单位返回节的大小。
func (s * SectionReader ) Size() int64