math,fmt, io基础包的学习

一、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
上一篇:Chrome您的连接不是私密连接解决办法


下一篇:Viper包的钩子函数