Ir idioma: seleção ORM

A Go ganhou fama como uma das linguagens de programação mais simples, incluindo suas vantagens - facilidade de escrever e ler código, na maioria dos casos, suporte mais simples à base de código. Falamos sobre várias vantagens do Go, graças às quais nós da SimbirSoft o usamos em vários projetos altamente carregados com várias arquiteturas, tanto de serviço da web quanto de micro-serviço (SOA).

Aplicação


Esse idioma do sistema é bom para a maioria das tarefas de rede, todos os microsserviços e serviços de macro, serviços da Web e ferramentas de sistema - não é sem razão que muitos especialistas em DevOps o adoram. O Go encontra seu uso no Machine Learning, e alguns desenvolvedores até escrevem sites com ele. Em nossa prática, optamos pelo Go quando desenvolvemos CRMs e produtos de software separados para uso interno, por exemplo, para companhias de seguros. O repositório de idiomas Go padrão também possui um pacote para desenvolvimento móvel, este pacote ainda é suportado, embora existam ferramentas mais adequadas para isso.

Ir: desenvolvimento e reconhecimento


No Google, o desenvolvimento da linguagem Go começou em 2007. Antes disso, a empresa usava Java, Python e C ++, no entanto, eles apresentavam algumas desvantagens (em particular, alto consumo de memória) ou uso limitado. Então o Google começou a desenvolver um novo idioma para suas necessidades.

Quais são os requisitos para o idioma:

  • Um arquivo executável (sem dependências)
  • Compilação rápida
  • Tempo de execução rápido (pelo menos no mesmo nível que Java e C ++)
  • Coletor de lixo, minimizando o vazamento de recursos
  • Otimização para sistemas multiprocessadores
  • Digitação estática
  • Minimalismo
  • Leveza sintática
  • Multiparadigmidade (imperativa, funcional, orientada a objetos)

Para quem não trabalha com a Go, lembre-se brevemente da história de sua criação. O Google começou a pensar na especificação da linguagem em 2007. A versão 1.0 ocorreu em 2012 e, em 2015, a versão 1.5, já sem uma única linha de código C ++. A partir desse momento, a linguagem se compila, o que nos permitiu acelerar o desenvolvimento de tarefas individuais no Go.

A idade média de reconhecimento de um novo idioma na comunidade é de aproximadamente 10 anos, mas o Go já é um dos idiomas mais populares. Em junho de 2019, o Go subiu em 15º em termos de popularidade no mundo, de acordo com o índice TIOBE , somando três posições em um ano. Entre as razões de seu sucesso estão as seguintes:

  • Biblioteca padrão forte
  • Sintonia padrão legal
  • As funções mais necessárias são apresentadas na “caixa” e as bibliotecas são fornecidas ao código aberto
  • Comunidade muito amigável

Por exemplo, os seguintes pacotes estão incluídos na biblioteca padrão (a lista está incompleta):



Ilustração - github.com/ashleymcnamara/gophers

Se você não se sentir confortável com a velocidade do seu aplicativo ou de outros parâmetros, poderá trabalhar com o criador de perfis pronto para uso. Para fazer isso, você precisa:
  • Registrar importação do criador de perfil: import _ "net / http / pprof"
  • Adicione um servidor http para receber resultados do criador de perfil: vá http.ListenAndServe ("0.0.0.0:8080", zero)

Ir ferramentas


Um dos benefícios do Go é seu extenso conjunto de ferramentas padrão. Selecionamos alguns dos utilitários mais interessantes, em nossa opinião (de fato, existem muitos mais):

  • benchcmp - comparação de benchmark, desempenho antes e depois das alterações
  • go tool cover - análise da cobertura de código por testes
  • godoc - geração de documentação baseada em comentários
  • goimports - análise de importação (remoção não utilizada, adição ausente)
  • gorename - refatoração
  • presente - ajuste de apresentação
  • go vet - freqüentemente encontrado erro linter
  • teste - execute testes e referências
  • ir corrigir - corrigir alterações ao alterar a API (antes da versão 1.0)
  • ir ferramenta pprof - criação de perfil
  • Go fmt - formatação de código por estilo de código
  • Detector de corrida - encontrando uma corrida de dados em tempo de execução

Competitividade


Outro ponto forte do Go é que é fácil escrever código competitivo nesse idioma. Para fazer isso, basta usar palavras-chave antes de chamar a função.



Vá treinar


Se você deseja programar no Go, o início levará relativamente pouco tempo. Os desenvolvedores - Core Team - suportam o curso A Tour of Go em vários idiomas, incluindo o russo. Este curso pode ser concluído em apenas 1-3 dias. Em termos de aprendizado, o Go é um dos idiomas mais simples.

Então, o que ler:


ORM em Go


Acredita-se que uma das fraquezas de Go seja a ORM. Talvez isso se deva em parte ao fato de a linguagem ser jovem - nela, muitas ferramentas necessárias estão apenas começando a ser desenvolvidas. Em particular, você pode usar o pacote database / sql para trabalhar com bancos de dados. Quais são os requisitos para o pacote:

  • Pacote geral para todos os bancos de dados sql
  • Portátil: não contém nenhum recurso no campo de trabalho com bancos de dados. Idealmente, tudo deve funcionar corretamente se você mudar o driver.
  • Convertendo tipos Go em tipos de banco de dados padrão (deve ser possível processar tipos específicos)
  • Contém conjunto de conexões
  • Segurança de rosca para goroutines

Exemplo de consulta SELECT usando database / sql


defer rows.Close() for rows.Next() { var message string err := rows.Scan(&message) if err != nil { log.Panic(err) } fmt.Println(message) } if err := rows.Err(); err != nil { log.Panic(err) } 

Como você pode ver no exemplo, muitas ações de modelo terão que ser executadas sempre. Por exemplo:

  • objeto de linha fechada: adiar linhas.Close ()
  • verifique se há erros err: = lines.Err (); err! = nada desde não está claro por que as linhas.Next () nos retornaram falsos

Por tudo isso, quero usar algo mais universal e simples, por exemplo, ORM.

Tipos de implementações ORM


Quando os desenvolvedores se defrontam com a escolha do ORM para trabalhar com o Go, geralmente são guiados pela classificação no github. Quando escolhemos o ORM para nós mesmos, o Beego teve a melhor classificação (18 mil “estrelas”). No entanto, na prática, o ORM faz parte da estrutura, portanto, a avaliação não é muito objetiva (se você selecionar apenas ORM). Também entre os líderes, o Gorm, em desenvolvimento desde 2013, apóia transações e tem muitas outras vantagens.



No entanto, como demonstrou nossa experiência com o Gorm, certos problemas são possíveis ao usá-lo, especialmente ao testar: por exemplo, corrida de dados ou exclusão de uma chave estrangeira. Podemos assumir as seguintes causas desses erros no Gorm:

  • Confirma imediatamente no mestre
  • Tags ausentes
  • Construtor sql imprevisível

No momento, em nosso trabalho, preferimos vários ORMs que não usam a interface {} - estes são Kallax, Reform e Sqlboiler. Normalmente, usamos o pacote Golang para migrações e o repositório orm-bench com benchmarks ORM no Go. Ao mesmo tempo, você não deve perseguir apenas benchmarks. Mais frequentemente, a velocidade não é tão importante quanto a qualidade do código e sua funcionalidade.

Resumir


As vantagens da linguagem Go para o desenvolvedor e para os negócios incluem maior produtividade no desenvolvimento, capacidade de usar menos servidores, facilidade sintática e tempo de treinamento mais rápido para novos desenvolvedores, um grande conjunto de ferramentas e uma comunidade amigável. Apesar de ser uma língua jovem, está em constante crescimento e desenvolvimento. Os recursos do Go tornam a linguagem ideal para uma ampla variedade de projetos, desde tarefas de rede a microsserviços e blockchain.

O artigo foi preparado com base em nosso relatório na reunião Hot Backend em Samara.

Source: https://habr.com/ru/post/pt458074/


All Articles