nvim/.config/nvim/lua/plugins/lsp/go.lua

-- nvim/.config/nvim/lua/plugins/lsp/go.lua

return {
  "neovim/nvim-lspconfig",
  opts = {
    servers = {
      gopls = {
        cmd = { "gopls", "-remote=auto" },
        filetypes = { "go", "gomod", "gowork", "gotmpl" },
        settings = {
          gopls = {
            gofumpt = true,
            staticcheck = true,
            usePlaceholders = false,
            completeUnimported = true,
            directoryFilters = { "-**/node_modules", "-**/vendor" },
            semanticTokens = true,
            codelenses = {
              gc_details         = false,
              generate           = true,
              regenerate_cgo     = true,
              test               = true,
              tidy               = true,
              upgrade_dependency = true,
              vendor             = true,
            },
            analyses = {
              fieldalignment   = false,
              nilness          = true,
              shadow           = true,
              unusedparams     = true,
              unusedwrite      = true,
              unusedvariable   = true,
              useany           = true,
            },
            hints = {
              assignVariableTypes    = true,
              compositeLiteralFields = true,
              compositeLiteralTypes  = false,
              constantValues         = true,
              functionTypeParameters = true,
              parameterNames         = false,
              rangeVariableTypes     = true,
            },
          },
        },
      },
    },
  },
}