> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# SDK Go: variáveis de ambiente

> Leia, adicione, substitua e remova as variáveis de ambiente de uma aplicação da Square Cloud com c.Apps.Envs no SDK Go, retornadas como um map de strings.

As variáveis de ambiente ficam em `c.Apps.Envs`. Todo método recebe o `ctx` e o id da aplicação primeiro e retorna as variáveis da aplicação como um `squarecloud.EnvVars` (um `map[string]string`).

Cada trecho abaixo roda sozinho dentro deste programa: cole um de cada vez em `main` e execute o `goimports` (veja [Executando os exemplos](/pt-br/sdks/go/client#executando-os-exemplos)).

```go theme={"system"}
package main

import (
	"context"
	"os"

	"github.com/squarecloudofc/sdk-api-go/v3"
)

var (
	ctx   = context.Background()
	c     = squarecloud.New(os.Getenv("SQUARECLOUD_API_KEY"))
	appID = "abc123def456abc123def456"
)

func main() {
	// Paste one snippet here, then run goimports.
}
```

<Note>
  Aplicações estáticas não têm variáveis de ambiente: todos os métodos respondem 400 `STATIC_APP_ENV_NOT_SUPPORTED`. Uma alteração entra em vigor no próximo [reinício](/pt-br/sdks/go/managing_application#iniciar-parar-e-reiniciar).
</Note>

## Lendo as variáveis

```go theme={"system"}
envs, err := c.Apps.Envs.Get(ctx, appID)
if err != nil {
	log.Fatal(err)
}

fmt.Println(envs["NODE_ENV"])
```

## Adicionando ou atualizando variáveis

`Envs.Set(ctx, appID, envs)` adiciona as chaves informadas e sobrescreve as que já existem. As outras variáveis são mantidas. Retorna todas as variáveis após a alteração.

```go theme={"system"}
envs, err := c.Apps.Envs.Set(ctx, appID, squarecloud.EnvVars{
	"NODE_ENV":  "production",
	"LOG_LEVEL": "info",
})
if err != nil {
	log.Fatal(err)
}

fmt.Println(envs) // every variable of the app
```

## Substituindo todas as variáveis

`Envs.Replace(ctx, appID, envs)` substitui **todas** as variáveis pelo conjunto informado. As chaves que não estão no map são removidas. Retorna o novo conjunto.

```go theme={"system"}
if _, err := c.Apps.Envs.Replace(ctx, appID, squarecloud.EnvVars{"NODE_ENV": "production"}); err != nil {
	log.Fatal(err)
}
```

## Removendo variáveis

`Envs.Delete(ctx, appID, keys...)` remove as chaves informadas e retorna as variáveis restantes. Ele recebe as chaves como argumentos variádicos: passe um slice com `keys...`.

```go theme={"system"}
remaining, err := c.Apps.Envs.Delete(ctx, appID, "LOG_LEVEL")
if err != nil {
	log.Fatal(err)
}

fmt.Println(remaining)
```

## Limites e erros

| Status | Código | Quando |
| - | - | - |
| 400 | `STATIC_APP_ENV_NOT_SUPPORTED` | A aplicação é estática |
| 400 | `INVALID_ENV_CONTENT` | As variáveis não são um objeto válido (ou, para `Delete`, uma lista vazia) |
| 400 | `TOO_MANY_ENV_VARS` | O resultado teria mais de 256 variáveis |
| 400 | `ENV_NAME_TOO_LONG` | Uma chave tem mais de 1024 caracteres |
| 400 | `ENV_CONTENT_TOO_LONG` | Um valor tem mais de 4096 caracteres |
| 400 | `READ_FAILED` | O cluster não conseguiu ler as variáveis |

## Próximos passos

<CardGroup cols={2}>
  <Card title="Deploys" icon="github" href="/pt-br/sdks/go/deploys">
    Faça deploy a cada push, com um webhook ou o GitHub App.
  </Card>

  <Card title="Referência da API de variáveis de ambiente" icon="code" href="/pt-br/api-reference/endpoint/apps/envs/get">
    Os endpoints REST por trás destes métodos.
  </Card>

  <Card title="Variáveis pela CLI" icon="terminal" href="/pt-br/cli-reference/environment-variables">
    As mesmas ações pelo terminal.
  </Card>

  <Card title="Variáveis no seu código" icon="gear" href="/pt-br/platform/environment-variables">
    Defina variáveis pelo dashboard, pela CLI ou pela API e leia-as em tempo de execução.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.