Ícone do site Aprenda Golang

Como utilizar go workspaces

Foto por Tirachard Kumtanom em Pexels.com

Dando continuidade aos posts onde exploramos as novas funcionalidades do Go 1.18, nesse post vamos ver como utilizar o novo Go Workspaces.

Para começar, vamos criar uma pasta e chama-lá de workspace.

Pequena observação antes de continuar, o nome dessa pasta NÃO tem que ser obrigatoriamente workspace, só coloquei esse nome por achar conveniente.

Agora, dentro da pasta workspace, vamos adicionar uma pasta chamada hello. Nessa pasta vamos colocar o nosso programa.

Dentro da pasta hello, vamos iniciar um novo módulo com o comando go mod init github.com/aprendagolang/hello e adicionar um arquivo main.go com o seguinte conteúdo.

package main

import (
    "fmt"

    "github.com/aprendagolang/strutil"
)

func main() {
    fmt.Println(strutil.ToUpper("Hello"))
}

Como você pode ver, estamos utilizando um package externo chamado strutil. Para atualizar nossas dependências, precisamos executar o comando go mod tidy. Após sua execução, nosso diretório ficará com 3 arquivos.

- go.mod
- go.sum
- main.go

Para ter certeza que está tudo certo com nosso programa, vamos executá-lo com um go run main.go.

Show, a palavra HELLO foi exibida no terminal.

Feito isso, dentro da pasta workspace, vamos clonar o package strutil.

$ git clone <https://github.com/aprendagolang/strutil.git>

E vamos adicionar uma nova função nesse package. Essa função vai se chamar Reverse e sua finalidade será receber uma string e retornar ela invertida.

func Reverse(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}

Para testar, na nossa aplicação hello, vamos mudar a chamada da função ToUpper para a função Reverse, e depois executar o go run main.go novamente.

Ao fazer isso, vamos receber um erro parecido com:

$ ./main.go:10:22: undefined: strutil.Reverse

Isso acontece por que nosso programa está usando o package publicado, ou seja, a versão que temos lá no Github e não a versão modificada que temos local.

Antes do go workspace, para testar essa mudança local, teríamos que adicionar um replace no arquivo go.mod. Só assim ele conseguiria utilizar o package local ao invés do que está publicado.

Como agora temos o go workspace, isso não é mais preciso. Para utilizar essa nova funcionalidade do Go, vamos voltar para a primeira pasta que criamos, a workspace, e executar o comando go work init ./hello.

A execução deve criar um arquivo go.work com o seguinte conteúdo:

go 1.18

use ./hello

Só para conferir, após a execução do comando, nossa estrutura de pastas ficará assim:

- workspace
  - hello/
  - strutil/
  - go.work

A partir da pasta workspace, vamo executar o comando go run github.com/aprendagolang/hello.

Observe que o mesmo erro da execução anterior foi retornado. Isso por que ainda não adicionamos o módulo da pasta strutil ao nosso go workspace.

Para fazer isso, precisamos executar o comando go work use ./strutil. Após a execução, o conteúdo do arquivo go.work ficará assim:

go 1.18

use (
	./hello
	./strutil
)

Ao executar o go run github.com/aprendagolang/hello de qualquer lugar do nosso go workspace ou go run main.go de dentro da pasta hello, o resultado deverá ser o seguinte:

$ olleH

E é isso! Deixem suas dúvidas nos comentários.

Obrigado e até a próxima!


Se inscreva na nossa newsletter

* indicates required
Sair da versão mobile