Tem ABAP aqui no meu programa em Go (GoLang)?

Tem ABAP aqui no meu programa em Go (GoLang)?

Comecei estudar a linguagem de programação GO ou como muitas pessoas a chamam, GoLang da Google. Depois de um workshop rápido, muito esclarecedor e motivador com o Jeff Otoni, decidi encarar essa jornada.

Atualmente, sou desenvolvedor e arquiteto de software imerso no mundo SAP e suas tecnologias, então conheço um pouquinho de ABAP, SAP UI5, Fiori, OData e mais uma sopa de letrinhas específica do mundo SAP. No entanto, o mercado está em constante evolução e demanda, por isso, gosto de aprender e me manter atualizado sobre outras tecnologias e linguagens para aplicar melhores práticas, aprender o que os outros estão fazendo de legal e não passar aperto quando um projeto sair do "padrão".

A linguagem Go é fortemente tipada, compilada, o que a diferencia da maior parte das linguagens populares atualmente. Com uma sintaxe de código incrivelmente simples (imagine, até a data que estou escrevendo esse artigo, a linguagem só possui 25 palavras reservadas! Confira aqui!), ela foi projetada para simplificar e resolver os maiores problemas encontrados no desenvolvimento de software, principalmente tratando de web, (listados no dia a dia da gigante Google, onde a linguagem foi construída), como por exemplo, escalabilidade, concorrência, paralelismo, produtividade e facilidade ao escrever e manter código, softwares com grande dependência de comunicação via rede, padronização de formatação de código em projetos grandes e com muitos colaboradores trabalhando ao mesmo tempo (quem nunca discutiu se a '{' fica na linha do if ou em uma linha abaixo? que comece a guerra, risos), e mais um tantão de coisas legais que vale a pena você pesquisar (esse artigo escrito por Rob Pike, um dos criadores da linguagem é bem interessante Go at Google: Language Design in the Service of Software Engineering).

Para começar minha jornada de aprendizado não foi difícil. Utilizo macos e não tive problemas na instalação do ambiente GO, bastou baixar a imagem correta do sistema operacional (Download Go), instalar e começar rodar. Iniciei pelo famigerado "Hello World!", que você pode codar em um arquivo fonte na sua máquina local, fazer o build (ou compilar, como alguns gostam) e executar o binário gerado. Você também pode usar o comando go run [file] para executar o código diretamente, sem precisar fazer o build, ou ainda, se não quiser instalar nada, pode simplesmente utilizar o playground da linguagem para começar codar e experimentar a linguagem diretamente no browser.

Logo depois do "Hello world!", a maioria dos programadores já pensam em como declarar variáveis e funções, queremos variáveis para fazer cálculos complexos porque vamos dominar o mundo, integrar o sistemas via api e zas, e zas, zas (Chaves mandou lembranças, risos). Comigo não foi diferente, busquei alguns materiais que apresentam os conceitos da linguagem passo a passo, explicando trechos de código e te desafiando escrever códigos utilizando o que foi aprendido. Aqui, gostaria de ressaltar que achei muito material legal, de boa qualidade, em português, sim PT-BR, com textos bem escritos e divertidos, ensinando os conceitos e apresentando exemplos de código, confiram a jornada GoSchool no Gommunity e os artigos legais em inglês go no dev.to. Sensacional, me ajudou bastante nestes primeiros contatos com a linguagem, os conceitos e o jeito de fazer. O meu muito obrigado à essas pessoas que investem seu tempo no ensino de tecnologia escrevendo artigos e tutoriais em nossa língua nativa.

Bom, com o básico da linguagem aprendido, fui buscar projetos mais práticos e encontrei como fazer uma simples API em Go neste artigo aqui. Fui seguindo o passo a passo do tutorial e magicamente, com 74 linhas de código em Go, tinha construído minha primeira web api, permitindo recuperar uma lista de contatos, inserir um novo contato e excluir um contato.

Similaridade com o ABAP

Como sempre faço, ao finalizar o tutorial, fui rever todo o código e checar se eu tinha dúvida em algum trecho de código ou conceito utilizado e aí tive uma surpresa boa. Analisando a declaração de uma estrutura em Go, encontrei uma similaridade com declaração de estrutura em ABAP.

Compare abaixo:

Declaração das estruturas Person e Address em Go:

type Person struct {
    ID        string
    Firstname string
    Lastname  string
    Address   *Address
}

type Address struct {
    City  string
    State string
}

Declaração das estruturas Person e Address em ABAP:

TYPES:
  BEGIN OF address,
    city  TYPE string,
    state TYPE string,
  END OF address,

  BEGIN OF person,
    id        TYPE string,
    firstname TYPE string,
    lastname  TYPE string,
    address   TYPE address,
  END OF person.

Além disso, a declaração de métodos em Go é bem similar à declaração de rotina (form) no ABAP.

Declaração de um método para imprimir o nome completo em Go:

Para funcionar como método, em Go, criamos uma função recebendo como parâmetro antes do nome da função o tipo ao qual queremos associá-la, neste caso, ao nosso tipo Person criado anteriormente. Para utilizar a nossa função que trabalhará como método, podemos acessar o nome da função diretamente de uma variável do tipo que declaramos no parâmetro e omitir a passagem do parâmetro. Conforme código abaixo:

func (p Person) PrintFullName() {
    fmt.Println(p.Firstname, p.Lastname)
}

func main() {
    pessoa := Person{
        ID:        "1",
        Firstname: "Valdir",
        Lastname:  "Mendes",
    }
    pessoa.PrintFullName()
}

Declaração de uma rotina para imprimir o nome completo em ABAP:

No ABAP, não conseguimos fazer uma função ou rotina funcionar como um método, mas para mim, existe uma similaridade interessante na estrutura de criação. Recebemos o tipo de uma estrutura que foi criada dentro do programa como parâmetro na rotina criada que consequentemente só funcionará para essa estrutura, assim como no método/função do Go. Confira abaixo:

  DATA: pessoa TYPE person.

  pessoa-id        = '1'.
  pessoa-firstname = 'Valdir'.
  pessoa-lastname  = 'Mendes'.

PERFORM print_full_name USING pessoa.

FORM print_full_name USING p TYPE person.

  WRITE: p-firstname, p-lastname.

ENDFORM.

Em resumo, gostaria de compartilhar com você um pouquinho da minha jornada de aprendizado da linguagem Go e essa similaridade encontrada em uma das linguagens que trabalho no cotidiano. E aí, o que achou?