Executando verificação de segurança...
1

Procurando na internet existem vários (teria que procurar alguma que seja equivalente).

Não é REST mas usa apenas o que vem com Go (externo apenas o driver para MySQL) mas fica como referência.
https://golangdocs.com/mysql-golang-crud-example

Exemplos REST.

https://dev.to/samzhangjy/restful-crud-with-golang-for-beginners-23ia
https://codevoweb.com/build-restful-crud-api-with-golang/

Por curiosidade, perguntei ao chatGPT: "existe algum exemplo de crud + rest feito em golang?"
Ele gerou um exemplo funcional em 100 linhas de código (nunca confie cegamente em IA). Achei interessante e vou colocar abaixo. Usa o Gin e GORM.

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

// Modelo do usuário
type User struct {
	ID    uint   `json:"id" gorm:"primaryKey"`
	Name  string `json:"name"`
	Email string `json:"email" gorm:"unique"`
}

var DB *gorm.DB

func main() {
	// Inicializa o banco de dados
	var err error
	DB, err = gorm.Open(sqlite.Open("users.db"), &gorm.Config{})
	if err != nil {
		panic("Falha ao conectar ao banco de dados")
	}

	// AutoMigrate cria a tabela se não existir
	DB.AutoMigrate(&User{})

	// Criar o router com Gin
	r := gin.Default()

	// Definir rotas do CRUD
	r.POST("/users", createUser)
	r.GET("/users", getUsers)
	r.GET("/users/:id", getUserByID)
	r.PUT("/users/:id", updateUser)
	r.DELETE("/users/:id", deleteUser)

	// Rodar o servidor
	r.Run(":8080")
}

// Criar um novo usuário
func createUser(c *gin.Context) {
	var user User
	if err := c.ShouldBindJSON(&user); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	DB.Create(&user)
	c.JSON(http.StatusCreated, user)
}

// Listar todos os usuários
func getUsers(c *gin.Context) {
	var users []User
	DB.Find(&users)
	c.JSON(http.StatusOK, users)
}

// Buscar usuário por ID
func getUserByID(c *gin.Context) {
	var user User
	if err := DB.First(&user, c.Param("id")).Error; err != nil {
		c.JSON(http.StatusNotFound, gin.H{"error": "Usuário não encontrado"})
		return
	}
	c.JSON(http.StatusOK, user)
}

// Atualizar usuário por ID
func updateUser(c *gin.Context) {
	var user User
	if err := DB.First(&user, c.Param("id")).Error; err != nil {
		c.JSON(http.StatusNotFound, gin.H{"error": "Usuário não encontrado"})
		return
	}

	if err := c.ShouldBindJSON(&user); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	DB.Save(&user)
	c.JSON(http.StatusOK, user)
}

// Deletar usuário por ID
func deleteUser(c *gin.Context) {
	var user User
	if err := DB.First(&user, c.Param("id")).Error; err != nil {
		c.JSON(http.StatusNotFound, gin.H{"error": "Usuário não encontrado"})
		return
	}

	DB.Delete(&user)
	c.JSON(http.StatusOK, gin.H{"message": "Usuário deletado com sucesso"})
}

Para testar as funcionalidades (pode usar curl com os parâmetros abaixo)

-X POST "http://localhost:8080/users" -H "Content-Type: application/json" -d '{"name": "João", "email": "[email protected]"}'
-X GET "http://localhost:8080/users"
-X GET "http://localhost:8080/users/1"
-X PUT "http://localhost:8080/users/1" -H "Content-Type: application/json" -d '{"name": "João Silva", "email": "[email protected]"}'
-X DELETE "http://localhost:8080/users/1"
Carregando publicação patrocinada...
1

Eu não mudaria para Go tendo um projeto fullstack web, eu continuaria no node (express, fastfy, nestjs) porque o frontend tanbém é javascript/typescript, então eu penso da mesma forma nos dois projetos. Esse diferencial é superior pra mim a "performance" se é que tem.

Eu usaria go para algo que demande um processamento pesado. Suponha que vc tenha um crm e precise calcular a folha de pagamento... coisas assim.

1

Se a stack funciona bem já com tudo feito usando Nodejs, realmente não tem motivo pra mudar, a melhor tecnologia sempre vai ser aquela que atende as necessidades do projeto e o conhecimento técnico dos envolvidos. Inclusive, tem um mano ali em cima afirmando que GO é a melhor escolha para backend web (que sinceramente parece uma resposta gerada pelo ChatGPT), o que não tem nenhuma base (visto que GO tem limitações severas para aplicações altamente dinâmicas, por exemplo).

1

Eu tenho 30 anos de desenvolvcimento. Desde o basic e clipper até agora. Posso afirmar categoricamente que não existe "x melhor que y". É tudo uma questão de necessidade.

por exemplo, ifood é em java no back, nativo no web front, usa rust pra calcular rotas, enfim... A escolha de cada tecnologia de acordo com que cada uma tem a oferecer