imersao-7-codepix icon indicating copy to clipboard operation
imersao-7-codepix copied to clipboard

Problema ao instalar spf13/cobra devido a versão do Go

Open dorianneto opened this issue 2 years ago • 0 comments

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!)

dorianneto avatar Apr 09 '22 20:04 dorianneto