---
name: goupdate
description: Aggiorna l'installazione locale di Go replicando inline la logica di ~/.local/bin/goupdate. Se la versione non e specificata, recupera la latest dal sito ufficiale Go e chiede conferma prima di procedere.
---

# goupdate

Quando l'utente chiede di aggiornare Go a una versione specifica nel suo ambiente locale, segui direttamente questa procedura.

Non eseguire `~/.local/bin/goupdate`: questa skill incorpora gia tutta la logica necessaria.

## Input richiesto

- L'input ideale e una versione Go nel formato usato dallo script originale, per esempio `1.24.2`.
- Se la versione non e esplicita, non scegliere una versione arbitraria: recupera la latest dal sito ufficiale Go, informane l'utente e chiedi conferma prima di procedere.

## Risoluzione della versione

1. Se l'utente ha indicato una versione precisa, usa quella direttamente.
2. Se non l'ha indicata, recupera la versione stabile piu recente dal sito ufficiale Go, preferendo l'endpoint ufficiale:

   ```text
   https://go.dev/VERSION?m=text
   ```

3. L'endpoint restituisce una stringa come `go1.26.2`. Per i comandi di questa skill usa solo la parte numerica, cioe `1.26.2`.
4. In questo caso devi fermarti prima dell'aggiornamento, comunicare all'utente quale versione latest hai trovato e chiedere conferma esplicita.
5. Se la versione era gia stata specificata dall'utente, non serve nessuna conferma aggiuntiva.

## Procedura

1. Abilita l'uscita al primo errore nella shell che userai per i comandi:

   ```bash
   set -e
   ```

2. Recupera il `GOPATH` corrente e spostati li:

   ```bash
   DIR="$(go env GOPATH)"
   cd "$DIR"
   ```

3. Installa il downloader della versione richiesta:

   ```bash
   go install golang.org/dl/go$VERSION@latest
   ```

4. Scarica quella versione di Go:

   ```bash
   go$VERSION download
   ```

5. Aggiorna SDK ed eseguibile `go` con questi passaggi, nell'ordine indicato:

   ```bash
   ln -fs "$DIR/sdk/bin/go" "$DIR/bin/"
   SDK="$(go$VERSION env GOROOT)"
   rm -rf "$DIR/sdk"
   mv "$SDK/" "$DIR/sdk"
   ```

6. Esegui la pulizia finale:

   ```bash
   rm -rf "$SDK"
   rm -r ~/sdk
   rm "$DIR"/sdk/go$VERSION*.tar.gz
   ```

7. Stampa la versione Go finale:

   ```bash
   go version
   ```

## Comando equivalente completo

Se ti serve eseguire tutto in una singola sessione shell, usa la stessa sequenza dello script originale.

Se la versione non e stata fornita, prima ricava `VERSION` dal sito ufficiale:

```bash
VERSION="$(curl -fsSL https://go.dev/VERSION?m=text | head -n1 | sed 's/^go//')"
```

In quel caso non proseguire subito: mostra la versione trovata all'utente e chiedi conferma.

Dopo la conferma, esegui:

```bash
set -e
DIR="$(go env GOPATH)"
cd "$DIR"
go install golang.org/dl/go$VERSION@latest
go$VERSION download
ln -fs "$DIR/sdk/bin/go" "$DIR/bin/"
SDK="$(go$VERSION env GOROOT)"
rm -rf "$DIR/sdk"
mv "$SDK/" "$DIR/sdk"
rm -rf "$SDK"
rm -r ~/sdk
rm "$DIR"/sdk/go$VERSION*.tar.gz
go version
```

## Note operative

- Mantieni il comportamento aderente allo script originale, inclusi i passaggi di pulizia.
- Se la versione manca, ricavala dal sito ufficiale Go, comunica la latest trovata e chiedi conferma prima di procedere.
- Se la versione e gia specificata dall'utente, non chiedere conferma aggiuntiva.
- Non sostituire la logica con installer alternativi come `apt`, `snap`, `asdf`, `mise` o download manuali, salvo richiesta esplicita dell'utente.
- Non eseguire nulla se l'utente sta solo chiedendo di creare o modificare la skill.
- Poiche alcuni passaggi sono distruttivi (`rm -rf "$DIR/sdk"` e `rm -r ~/sdk`), verifica sempre che l'utente abbia davvero chiesto l'aggiornamento di Go prima di lanciare i comandi.
