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!
[…] 📝 ⇒ https://aprendagolang.com.br/2022/05/12/como-utilizar-go-workspaces/ […]
[…] ⇒ https://aprendagolang.com.br/2022/05/12/como-utilizar-go-workspaces/ […]
[…] 📝 ⇒ https://aprendagolang.com.br/2022/05/12/como-utilizar-go-workspaces/ […]