github.com/Mrs4s/go-cqhttp@v1.2.0/internal/selfupdate/update_windows.go (about) 1 package selfupdate 2 3 import ( 4 "archive/zip" 5 "bytes" 6 "crypto/sha256" 7 "errors" 8 "io" 9 "net/http" 10 ) 11 12 // update go-cqhttp自我更新 13 func update(url string, sum []byte) error { 14 resp, err := http.Get(url) 15 if err != nil { 16 return err 17 } 18 defer resp.Body.Close() 19 wc := writeSumCounter{ 20 hash: sha256.New(), 21 } 22 rsp, err := io.ReadAll(io.TeeReader(resp.Body, &wc)) 23 if err != nil { 24 return err 25 } 26 if !bytes.Equal(wc.hash.Sum(nil), sum) { 27 return errors.New("文件已损坏") 28 } 29 reader, _ := zip.NewReader(bytes.NewReader(rsp), resp.ContentLength) 30 file, err := reader.Open("go-cqhttp.exe") 31 if err != nil { 32 return err 33 } 34 err, _ = fromStream(file) 35 if err != nil { 36 return err 37 } 38 return nil 39 }