Code Monkey home page Code Monkey logo

imersao-7-codepix's Issues

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 🤷‍♂️

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.