Olá pessoal! Quero compartilhar minha primeira experiência de programação no Go.
Comecei a programar como desenvolvedor front-end. Depois mudei para o back-end em Python e, um pouco para mim, para o C # Asp.Net MVC. Mas recentemente, há alguns meses, conheci essa bela linguagem Go.
Porque ir
1 - linguagem compilada.
2 é uma linguagem muito incomum.
Estruturas, interfaces ... Eu tive que quebrar meu cérebro, reaprender. E o primeiro problema, acabado, é reaprender. Onde estão as aulas? Onde fica OOP? Onde estão seus padrões favoritos?
Mas, quebrando um pouco a cabeça, a linguagem Go foi revelada para mim e eu me apaixonei por ela. Bem, é claro, a primeira coisa que decidi escrever minha primeira "bicicleta", ou seja, o framework web chamado MGGO.
O que eu queria e o que eu aspirava
Claro, eu imediatamente quis criar uma estrutura MVC como o Asp.Net. Mas acabou não sendo tão simples, porque a linguagem Go é peculiar. Mas aqui está o que aconteceu:
Controladores
O controlador é uma estrutura na qual os métodos podem ser externos (api) e apenas internos, bem como os responsáveis pela exibição.
Imediatamente em um exemplo, considere um controlador de notícias.
import mggo type News struct{ ID int Title string Text string } func NewNews() *NewNews{ return &NewNews{} } func init() {
Depois disso, as notícias estão disponíveis em / news /
Onde news é o nome do controlador e a página principal é index, pela qual o método IndexView é responsável.
Agora sobre API. O controlador de notícias possui um método de leitura. Por padrão, é apenas serviço. Para permitir a solicitação da API a esse método, você precisa adicionar direitos ao método na função do controlador "init".
func init(){ ... mggo.AppendRight("News.Read", mggo.RRightGuest) }
Depois disso, o método Read está disponível para chamada de API a qualquer usuário.
fetch("/api/", { "method": "POST", "headers": { 'Accept': 'application/json', 'Content-Type': 'application/json' }, "body": JSON.stringify({ "method": "News.Read", "params": {} }) }).then(res => res.Json()).then(console.log)
Resultado
{result: {ID:1, Title:"First News", Text:"Text first News"}}
Um pouco sobre os parâmetros. Todos os parâmetros dentro do objeto params serão passados como campos de estrutura.
Por exemplo, vamos modificar um pouco a função Read:
func(n *News) Read(ctx *mggo.BaseContext) News{ if n.ID ==1 { return News{1, "First News", "Text first News"} } else { return News{} } }
E a chamada da API deve estar com o ID do parâmetro: 1 - params {ID: 1})
O que mais?
PostgreSQL
A biblioteca
Go-pg está conectada na estrutura. Vamos pegar um exemplo imediatamente. Nosso controlador de notícias possui dados estáticos. Precisa ser mudado. Para fazer isso, a primeira coisa que você precisa fazer é criar uma tabela de Notícias. Adicione algumas linhas à função init.
func init(){ ... mggo.InitCallback(func(){ mggo.CreateTable([]interface{}{(*News)(nil)}) }) }
Agora, após a inicialização, obtemos a tabela de notícias, com os campos id, title e text.
Mude o método Read:
func(n *News) Read(ctx *mggo.BaseContext) News{ mggo.SQL().Select(n) return *n }
Se chamarmos o método News.Read com o ID do parâmetro: 1, como resultado, obteremos os dados da tabela de notícias com a chave 1.
Os recursos Go-pg podem ser encontrados na
documentação .
Mas isso não é tudo. Tudo não pode ser descrito aqui. Espero escrever e postar documentação detalhada em breve. Aqui está um breve resumo do que o Mggo pode fazer.
⁃ Soquetes da Web
Events Eventos de servidor e cliente
Results Resultados do método de cache
⁃ Suporte a chamadas JsonRPC
⁃ Liba para controle rápido e criação de visualização
Por enquanto é tudo. Espero que alguém ache o artigo útil. Obviamente, existem várias outras estruturas prontas e legais. Eu só queria tentar fazer algo próprio para a minha experiência pessoal.
Link para o projetoLink para um exemplo e início rápido