package autoupdate import ( "fmt" "io/ioutil" "net/http" "os" "os/exec" ) func CheckForUpdates(updateURL string) (bool, string, error) { resp, err := http.Get(updateURL) if err != nil { return false, "", err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { return false, "", err } latestVersion := string(data) currentVersion := "1.0.0" if latestVersion != currentVersion { return true, latestVersion, nil } return false, currentVersion, nil } func AutoUpdate(updateURL string) error { available, latest, err := CheckForUpdates(updateURL) if err != nil { return err } if available { fmt.Printf("Доступна новая версия: %s. Запускаем обновление...\n", latest) resp, err := http.Get(updateURL + "/binary") // предположим, что по этому URL лежит бинарник if err != nil { return err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { return err } tmpFile := "/tmp/train_new" if err := ioutil.WriteFile(tmpFile, data, 0755); err != nil { return err } cmd := exec.Command(tmpFile) if err := cmd.Start(); err != nil { return err } os.Exit(0) } else { fmt.Println("Обновлений не найдено.") } return nil }