Configurar VS Code para Go(lang)


Visual Studio Code es un editor de código muy bueno gracias a su ecosistema de extensiones que nos permiten extender las funcionalidades del editor según se necesite.

En este artículo vamos a discutir qué extensiones nos sirven para trabajar con Go y cómo configurarlas.

Extensión Go por Microsoft

La extensión más importante que debemos instalar es Go. Esta extensión, mantenida por Microsoft, añade las funcionalidades más importantes al editor:

  • IntelliSense
  • Code Navigation
  • Code Editing
  • Diagnostics
  • Testing
  • Debugging
  • Others

vscode extension install example

  1. Abrimos vscode.
  2. Abrimos el marketplace de extensiones dando clic en el ícono de extensiones (ctrl + shift + x | cmd + shift + x).
  3. Buscamos “Go” e identificamos la extensión creada por Microsoft.
  4. Clic en Install.

Ahora que tenemos la extensión instalada debemos configurarla para que funcione correctamente.

Herramientas necesarias

golang tools vscode install example

  1. Abrimos la paleta de comandos. View -> Command Palette (ctrl + shift + p | cmd + shift + p).
  2. Escribimos “go tools” y damos clic al comando “Go: Install/Update Tools”.
  3. Nos pregunta que herramientas queremos instalar. Damos clic en el checkbox al lado de la barra de búsqueda para seleccionarlas todas y presionamos Enter.
  4. En lo que se instalan todas podemos continuar.

Configuraciones del editor

vscode config example

  1. Abre las configuraciones de vscode (ctrl + , (coma) | cmd + , (coma)).
  2. Por defecto vscode abre las configuraciones en una interfaz para buscar y cambiar fácilmente la configuración. Para abrir el JSON de configuración damos clic en el ícono de la hoja con una flecha.
  3. Todas las configuraciones de esta extensión están bajo el espacio de nombre “go”.
  4. Éstas son las configuraciones que debemos cambiar, en un momento explicaremos las más importantes:
{
  "go.vetOnSave": "package",
  "go.buildOnSave": "package",
  "go.lintOnSave": "package",
  "go.lintTool": "golangci-lint",
  "go.testTimeout": "60s", // tiempo máximo para terminar los tests
  "go.formatTool": "goimports",
  "go.autocompleteUnimportedPackages": true,
  "go.lintFlags": [
    "--enable=gocognit",
    "--enable=golint",
    "--enable=gosec",
    "--exclude=G104",
    "--enable=goimports",
    "--exclude-use-default=false"
  ],
  "go.useLanguageServer": true,
  "go.languageServerFlags": [
    "-rpc.trace", // para información más detallada al hacer debugging.
    "serve",
    "--debug=localhost:6060" // para investigar uso de memoria
  ],
  // VSCode va a marcar el espacio de nombres "gopls" como desconocido pero igual va a funcionar.
  "gopls": {
    "usePlaceholders": true,
    "completeUninmported": true,

    // Éste chequeo ya es hecho por el linter. No es necesario añadir esta carga a la memoria
    "staticcheck": false
  }
}
{
  "go.vetOnSave": "package",
  "go.buildOnSave": "package",
  "go.lintOnSave": "package"
}

Las configuraciones terminadas en “onSave” definen el alcance de la acción.

  • off: desactiva la acción al guardar.
  • package: sólo para el paquete del archivo que se acaba de guardar.
  • workspace: todo el espacio de trabajo actual en vscode. (consume mucha memoria y tiempo en espacios de trabajo grandes).
{
  "go.lintTool": "golangci-lint",
  "go.lintFlags": [
    "--enable=gocognit",
    "--enable=golint",
    "--enable=gosec",
    "--enable=goimports",
    "--exclude=G104",
    "--exclude-use-default=false"
  ]
}

La herramienta de linting (go.lintTool) es muy importante porque muestra los errores directamente en el editor. Usamos golangci-lint por su velocidad y porque integra varias herramientas pero hay otros linters como golint, revive, staticcheck.

Los lint flags son específicos para cada linter. Vemos que se activan algunas herramientas que no están activadas por defecto en golangci-lint y se excluyen algunas reglas.

{
  "go.formatTool": "goimports"
}

Así como las herramientas de linting, también existen varias herramientas de formato para Go como gofmt, goformat o goreturns. Éstas herramientas nos permiten organizar el código automáticamente para que sea legible. goimports usa gofmt y adicionalmente organiza los imports.

{
  "go.useLanguageServer": true,
  "go.languageServerFlags": ["-rpc.trace", "serve", "--debug=localhost:6060"],
  "gopls": {
    "usePlaceholders": true,
    "completeUninmported": true,
    "staticcheck": false
  }
}

Éstas configuraciones son para el servidor de lenguaje de Go gopls. Ésta herramienta es indispensable si estamos usando go modules.

Extensión Golang postfix code completion por yokoe

golang postfix example

Ésta extensión nos da facilidades a la hora de escribir código. Ayuda mucho si estamos más acostumbrados a programar en Javascript o Python.

Lo que hace es agregar terminaciones de código si escribimos una acción después de un punto para como el tamaño de un iterable (len) o añadir un elemento a un slice (append).

Con éstas configuraciones estamos listos para escribir código en Go usando Visual Studio Code.

code  vscode  golang  go  config 

Ver también