]> 127.0.0.1 Git - part/.git/commitdiff
update
authorqydysky <32743305+qydysky@users.noreply.github.com>
Wed, 9 Nov 2022 14:07:54 +0000 (22:07 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Wed, 9 Nov 2022 14:07:54 +0000 (22:07 +0800)
13 files changed:
CheckFile.go
FileWR.go
compress/Brotli.go
compress/Brotli_test.go
compress/Flate.go
compress/Gzip.go
crypto/Crypto.go
go.mod
go.sum
reqf/Reqf.go
reqf/Reqf_test.go
sync/Map_test.go
sys/Sys.go

index d35dad0ec3fa28b05dff9f19c61cb2dcb961d479..dd985e2d64198b18089af623d899343f527ab423 100644 (file)
@@ -1,14 +1,13 @@
-package part 
+package part
 
 import (
-    "fmt"
-       "time"
+       "errors"
+       "fmt"
+       "os"
        "runtime"
        "strings"
        "syscall"
-    "errors"
-    "os"
-       "io/ioutil"
+       "time"
 
        reqf "github.com/qydysky/part/reqf"
 )
@@ -17,116 +16,130 @@ type checkfile struct {
        RV []interface{}
 }
 
-func Checkfile() *checkfile{
-    return &checkfile{}
+func Checkfile() *checkfile {
+       return &checkfile{}
 }
 
-func (this *checkfile) Build(checkFile,root,checkDir,SplitString string,usemd5 bool) {
-       
-       v,_,_:=this.GetAllFile(checkDir)
-       _checkFile := Filel {
-               File:checkFile,
-               Loc:0,
+func (t *checkfile) Build(checkFile, root, checkDir, SplitString string, usemd5 bool) {
+
+       v, _, _ := t.GetAllFile(checkDir)
+       _checkFile := Filel{
+               File: checkFile,
+               Loc:  0,
        }
 
        Logf().I("checkFile Build:begin")
 
-       if usemd5 {_checkFile.Context = append(_checkFile.Context, "UseMd5")} 
+       if usemd5 {
+               _checkFile.Context = append(_checkFile.Context, "UseMd5")
+       }
 
        _checkFile.Context = append(_checkFile.Context, SplitString)
 
-       for _,value := range v {
-               if usemd5 { 
+       for _, value := range v {
+               if usemd5 {
                        md5, e := Md5().Md5File(value)
-                       if e != nil {md5 = "00000000000000000000000000000000"}
+                       if e != nil {
+                               md5 = "00000000000000000000000000000000"
+                       }
                        _checkFile.Context = append(_checkFile.Context, md5)
                }
                _checkFile.Context = append(_checkFile.Context, value[len(root):])
                _checkFile.Context = append(_checkFile.Context, SplitString)
        }
-       
+
        File().FileWR(_checkFile)
        Logf().I("checkFile Build:ok")
 
 }
 
 func (t *checkfile) IsExist(f string) bool {
-       if len(f) > 4096 {return false}
+       if len(f) > 4096 {
+               return false
+       }
 
        _, err := os.Stat(f)
        if err != nil {
                if errors.Is(err, os.ErrNotExist) {
-                       t.RV = append(t.RV,false,nil)
+                       t.RV = append(t.RV, false, nil)
                        return false
-               }else{
-                       if !strings.Contains(err.Error(),"file name too long") {
+               } else {
+                       if !strings.Contains(err.Error(), "file name too long") {
                                Logf().E(err)
                        }
-                       t.RV = append(t.RV,false,err)
+                       t.RV = append(t.RV, false, err)
                        return false
                }
        }
-       t.RV = append(t.RV,true,nil)
+       t.RV = append(t.RV, true, nil)
        return true
 }
 
-func (this *checkfile) IsOpen(f string) bool {
-       if !this.IsExist(f) {return false}
-       
-       fi,e:=os.OpenFile(f, syscall.O_RDONLY|syscall.O_EXCL, 0)
-       if e!=nil {return true}
+func (t *checkfile) IsOpen(f string) bool {
+       if !t.IsExist(f) {
+               return false
+       }
+
+       fi, e := os.OpenFile(f, syscall.O_RDONLY|syscall.O_EXCL, 0)
+       if e != nil {
+               return true
+       }
        fi.Close()
        return false
 }
 
-func (this *checkfile) Checkfile(src string)(string,error){
+func (t *checkfile) Checkfile(src string) (string, error) {
 
-    _,str,err:=this.GetAllFile(src)
+       _, str, err := t.GetAllFile(src)
 
-    if err !=nil {return "",errors.New("获取文件列表错误!")}
+       if err != nil {
+               return "", errors.New("获取文件列表错误!")
+       }
 
-    return Md5().Md5String(str),nil
+       return Md5().Md5String(str), nil
 
 }
 
-func (this *checkfile) GetAllFile(pathname string) ([]string,string,error) {
+func (t *checkfile) GetAllFile(pathname string) ([]string, string, error) {
 
-    var (
+       var (
                returnVal string = ""
-               list []string
+               list      []string
        )
 
-    rd, err := ioutil.ReadDir(pathname)
+       rd, err := os.ReadDir(pathname)
 
-       if err != nil {return list,returnVal,err}
+       if err != nil {
+               return list, returnVal, err
+       }
 
-    for _, fi := range rd {
-        if fi.IsDir() {
-            _list, _returnVal, _:=this.GetAllFile(pathname + fi.Name() + "/")
-                       returnVal+=_returnVal
+       for _, fi := range rd {
+               if fi.IsDir() {
+                       _list, _returnVal, _ := t.GetAllFile(pathname + fi.Name() + "/")
+                       returnVal += _returnVal
                        list = append(list, _list...)
-        } else {
-                       returnVal+=pathname + "/" + fi.Name() + "\n"
-                       list = append(list, pathname + fi.Name())
-        }
-    }
-    return list,returnVal,err
+               } else {
+                       returnVal += pathname + "/" + fi.Name() + "\n"
+                       list = append(list, pathname+fi.Name())
+               }
+       }
+       return list, returnVal, err
 }
 
-func (this *checkfile) GetFileSize(path string) int64 {
+func (t *checkfile) GetFileSize(path string) int64 {
 
-    if !this.IsExist(path) {
-        return 0
-    }
-    fileInfo, err := os.Stat(path)
-    if err != nil {
-        return 0
-    }
-    return fileInfo.Size()
+       if !t.IsExist(path) {
+               return 0
+       }
+       fileInfo, err := os.Stat(path)
+       if err != nil {
+               return 0
+       }
+       return fileInfo.Size()
 }
 
-func (this *checkfile) CheckList(checkFile,root,SplitString string)bool{
-       
+func (t *checkfile) CheckList(checkFile, root, SplitString string) bool {
+
        if checkFile == "" || SplitString == "" {
                Logf().E("[err]checkFile or SplitString has null.")
                return false
@@ -134,59 +147,65 @@ func (this *checkfile) CheckList(checkFile,root,SplitString string)bool{
        Logf().I("===checkFile Check===")
 
        var checkFileString string
-       var checkFileList []string 
-       if strings.Contains(checkFile,"https://") {
+       var checkFileList []string
+       if strings.Contains(checkFile, "https://") {
                Logf().I("[wait]checkFile: Getting checkfile...")
 
-               var r = reqf.Rval {
-                       Url:checkFile,
-                       Timeout:6,
-            Retry:2,
+               var r = reqf.Rval{
+                       Url:     checkFile,
+                       Timeout: 6,
+                       Retry:   2,
                }
                req := reqf.New()
-               if e:=req.Reqf(r);e != nil {
-                       Logf().E("[err]checkFile:",checkFile,e.Error())
+               if e := req.Reqf(r); e != nil {
+                       Logf().E("[err]checkFile:", checkFile, e.Error())
                        return false
-               }else{
+               } else {
                        Logf().I("[ok]checkFile: Get checkfile.")
-                       checkFileString=string(req.Respon)
+                       checkFileString = string(req.Respon)
                }
-       }else{
-               var _checkFile = Filel {
-                       File:checkFile,
-                       Loc:0,
+       } else {
+               var _checkFile = Filel{
+                       File: checkFile,
+                       Loc:  0,
                }
-               
-               checkFileString=File().FileWR(_checkFile)
+
+               checkFileString = File().FileWR(_checkFile)
        }
 
-       checkFileList=strings.Split(checkFileString,SplitString);
+       checkFileList = strings.Split(checkFileString, SplitString)
 
        var (
                returnVal bool = true
-               UseMd5 bool = strings.Contains(checkFileList[0], "UseMd5")
-               _value string
+               UseMd5    bool = strings.Contains(checkFileList[0], "UseMd5")
+               _value    string
        )
 
-       for _,value := range checkFileList[1:] {
-               if value == "" {continue}
+       for _, value := range checkFileList[1:] {
+               if value == "" {
+                       continue
+               }
+
+               if UseMd5 {
+                       _value = root + value[32:]
+               } else {
+                       _value = root + value
+               }
 
-               if UseMd5 {_value = root + value[32:]}else{_value = root + value}
-               
-               if !this.IsExist(_value) {
+               if !t.IsExist(_value) {
                        Logf().E("[err]checkFile:", _value, "not exist!")
                        returnVal = false
-               }else{
+               } else {
                        if UseMd5 {
-                               if md5,_ := Md5().Md5File(_value); value[:32] != md5 {
+                               if md5, _ := Md5().Md5File(_value); value[:32] != md5 {
                                        Logf().E("[err]checkFile:", _value, "no match!")
                                        returnVal = false
                                }
                        }
-                       
+
                        if runtime.GOOS != "windows" && strings.Contains(_value, ".run") {
                                var want os.FileMode = 0700
-                               if !this.CheckFilePerm(_value, want) {
+                               if !t.CheckFilePerm(_value, want) {
                                        Logf().E("[err]checkFile:", _value, "no permission!")
                                        returnVal = false
                                }
@@ -195,37 +214,41 @@ func (this *checkfile) CheckList(checkFile,root,SplitString string)bool{
                }
 
        }
-       if returnVal {Logf().I("[ok]checkFile: all file pass!")}
+       if returnVal {
+               Logf().I("[ok]checkFile: all file pass!")
+       }
        Logf().I("===checkFile Check===")
 
        return returnVal
 }
 
-func (this *checkfile) GetFileModTime(path string) (error,int64) {
+func (t *checkfile) GetFileModTime(path string) (error, int64) {
 
-       if !this.IsExist(path) {return errors.New("not exist"),time.Now().Unix()}
+       if !t.IsExist(path) {
+               return errors.New("not exist"), time.Now().Unix()
+       }
 
        f, err := os.Open(path)
        if err != nil {
                fmt.Println("open file error")
-               return err,time.Now().Unix()
+               return err, time.Now().Unix()
        }
        defer f.Close()
 
        fi, err := f.Stat()
        if err != nil {
                fmt.Println("stat fileinfo error")
-               return err,time.Now().Unix()
+               return err, time.Now().Unix()
        }
 
-       return nil,fi.ModTime().Unix()
+       return nil, fi.ModTime().Unix()
 }
 
-func (this *checkfile) CheckFilePerm(f string,want os.FileMode)bool{
+func (t *checkfile) CheckFilePerm(f string, want os.FileMode) bool {
        fi, err := os.Lstat(f)
        if err != nil {
-               Logf().E("[err]cant get permission : ",f);
+               Logf().E("[err]cant get permission : ", f)
                return false
        }
-       return fi.Mode().Perm()>=want
+       return fi.Mode().Perm() >= want
 }
index be313ff67178c3806b5ea49ddbf6d2849f46a3ea..9610a65c998d699f018b834eceec6f3d7e6c3331 100644 (file)
--- a/FileWR.go
+++ b/FileWR.go
@@ -1,12 +1,11 @@
 package part
 
 import (
-       "sync"
-       "strings"
        "fmt"
-       "os"
        "io"
-       "io/ioutil"
+       "os"
+       "strings"
+       "sync"
        "syscall"
 
        Ppart "github.com/qydysky/part/linuxwin"
@@ -29,36 +28,38 @@ const (
 )
 
 type Filel struct {
-       File string //src
-       Loc int64 //WriteOrRead loc ;0:rewrite Or read all;-1 write on end
+       File    string //src
+       Loc     int64  //WriteOrRead loc ;0:rewrite Or read all;-1 write on end
        ReadNum int64
        Context []interface{} //Write string
 
        // wrap with encoder/decoder
        //https://pkg.go.dev/golang.org/x/text/encoding
-       WrapWriter func(io.Writer)(io.Writer)
+       WrapWriter func(io.Writer) io.Writer
        // WrapReader func(io.Reader)(io.Reader)
 
        // read func(b []byte)(int,error)
-       write func(b []byte)(int,error)
+       write func(b []byte) (int, error)
 }
 
 // func (t Filel) Read(b []byte)(int,error){return t.read(b)}
-func (t Filel) Write(b []byte)(int,error){return t.write(b)}
-
+func (t Filel) Write(b []byte) (int, error) { return t.write(b) }
 
-func File() *file{
+func File() *file {
        return &file{}
 }
 
 func (this *file) FileWR(C Filel) string {
-    this.Lock()
+       this.Lock()
        defer this.Unlock()
 
        var returnVal string
 
-       if C.File == "" {returnVal="";return returnVal}
-       
+       if C.File == "" {
+               returnVal = ""
+               return returnVal
+       }
+
        if len(C.Context) != 0 {
                switch C.Context[0].(type) {
                case io.Reader:
@@ -66,12 +67,12 @@ func (this *file) FileWR(C Filel) string {
                                fmt.Println("Err:copy only allow one context")
                                return ""
                        }
-                       returnVal=this.copy(C)
+                       returnVal = this.copy(C)
                default:
-                       returnVal=this.write(C)
+                       returnVal = this.write(C)
                }
-       }else{
-               returnVal=this.read(C)
+       } else {
+               returnVal = this.read(C)
        }
 
        return returnVal
@@ -79,20 +80,20 @@ func (this *file) FileWR(C Filel) string {
 
 func (this *file) copy(C Filel) string {
        var (
-               File string=C.File
+               File string = C.File
        )
 
        this.NewPath(File)
 
-       fileObj,err := os.OpenFile(File,os.O_RDWR|os.O_EXCL|os.O_TRUNC,0644)
+       fileObj, err := os.OpenFile(File, os.O_RDWR|os.O_EXCL|os.O_TRUNC, 0644)
        if err != nil {
-               fmt.Println("Err:cant open file:",File,err);
+               fmt.Println("Err:cant open file:", File, err)
                return ""
        }
        defer fileObj.Close()
 
        if _, err := io.Copy(fileObj, C.Context[0].(io.Reader)); err != nil {
-               fmt.Println("Err:cant copy file:",File,err);
+               fmt.Println("Err:cant copy file:", File, err)
                return ""
        }
        return "ok"
@@ -101,29 +102,31 @@ func (this *file) copy(C Filel) string {
 func (this *file) write(C Filel) string {
 
        var (
-               File string=C.File
-               Loc int64=C.Loc
+               File string = C.File
+               Loc  int64  = C.Loc
        )
 
        this.NewPath(File)
 
-       var Kind int 
+       var Kind int
        switch Loc {
-               case 0:Kind=os.O_RDWR|os.O_EXCL|os.O_TRUNC
-               default:Kind=os.O_RDWR|os.O_EXCL
+       case 0:
+               Kind = os.O_RDWR | os.O_EXCL | os.O_TRUNC
+       default:
+               Kind = os.O_RDWR | os.O_EXCL
        }
 
-       fileObj,err := os.OpenFile(File,Kind,0644)
+       fileObj, err := os.OpenFile(File, Kind, 0644)
        if err != nil {
-               fmt.Println("Err:cant open file:",File,err);
+               fmt.Println("Err:cant open file:", File, err)
                return ""
        }
        defer fileObj.Close()
 
-       Loc=this.locfix(Loc,File,fileObj)
+       Loc = this.locfix(Loc, File, fileObj)
 
        var writer io.Writer
-       C.write = func(b []byte)(int, error){
+       C.write = func(b []byte) (int, error) {
                return fileObj.WriteAt(b, Loc)
        }
        writer = C
@@ -131,13 +134,13 @@ func (this *file) write(C Filel) string {
                writer = C.WrapWriter(writer)
        }
 
-       for _,v := range C.Context{
+       for _, v := range C.Context {
                switch v.(type) {
                case []uint8:
                        tmp := v.([]byte)
                        _, err = writer.Write(tmp)
                        if err != nil {
-                               fmt.Println("Err:cant write file:",File,err);
+                               fmt.Println("Err:cant write file:", File, err)
                                return ""
                        }
                        Loc += int64(len(tmp))
@@ -145,12 +148,12 @@ func (this *file) write(C Filel) string {
                        tmp := []byte(v.(string))
                        _, err = writer.Write(tmp)
                        if err != nil {
-                               fmt.Println("Err:cant write file:",File,err);
+                               fmt.Println("Err:cant write file:", File, err)
                                return ""
                        }
                        Loc += int64(len(tmp))
                default:
-                       fmt.Println("Err:need context type string or []byte");
+                       fmt.Println("Err:need context type string or []byte")
                        return ""
                }
        }
@@ -161,103 +164,109 @@ func (this *file) write(C Filel) string {
 func (this *file) read(C Filel) string {
 
        var (
-               File string=C.File
-               Loc int64=C.Loc
-               ReadNum int64=C.ReadNum
+               File    string = C.File
+               Loc     int64  = C.Loc
+               ReadNum int64  = C.ReadNum
        )
 
-       fileObj,err := os.OpenFile(File,os.O_RDONLY,0644)
+       fileObj, err := os.OpenFile(File, os.O_RDONLY, 0644)
        if err != nil {
-               fmt.Println("Err:cant open file:",File,err);
+               fmt.Println("Err:cant open file:", File, err)
                return ""
        }
        defer fileObj.Close()
 
-       Loc=this.locfix(Loc,File,fileObj)
+       Loc = this.locfix(Loc, File, fileObj)
 
        if ReadNum == 0 {
-               returnVal,err := ioutil.ReadAll(fileObj)
+               returnVal, err := io.ReadAll(fileObj)
 
                if err != nil {
-                       fmt.Println("Err:cant read file:",File,err);
+                       fmt.Println("Err:cant read file:", File, err)
                        return ""
                }
 
                return string(returnVal[Loc:])
 
        }
-       
+
        buf := make([]byte, ReadNum)
 
-       _, err=fileObj.ReadAt(buf,Loc)
+       _, err = fileObj.ReadAt(buf, Loc)
        if err != nil {
-               fmt.Println("Err:cant read file:",File,err);
+               fmt.Println("Err:cant read file:", File, err)
                return ""
        }
 
        return string(buf)
 }
 
-func (this *file) locfix(Loc int64,File string,fileObj *os.File)int64{
+func (this *file) locfix(Loc int64, File string, fileObj *os.File) int64 {
 
        var returnVal int64
 
-       FileInfo,err:=fileObj.Stat()
+       FileInfo, err := fileObj.Stat()
        if err != nil {
-               fmt.Println("Err:cant read file lenght",File,err)
+               fmt.Println("Err:cant read file lenght", File, err)
                return 0
        }
 
-       if Loc<0 {
-               returnVal=FileInfo.Size()+1+Loc
+       if Loc < 0 {
+               returnVal = FileInfo.Size() + 1 + Loc
        }
 
-       if returnVal<0 || returnVal>FileInfo.Size() {
-               fmt.Println("Err:outrage of file lenght",File,Loc,"out of 0 ~",FileInfo.Size())
+       if returnVal < 0 || returnVal > FileInfo.Size() {
+               fmt.Println("Err:outrage of file lenght", File, Loc, "out of 0 ~", FileInfo.Size())
                return 0
        }
 
        return returnVal
 }
 
-func (this *file) NewPath(filename string) error{
+func (this *file) NewPath(filename string) error {
 
        /*
                如果filename路径不存在,就新建它
-       */      
-       var exist func(string) bool = func (s string) bool {
+       */
+       var exist func(string) bool = func(s string) bool {
                _, err := os.Stat(s)
                return err == nil || os.IsExist(err)
        }
 
-       for i:=0;true;{
-               a := strings.Index(filename[i:],"/")
-               if a == -1 {break}
-               if a == 0 {a = 1}//bug fix 当绝对路径时开头的/导致问题
-               i=i+a+1
+       for i := 0; true; {
+               a := strings.Index(filename[i:], "/")
+               if a == -1 {
+                       break
+               }
+               if a == 0 {
+                       a = 1
+               } //bug fix 当绝对路径时开头的/导致问题
+               i = i + a + 1
                if !exist(filename[:i-1]) {
                        err := os.Mkdir(filename[:i-1], os.ModePerm)
-                       if err != nil {return err}
+                       if err != nil {
+                               return err
+                       }
                }
        }
-       
+
        if _, err := os.Stat(filename); os.IsNotExist(err) {
-               fd,err:=os.Create(filename)
+               fd, err := os.Create(filename)
                if err != nil {
                        return err
-               }else{
+               } else {
                        fd.Close()
                }
        }
        return nil
 }
 
-func FileMove(src,trg string) error {
-       return Ppart.FileMove(src,trg)
+func FileMove(src, trg string) error {
+       return Ppart.FileMove(src, trg)
 }
 
 // func main(){
-//     var u File 
+//     var u File
 //     u.File="a.txt"
 //     u.Write=false
 //     u.Loc=0
index 90fce95ad279a6a2926c88e8f19f52c60ec5f357..839934e33e69364dd25208741f550c6926ceefec 100644 (file)
@@ -1,30 +1,34 @@
 package part
 
 import (
-    br "github.com/andybalholm/brotli"
-    "bytes"
-    "io"
-    "io/ioutil"
+       "bytes"
+       "io"
+
+       br "github.com/andybalholm/brotli"
 )
 
-func InBr(byteS []byte, level int) ([]byte,error) {
-    buf := bytes.NewBuffer(nil)
-    Write := br.NewWriterLevel(buf, level)
-    defer Write.Close()
+func InBr(byteS []byte, level int) ([]byte, error) {
+       buf := bytes.NewBuffer(nil)
+       Write := br.NewWriterLevel(buf, level)
+       defer Write.Close()
 
-    // 写入待压缩内容
-    if _,err := Write.Write(byteS); err != nil {return buf.Bytes(),err}
-    if err := Write.Flush(); err != nil {return buf.Bytes(),err}
-    return buf.Bytes(),nil
+       // 写入待压缩内容
+       if _, err := Write.Write(byteS); err != nil {
+               return buf.Bytes(), err
+       }
+       if err := Write.Flush(); err != nil {
+               return buf.Bytes(), err
+       }
+       return buf.Bytes(), nil
 }
 
-func UnBr(byteS []byte) ([]byte,error) {
-    buf := bytes.NewBuffer(byteS)
-    Read := br.NewReader(buf)
+func UnBr(byteS []byte) ([]byte, error) {
+       buf := bytes.NewBuffer(byteS)
+       Read := br.NewReader(buf)
 
-    rb, err := ioutil.ReadAll(Read)
-    if err == io.EOF || err == io.ErrUnexpectedEOF {
-        return rb, nil
-    }
-    return rb, err
-}
\ No newline at end of file
+       rb, err := io.ReadAll(Read)
+       if err == io.EOF || err == io.ErrUnexpectedEOF {
+               return rb, nil
+       }
+       return rb, err
+}
index 23c25df6ed35ba22761b7e4719f308739e41d65c..5e44f74ad82fd0be7e32cb3e07893a8b17c6a775 100644 (file)
@@ -1,22 +1,30 @@
 package part
 
 import (
+       _ "embed"
        "testing"
 )
 
+//go:embed data.txt
+var data []byte
+
 func Test_Br(t *testing.T) {
-       s := []byte(`abc`)
-       t.Log(string(s))
+       b, e := InBr(data, 6)
+       if e != nil {
+               t.Error(e)
+               return
+       }
+       t.Log(len(data))
 
-       b,e := InBr(s, 6)
-       if e != nil {t.Error(e);return}
-       t.Log(string(b))
+       c, e := UnBr(b)
+       if e != nil {
+               t.Error(e)
+               return
+       }
 
-       c,e := UnBr(b)
-       if e != nil {t.Error(e);return}
-       t.Log(string(c))
-       
-       for k,v := range c {
-               if v != []byte("abc")[k] {t.Error(`no match`)}
+       for k, v := range c {
+               if v != []byte("abc")[k] {
+                       t.Error(`no match`)
+               }
        }
 }
index de6fd2f4b18d8043d1ce57fd3ceb00b3bc18399f..ee4839f44715bd2893c9c13d3de2fefc99268a92 100644 (file)
@@ -1,33 +1,32 @@
 package part
 
 import (
-    "compress/flate"
-    "bytes"
-    "io"
-    "io/ioutil"
+       "bytes"
+       "compress/flate"
+       "io"
 )
 
-func InFlate(byteS []byte, level int) ([]byte,error) {
-    buf := bytes.NewBuffer(nil)
+func InFlate(byteS []byte, level int) ([]byte, error) {
+       buf := bytes.NewBuffer(nil)
 
-    // 创建一个flate.Write
-    flateWrite, err := flate.NewWriter(buf, level)
-    if err != nil {
-        return buf.Bytes(),err
-    }
-    defer flateWrite.Close()
-    // 写入待压缩内容
-    flateWrite.Write(byteS)
-    flateWrite.Flush()
-    return buf.Bytes(),nil
+       // 创建一个flate.Write
+       flateWrite, err := flate.NewWriter(buf, level)
+       if err != nil {
+               return buf.Bytes(), err
+       }
+       defer flateWrite.Close()
+       // 写入待压缩内容
+       flateWrite.Write(byteS)
+       flateWrite.Flush()
+       return buf.Bytes(), nil
 }
 
-func UnFlate(byteS []byte) ([]byte,error) {
-    flateRead := flate.NewReader(bytes.NewBuffer(byteS))
-    rb, err := ioutil.ReadAll(flateRead)
-    flateRead.Close()
-    if err == io.EOF || err == io.ErrUnexpectedEOF {
-        return append([]byte{},rb...), nil
-    }
-    return append([]byte{},rb...), err
-}
\ No newline at end of file
+func UnFlate(byteS []byte) ([]byte, error) {
+       flateRead := flate.NewReader(bytes.NewBuffer(byteS))
+       rb, err := io.ReadAll(flateRead)
+       flateRead.Close()
+       if err == io.EOF || err == io.ErrUnexpectedEOF {
+               return append([]byte{}, rb...), nil
+       }
+       return append([]byte{}, rb...), err
+}
index 1c45d289fa4ad60b97590a148f4d4a99473c5d19..d95cc3e3b47db909e6b3e2788db5f90afa1554a3 100644 (file)
@@ -1,34 +1,37 @@
 package part
 
 import (
-    gzip "compress/gzip"
-    "bytes"
-    "io"
-    "io/ioutil"
+       "bytes"
+       gzip "compress/gzip"
+       "io"
 )
 
-func InGzip(byteS []byte, level int) ([]byte,error) {
-    buf := bytes.NewBuffer(nil)
-    Write,err := gzip.NewWriterLevel(buf, level)
-    if err != nil {
-        return buf.Bytes(),err
-    }
-    defer Write.Close()
-    // 写入待压缩内容
-    if _,err := Write.Write(byteS); err != nil {return buf.Bytes(),err}
-    if err := Write.Flush(); err != nil {return buf.Bytes(),err}
-    return buf.Bytes(),nil
+func InGzip(byteS []byte, level int) ([]byte, error) {
+       buf := bytes.NewBuffer(nil)
+       Write, err := gzip.NewWriterLevel(buf, level)
+       if err != nil {
+               return buf.Bytes(), err
+       }
+       defer Write.Close()
+       // 写入待压缩内容
+       if _, err := Write.Write(byteS); err != nil {
+               return buf.Bytes(), err
+       }
+       if err := Write.Flush(); err != nil {
+               return buf.Bytes(), err
+       }
+       return buf.Bytes(), nil
 }
 
-func UnGzip(byteS []byte) ([]byte,error) {
-    Read,err := gzip.NewReader(bytes.NewBuffer(byteS))
-    if err != nil {
-        return byteS,err
-    }
-    rb, err := ioutil.ReadAll(Read)
-    Read.Close()
-    if err == io.EOF || err == io.ErrUnexpectedEOF {
-        return append([]byte{},rb...), nil
-    }
-    return append([]byte{},rb...), err
-}
\ No newline at end of file
+func UnGzip(byteS []byte) ([]byte, error) {
+       Read, err := gzip.NewReader(bytes.NewBuffer(byteS))
+       if err != nil {
+               return byteS, err
+       }
+       rb, err := io.ReadAll(Read)
+       Read.Close()
+       if err == io.EOF || err == io.ErrUnexpectedEOF {
+               return append([]byte{}, rb...), nil
+       }
+       return append([]byte{}, rb...), err
+}
index 42a6b6b09563aa96a35c8bda1ab030e4ffcd2a53..2bf9cb319f785acfbee69f12df1d9f7f3933459e 100644 (file)
@@ -1,14 +1,14 @@
 package part
 
 import (
-       "os"
-       "io/ioutil"
-       "errors"
        "crypto/rand"
-       "crypto/sha256"
        "crypto/rsa"
+       "crypto/sha256"
        "crypto/x509"
        "encoding/pem"
+       "errors"
+       "io"
+       "os"
 )
 
 type Crypto struct {
@@ -17,13 +17,13 @@ type Crypto struct {
 }
 
 func FileLoad(path string) (data []byte, err error) {
-       fileObject,e := os.OpenFile(path, os.O_RDONLY, 0644)
+       fileObject, e := os.OpenFile(path, os.O_RDONLY, 0644)
        if e != nil {
                err = e
                return
        }
        defer fileObject.Close()
-       data,e = ioutil.ReadAll(fileObject)
+       data, e = io.ReadAll(fileObject)
        if e != nil {
                err = e
                return
@@ -31,11 +31,11 @@ func FileLoad(path string) (data []byte, err error) {
        return
 }
 
-func (t *Crypto) PubLoad() (bool) {
+func (t *Crypto) PubLoad() bool {
        return t.pubKey != nil
 }
 
-func (t *Crypto) PriLoad() (bool) {
+func (t *Crypto) PriLoad() bool {
        return t.priKey != nil
 }
 
@@ -51,13 +51,13 @@ func (t *Crypto) GetPKIXPubKey(pubPEMData []byte) (err error) {
                err = e
                return
        }
-       t.pubKey,_ = pubI.(*rsa.PublicKey)
+       t.pubKey, _ = pubI.(*rsa.PublicKey)
 
        return
 }
 
 func (t *Crypto) LoadPKIXPubKey(path string) (err error) {
-       if d,e := FileLoad(path);e != nil {
+       if d, e := FileLoad(path); e != nil {
                return e
        } else {
                err = t.GetPKIXPubKey(d)
@@ -78,7 +78,7 @@ func (t *Crypto) GetPKCS1PriKey(priPEMData []byte) (err error) {
 }
 
 func (t *Crypto) LoadPKCS1PriKey(path string) (err error) {
-       if d,e := FileLoad(path);e != nil {
+       if d, e := FileLoad(path); e != nil {
                return e
        } else {
                err = t.GetPKCS1PriKey(d)
@@ -100,4 +100,4 @@ func (t *Crypto) GetDecrypt(sourceByte []byte) (tragetByte []byte, err error) {
                return
        }
        return rsa.DecryptOAEP(sha256.New(), rand.Reader, t.priKey, sourceByte, []byte{})
-}
\ No newline at end of file
+}
diff --git a/go.mod b/go.mod
index 01a420a180f44f72e76250407154a41954ab0df0..b85c4ae859850609f5f0948b241e1fa2055ec0ca 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -1,20 +1,25 @@
 module github.com/qydysky/part
 
-go 1.14
+go 1.19
 
 require (
-       github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
        github.com/andybalholm/brotli v1.0.4
-       github.com/go-ole/go-ole v1.2.5 // indirect
        github.com/gorilla/websocket v1.4.2
        github.com/klauspost/compress v1.11.6
-       github.com/klauspost/pgzip v1.2.5
        github.com/miekg/dns v1.1.35
        github.com/shirou/gopsutil v3.20.12+incompatible
        github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
-       github.com/thedevsaddam/gojsonq v2.3.0+incompatible
        github.com/thedevsaddam/gojsonq/v2 v2.5.2
-       golang.org/x/text v0.3.8 // indirect
+       golang.org/x/text v0.3.8
+)
+
+require (
+       github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
+       github.com/go-ole/go-ole v1.2.5 // indirect
+       github.com/stretchr/testify v1.8.1 // indirect
+       golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect
+       golang.org/x/net v0.0.0-20190923162816-aa69164e4478 // indirect
+       golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
 )
 
 //replace github.com/thedevsaddam/gojsonq v2.3.0+incompatible => github.com/thedevsaddam/gojsonq/v2 v2.5.2
diff --git a/go.sum b/go.sum
index f0fd860134443223215e3a29f2b262b1163364d8..9bf370487752d5bb2a70ac362298c7064f14db57 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -1,94 +1,55 @@
 github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
 github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
-github.com/andybalholm/brotli v1.0.1 h1:KqhlKozYbRtJvsPrrEeXcO+N2l6NYT5A2QAFmSULpEc=
-github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
 github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
 github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
-github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
-github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
 github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
 github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
-github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
 github.com/klauspost/compress v1.11.6 h1:EgWPCW6O3n1D5n99Zq3xXBt9uCwRGvpwGOusOLNBRSQ=
 github.com/klauspost/compress v1.11.6/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
-github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
-github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
-github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo=
-github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
 github.com/miekg/dns v1.1.35 h1:oTfOaDH+mZkdcgdIjH6yBajRGtIwcwcaR+rt23ZSrJs=
 github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
-github.com/shirou/gopsutil v2.20.6+incompatible h1:P37G9YH8M4vqkKcwBosp+URN5O8Tay67D2MbR361ioY=
-github.com/shirou/gopsutil v2.20.6+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
-github.com/shirou/gopsutil v2.20.7+incompatible h1:Ymv4OD12d6zm+2yONe39VSmp2XooJe8za7ngOLW/o/w=
-github.com/shirou/gopsutil v2.20.7+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/shirou/gopsutil v3.20.12+incompatible h1:6VEGkOXP/eP4o2Ilk8cSsX0PhOEfX6leqAnD+urrp9M=
 github.com/shirou/gopsutil v3.20.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA=
 github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
-github.com/thedevsaddam/gojsonq v1.9.1 h1:zQulEP43nwmq5EKrNWyIgJVbqDeMdC1qzXM/f5O15a0=
-github.com/thedevsaddam/gojsonq v2.3.0+incompatible h1:i2lFTvGY4LvoZ2VUzedsFlRiyaWcJm3Uh6cQ9+HyQA8=
-github.com/thedevsaddam/gojsonq v2.3.0+incompatible/go.mod h1:RBcQaITThgJAAYKH7FNp2onYodRz8URfsuEGpAch0NA=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0=
 github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs=
-github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig=
-golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
-golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g=
 golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
-golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1 h1:sIky/MyNRSHTrdxfsiUSS4WIAMvInbeXljJz+jDjeYE=
-golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9 h1:yi1hN8dcqI9l8klZfy4B8mJvFmmAxJEePIQQFNSd7Cs=
-golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed h1:WBkVNH1zd9jg/dK4HCM4lNANnmd12EHC9z+LmcCG4ns=
-golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210113000019-eaf3bda374d2 h1:F9vNgpIiamoF+Q1/c78bikg/NScXEtbZSNEpnRelOzs=
-golang.org/x/sys v0.0.0-20210113000019-eaf3bda374d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
 golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
index 47d8befae484953ed782a572294a58f79956c321..46e922d499f826f04de45264c0608d6f7a4dd737 100644 (file)
@@ -5,7 +5,6 @@ import (
        "context"
        "errors"
        "io"
-       "io/ioutil"
        "net"
        "net/http"
        "net/url"
@@ -15,7 +14,10 @@ import (
        "sync"
        "time"
 
-       compress "github.com/qydysky/part/compress"
+       flate "compress/flate"
+       gzip "compress/gzip"
+
+       br "github.com/andybalholm/brotli"
        signal "github.com/qydysky/part/signal"
        s "github.com/qydysky/part/strings"
        // "encoding/binary"
@@ -191,7 +193,6 @@ func (t *Req) Reqf_1(val Rval) (err error) {
        }
 
        t.Response = resp
-       defer resp.Body.Close()
        defer func() {
                t.UsedTime = time.Since(beginTime)
        }()
@@ -204,109 +205,86 @@ func (t *Req) Reqf_1(val Rval) (err error) {
                err = errors.New(strconv.Itoa(resp.StatusCode))
        }
 
-       if compress_type := resp.Header[`Content-Encoding`]; len(compress_type) != 0 && (compress_type[0] == `br` ||
-               compress_type[0] == `gzip` ||
-               compress_type[0] == `deflate`) {
-
-               if val.NoResponse {
-                       return errors.New("respose had compress, must load all data, but NoResponse is true")
-               }
-
-               var err error
-               t.Respon, err = ioutil.ReadAll(resp.Body)
+       var ws []io.Writer
+       if val.SaveToPath != "" {
+               out, err := os.Create(val.SaveToPath)
                if err != nil {
+                       out.Close()
                        return err
                }
+               defer out.Close()
+               ws = append(ws, out)
+       }
+       if val.SaveToPipeWriter != nil {
+               defer val.SaveToPipeWriter.Close()
+               ws = append(ws, val.SaveToPipeWriter)
+       }
+       // if val.SaveToChan != nil {
+       //      r, w := io.Pipe()
+       //      go func() {
+       //              buf := make([]byte, 1<<16)
+       //              for {
+       //                      n, e := r.Read(buf)
+       //                      if n != 0 {
+       //                              val.SaveToChan <- buf[:n]
+       //                      } else if e != nil {
+       //                              defer close(val.SaveToChan)
+       //                              break
+       //                      }
+       //              }
+       //      }()
+       //      defer w.Close()
+       //      ws = append(ws, w)
+       // }
+       if !val.NoResponse {
+               var buf bytes.Buffer
+               defer func() {
+                       t.Respon = buf.Bytes()
+               }()
+               ws = append(ws, &buf)
+       }
 
-               if compress_type := resp.Header[`Content-Encoding`]; len(compress_type) != 0 {
-                       switch compress_type[0] {
-                       case `br`:
-                               if tmp, err := compress.UnBr(t.Respon); err != nil {
-                                       return err
-                               } else {
-                                       t.Respon = append([]byte{}, tmp...)
-                               }
-                       case `gzip`:
-                               if tmp, err := compress.UnGzip(t.Respon); err != nil {
-                                       return err
-                               } else {
-                                       t.Respon = append([]byte{}, tmp...)
-                               }
-                       case `deflate`:
-                               if tmp, err := compress.UnFlate(t.Respon); err != nil {
-                                       return err
-                               } else {
-                                       t.Respon = append([]byte{}, tmp...)
-                               }
-                       default:
-                       }
-               }
-       } else {
-               var ws []io.Writer
-               if val.SaveToPath != "" {
-                       out, err := os.Create(val.SaveToPath)
-                       if err != nil {
-                               out.Close()
-                               return err
-                       }
-                       defer out.Close()
-                       ws = append(ws, out)
-               }
-               if val.SaveToPipeWriter != nil {
-                       defer val.SaveToPipeWriter.Close()
-                       ws = append(ws, val.SaveToPipeWriter)
-               }
-               // if val.SaveToChan != nil {
-               //      r, w := io.Pipe()
-               //      go func() {
-               //              buf := make([]byte, 1<<16)
-               //              for {
-               //                      n, e := r.Read(buf)
-               //                      if n != 0 {
-               //                              val.SaveToChan <- buf[:n]
-               //                      } else if e != nil {
-               //                              defer close(val.SaveToChan)
-               //                              break
-               //                      }
-               //              }
-               //      }()
-               //      defer w.Close()
-               //      ws = append(ws, w)
-               // }
-               if !val.NoResponse {
-                       var buf bytes.Buffer
-                       defer func() {
-                               t.Respon = buf.Bytes()
-                       }()
-                       ws = append(ws, &buf)
+       w := io.MultiWriter(ws...)
+       s := signal.Init()
+
+       var resReader io.Reader
+       if compress_type := resp.Header[`Content-Encoding`]; len(compress_type) != 0 {
+               switch compress_type[0] {
+               case `br`:
+                       resReader = br.NewReader(resp.Body)
+               case `gzip`:
+                       resReader, _ = gzip.NewReader(resp.Body)
+               case `deflate`:
+                       resReader = flate.NewReader(resp.Body)
+               default:
+                       resReader = resp.Body
                }
+               defer resp.Body.Close()
+       }
 
-               w := io.MultiWriter(ws...)
-               s := signal.Init()
-               go func() {
-                       buf := make([]byte, 1<<16)
-                       for {
-                               if n, e := resp.Body.Read(buf); n != 0 {
-                                       w.Write(buf[:n])
-                               } else if e != nil {
-                                       if !errors.Is(e, io.EOF) {
-                                               err = e
-                                       }
-                                       break
+       go func() {
+               buf := make([]byte, 1<<16)
+               for {
+                       if n, e := resReader.Read(buf); n != 0 {
+                               w.Write(buf[:n])
+                       } else if e != nil {
+                               if !errors.Is(e, io.EOF) {
+                                       err = e
                                }
+                               break
+                       }
 
-                               if !t.cancel.Islive() {
-                                       err = context.Canceled
-                                       break
-                               }
+                       if !t.cancel.Islive() {
+                               err = context.Canceled
+                               break
                        }
-                       s.Done()
-               }()
-               s.Wait()
-               // if _, e := io.Copy(w, resp.Body); e != nil {
-               //      err = e
-               // }
-       }
+               }
+               s.Done()
+       }()
+       s.Wait()
+       // if _, e := io.Copy(w, resp.Body); e != nil {
+       //      err = e
+       // }
        return
 }
 
index 9010b5df5ac866e66e66463a713ce3caf6897213..3a6e62bab51fdebb29d178f46bd7b3fb58c5fd3d 100644 (file)
@@ -1,9 +1,15 @@
 package part
 
 import (
+       "bytes"
+       "context"
        "io"
+       "net/http"
        "testing"
        "time"
+
+       web "github.com/qydysky/part/Web"
+       compress "github.com/qydysky/part/compress"
 )
 
 func Test_Timeout(t *testing.T) {
@@ -91,3 +97,100 @@ func Test_Io_Pipe(t *testing.T) {
        t.Log(`no error`)
        <-c
 }
+
+func Test_compress(t *testing.T) {
+       addr := "127.0.0.1:10001"
+       s := web.New(&http.Server{
+               Addr:         addr,
+               WriteTimeout: time.Second * time.Duration(10),
+       })
+       s.Handle(map[string]func(http.ResponseWriter, *http.Request){
+               `/br`: func(w http.ResponseWriter, _ *http.Request) {
+                       d, _ := compress.InBr([]byte("abc强强强强"), 6)
+                       w.Header().Set("Content-Encoding", "br")
+                       w.Write(d)
+               },
+               `/flate`: func(w http.ResponseWriter, _ *http.Request) {
+                       d, _ := compress.InFlate([]byte("abc强强强强"), -1)
+                       w.Header().Set("Content-Encoding", "deflate")
+                       w.Write(d)
+               },
+               `/gzip`: func(w http.ResponseWriter, _ *http.Request) {
+                       d, _ := compress.InGzip([]byte("abc强强强强"), -1)
+                       w.Header().Set("Content-Encoding", "gzip")
+                       w.Write(d)
+               },
+               `/exit`: func(_ http.ResponseWriter, _ *http.Request) {
+                       s.Server.Shutdown(context.Background())
+               },
+       })
+
+       r := New()
+       r.Reqf(Rval{
+               Url: "http://" + addr + "/br",
+       })
+       if !bytes.Equal(r.Respon, []byte("abc强强强强")) {
+               t.Error("br fail")
+       }
+       r.Reqf(Rval{
+               Url: "http://" + addr + "/gzip",
+       })
+       if !bytes.Equal(r.Respon, []byte("abc强强强强")) {
+               t.Error("gzip fail")
+       }
+       r.Reqf(Rval{
+               Url: "http://" + addr + "/flate",
+       })
+       if !bytes.Equal(r.Respon, []byte("abc强强强强")) {
+               t.Error("flate fail")
+       }
+
+       {
+               rc, wc := io.Pipe()
+               c := make(chan struct{})
+               go func() {
+                       d, _ := io.ReadAll(rc)
+                       if !bytes.Equal(d, []byte("abc强强强强")) {
+                               t.Error("br fail")
+                       }
+                       close(c)
+               }()
+               r.Reqf(Rval{
+                       Url:              "http://" + addr + "/br",
+                       SaveToPipeWriter: wc,
+               })
+               <-c
+       }
+       {
+               rc, wc := io.Pipe()
+               c := make(chan struct{})
+               go func() {
+                       d, _ := io.ReadAll(rc)
+                       if !bytes.Equal(d, []byte("abc强强强强")) {
+                               t.Error("gzip fail")
+                       }
+                       close(c)
+               }()
+               r.Reqf(Rval{
+                       Url:              "http://" + addr + "/gzip",
+                       SaveToPipeWriter: wc,
+               })
+               <-c
+       }
+       {
+               rc, wc := io.Pipe()
+               c := make(chan struct{})
+               go func() {
+                       d, _ := io.ReadAll(rc)
+                       if !bytes.Equal(d, []byte("abc强强强强")) {
+                               t.Error("flate fail")
+                       }
+                       close(c)
+               }()
+               r.Reqf(Rval{
+                       Url:              "http://" + addr + "/flate",
+                       SaveToPipeWriter: wc,
+               })
+               <-c
+       }
+}
index 4fa156c9024713dbd5db8260eb09fdc3601ac925..4f13cd8e0cb5ec6df213dc73289902eb01b11531 100644 (file)
@@ -5,11 +5,17 @@ import (
        "testing"
 )
 
+type tmp struct {
+       p int
+}
+
 func Test_customMap(t *testing.T) {
        var c Map
        //set
-       c.Store(0, 3)
-       if v, ok := c.Load(0); ok && v != 3 {
+       var p1 = new(tmp)
+       p1.p = 0
+       c.Store(0, p1)
+       if v, ok := c.Load(0); !ok || v == nil || v.(*tmp).p != 0 {
                t.Error(`1`)
        }
        //change
index e9f33b337f2fd99777ab39e00e144d9799534204..776282c9b537c782d891a487755bd68e7524a6da 100644 (file)
@@ -3,7 +3,6 @@ package part
 import (
        "errors"
        "fmt"
-       "io/ioutil"
        "net"
        "os"
        "path/filepath"
@@ -116,7 +115,7 @@ func (t *sys) GetTmpDir(pdir string) string {
        defer t.Unlock()
        t.Lock()
 
-       dir, err := ioutil.TempDir(pdir, "")
+       dir, err := os.MkdirTemp(pdir, "")
        if err != nil {
                fmt.Println(err.Error())
                return ""
@@ -129,13 +128,12 @@ func (t *sys) GetTmpFile(pdir string) string {
        defer t.Unlock()
        t.Lock()
 
-       tmpfile, err := ioutil.TempFile(pdir, "*.tmp")
+       tmpfile, err := os.MkdirTemp(pdir, "*.tmp")
        if err != nil {
                fmt.Println(err.Error())
                return ""
        }
-       name := tmpfile.Name()
-       tmpfile.Close()
+       name := tmpfile
        return name
 }