imersao-7-codepix
imersao-7-codepix copied to clipboard
Problema ao instalar spf13/cobra devido a versão do Go
Problema referente a aula 02
Esse projeto tem sido minha primeira experiência com a linguagem Go, logo, peço desculpas se eu estiver falando alguma besteira.
Notei que a versão do Go utilizada no projeto é a 1.15
(você pode checar aqui e aqui) e devido a forma como o pacote spf13/cobra
está sendo instalado (veja aqui) a versão mais atual do mesmo está sendo selecionada.
Até então ta tranquilo, porém, ao checar o changelog da versão mais atual do pacote, houve uma grande mudança onde várias dependências da CLI foram removidas e a mesma foi extraída para um repositório independente. Sendo assim, a partir dessa versão, ao instalar o pacote spf13/cobra
você está na verdade obtendo apenas o core e não mais a CLI incluída.
Isso explica porque várias pessoas não estão conseguindo rodar o comando cobra
mesmo após essa correção ter sido feita.
Encontrei algumas formas de abordar o problema e compartilho abaixo.
Particularmente, preferi fazer o upgrade da versão do Go para 1.18
por ser uma versão estável e ser a que estou usando local. Algumas poucas alterações são necessárias serem feitas no Dockerfile
a fim de resolver o problema:
-FROM golang:1.15
+FROM golang:1.18
WORKDIR /go/src
ENV PATH="/go/bin:${PATH}"
ENV GO111MODULE=on
ENV CGO_ENABLED=1
RUN apt-get update && \
apt-get install build-essential protobuf-compiler librdkafka-dev -y && \
- go get google.golang.org/grpc/cmd/protoc-gen-go-grpc && \
- go get google.golang.org/protobuf/cmd/protoc-gen-go && \
- go get github.com/spf13/cobra && \
+ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest && \
+ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && \
+ go install github.com/spf13/cobra-cli@latest && \
wget https://github.com/ktr0731/evans/releases/download/0.9.1/evans_linux_amd64.tar.gz && \
tar -xzvf evans_linux_amd64.tar.gz && \
mv evans ../bin && rm -f evans_linux_amd64.tar.gz
CMD ["tail", "-f", "/dev/null"]
Após realizar essas alterações, basta rebuildar o serviço $ docker-compose build --no-cache app
e iniciar os containers $ docker-compose up -d
. Lembrando que o comando passa a ser chamado de cobra-cli
como você pode ver no documentação oficial e as opções do mesmo são um pouco diferentes, mas o resultado é exatamente o mesmo.
A propósito, vale a pena lembrar que go get
funciona apenas para incluir dependências no projeto a partir da versão 1.17
, por isso alterei para go install
, pois esses pacotes se tratam de CLI (https://go.dev/doc/go-get-install-deprecation).
Caso você não queira alterar a versão do Go, basta realizar essa alteração:
FROM golang:1.15
WORKDIR /go/src
ENV PATH="/go/bin:${PATH}"
ENV GO111MODULE=on
ENV CGO_ENABLED=1
RUN apt-get update && \
apt-get install build-essential protobuf-compiler librdkafka-dev -y && \
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc && \
go get google.golang.org/protobuf/cmd/protoc-gen-go && \
- go get github.com/spf13/cobra && \
+ go get github.com/spf13/cobra/[email protected] && \
wget https://github.com/ktr0731/evans/releases/download/0.9.1/evans_linux_amd64.tar.gz && \
tar -xzvf evans_linux_amd64.tar.gz && \
mv evans ../bin && rm -f evans_linux_amd64.tar.gz
CMD ["tail", "-f", "/dev/null"]
Após alterar o arquivo, basta realizar os passos mencionados anteriormente para rebuildar e iniciar os containers. Nesse caso, o comando é exatamente o mesmo que o Wesley utilizou no vídeo.
Ainda não assisti todas as aulas do projeto, logo, não sei se ao alterar a versão do Go algo possa ser impactado no projeto. Acredito que não, mas vai que :man_shrugging:
Sendo assim, fico a disposição para criar o PR uma vez que a melhor solução seja escolhida.
Desculpa pelo textão!
(caso alguém queira criar o PR, sem problema algum!)