В этой статье записано: «Язык Go шаг за шагом научит вас, как разработать простой веб-сайт личного блога (1)».
Эта статья представляет собой запись личного обучения и резюме. Она публикуется исключительно компанией Tencent Cloud. Перепечатка без разрешения строго запрещена. Если есть что-то не так, пожалуйста, поправьте меня. Спасибо!
Ну как программисту не иметь своего блога? Затем я написал свой личный блог, а затем подумал о том, чтобы подвести итоги и опубликовать простую версию руководства по языку Go.
Конечно, сейчас создать личный веб-сайт очень просто. Вы можете использовать для этого платформу с низким кодом. На github также есть множество фреймворков. Пока вы это делаете, нет ничего невозможного. .
Веб-сайт личного блога используется для записи личных статей. Интерфейс используется для отображения статей, а серверная часть используется авторами для управления статьями.
Очень просто, функция очень простая.
На этот раз мы выбрали архитектуру, разделяющую переднюю и заднюю части.
Интерфейс: html, less, element-plus, Vue3, javascript.
Бэкенд: golang, gin, Mongodb
Инструменты разработки: Голанд
Все технологии, используемые для разработки внешнего интерфейса, в настоящее время популярны. Внутренняя структура gin также очень проста в использовании в golang. Для Mongodb она относительно легкая и простая в использовании.
Эскиз не стандартизирован. В реальной разработке он будет не таким корявым. Если я один, то просто нарисую для удобства.
Итоговая структура каталогов проекта, ну неудобно показывать полную версию, я до сих пор сам ею пользуюсь. Ниже я немного изменил структуру кода.
GoServe
├── configs
├── docs
├── global
├── internal
│ ├── dao
│ ├── middleware
│ ├── model
│ ├── routers
│ └── service
├── pkg
├── main.go
configs: файл конфигурации.
документы: Коллекция документов.
global: глобальные переменные.
внутренний: внутренний модуль.
дао: все операции, связанные с данными, выполняются на уровне дао.
промежуточное программное обеспечение: промежуточное программное обеспечение.
модель: слой модели, используемый для хранения объектов модели.
Маршрутизаторы: логическая обработка, связанная с маршрутизацией.
сервис: основная бизнес-логика проекта.
pkg: пакет модулей, связанных с проектом.
Gin — это веб-фреймворк HTTP, написанный на Go, с чистым API, высокой производительностью и хорошей экосистемой. Ниже приводится простое руководство по использованию платформы Gin:
Сначала убедитесь, что у вас установлен язык Go. Затем используйте следующую команду для установки Gin в Goland или других инструментов разработки:
go get -u github.com/gin-gonic/gin
Непосредственно в проекте создайте файл с именем main.go
файл и добавьте следующий код:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "this is Ян Жижи",
})
})
r.Run(":9090")
}
Этот код создает простой HTTP-сервер, прослушивающий порт 8080. При доступе к корневому пути («/») сервер вернет сообщение «это Янжижи» в формате JSON.
В терминале перейдите в каталог, содержащий main.go
каталог файлов, а затем выполните следующую команду:
go run main.go
Теперь ваш Gin Сервер должен быть включен и слушать 8080 порт. доступ http://localhost:8080
,Вы увидите информацию «Hello, World!».
При необходимости вы можете добавить дополнительные функции маршрутизации и обработки. Например, добавьте маршрут запроса POST:
r.POST("/submit", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Form submitted successfully!",
})
})
Это создаст новый файл на сервере. POST маршрутизация, когда пользователь обращается http://localhost:8080/submit
, вернет JSON Отформатированный "Form submitted successfully!" информация.
Gin Предоставляет встроенное промежуточное программное обеспечение, такое как ведение журналов, междоменное совместное использование ресурсов (CORS) и т. д. Чтобы использовать промежуточное программное обеспечение, вы можете использовать Use()
метод, чтобы добавить его к маршрутизатору. Например, добавьте промежуточное программное обеспечение для ведения журналов:
import "github.com/gin-contrib/zap"
func main() {
r := gin.New()
// Используйте промежуточное программное обеспечение для ведения журналов
logger, _ := zap.New()
r.Use(ginzap.Ginzap(logger, time.RFC3339, true))
// ... Другие функции маршрутизации и обработки
r.Run(":8080")
}
Это добавит функцию ведения журнала для каждого запроса.
Это просто вводное руководство по фреймворку Gin. Увидев это, вы почти готовы приступить к работе. Официальная документация также очень подробная, просто найдите ее самостоятельно.
MongoDB — это нереляционная база данных на основе документов, которая поддерживает динамические схемы и не требует заранее определенных структур данных. На ранних стадиях проекта модель данных легче адаптировать к меняющимся требованиям. Для небольших проектов база данных MongoDB обеспечивает преимущества гибкости, высокой производительности, масштабируемости и простоты использования.
Если вы хотите протестировать блог локально, вам необходимо установить базу данных Mongodb на свой компьютер или использовать облако. Вы можете выполнить поиск самостоятельно. Я представил только локальную базу данных.
Еще один момент — популярный в go gorm не поддерживает Mongodb.
Итак, сначала мы устанавливаем драйвер MongoDB для Go.
Установите пакет go.mongodb.org/mongo-driver, используя следующую команду:
go get go.mongodb.org/mongo-driver/mongo
После установки вы можете импортировать этот пакет в свой код Go:
import (
"go.mongodb.org/mongo-driver/mongo"
)
Далее вам необходимо создать экземпляр структуры mongo.Client и использовать функцию mongo.Connect для подключения к базе данных MongoDB.
Чтобы использовать MongoDB в коде Go, вам необходимо использовать методы структуры mongo.Client для работы с базами данных и коллекциями. Вы можете использовать метод Client.Database для получения базы данных, а затем использовать метод Database.Collection для получения коллекции.
Чтобы подключиться к базе данных MongoDB и реализовать операции CRUD с данными, вы можете прочитать руководство ниже.
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
"time"
)
type User struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
Name string `bson:"name"`
Age int `bson:"age"`
CreatedAt time.Time `bson:"created_at"`
}
Следующий знак табуляции относится к базе данных Mongodb.
func main() {
// Создайте параметр клиента, указывающий URI подключения MongoDB.
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// Подключитесь к базе данных MongoDB, используя параметры клиента.
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
// Отключиться от базы данных по окончании работы программы
defer client.Disconnect(context.Background())
}
// Получите базу данных с именем «test» из экземпляра клиента.
db := client.Database("test")
// Получите коллекцию с именем «users» из экземпляра базы данных.
collection := db.Collection("users")
Тогда есть базовый CRUD.
// Определить экземпляр структуры User
user := User{
Name: "John Doe",
Age: 30,
CreatedAt: time.Now(),
}
// Вставьте новый документ в коллекцию, содержащую экземпляр структуры User, определенный выше.
result, err := collection.InsertOne(context.Background(), user)
if err != nil {
log.Fatal(err)
}
// Выведите идентификатор вставленного документа
fmt.Println("Inserted ID:", result.InsertedID)
// Определите фрагмент типа пользователя для хранения результатов запроса.
var users []User
// Определите фильтр, чтобы отфильтровать элементы с именем «Джон» Документация для "Доу"
filter := bson.M{"name": "John Doe"}
// Запрос документов из коллекции с помощью фильтров
cur, err := collection.Find(context.Background(), filter)
if err != nil {
log.Fatal(err)
}
// Декодирование результатов запроса в фрагменты типа User
err = cur.All(context.Background(), &users)
if err != nil {
log.Fatal(err)
}
// Просмотр результатов и вывода запроса
for _, user := range users {
fmt.Println(user)
}
filter := bson.M{"name": "John Doe"}
update := bson.M{"$set": bson.M{"age": 31}}
result, err := collection.UpdateMany(context.Background(), filter, update)
if err != nil {
log.Fatal(err)
}
fmt.Println("Updated", result.ModifiedCount, "documents")
filter := bson.M{"name": "John Doe"}
result, err := collection.DeleteMany(context.Background(), filter)
if err != nil {
log.Fatal(err)
}
fmt.Println("Deleted", result.DeletedCount, "documents")
Создайте проект go, затем создайте новый файл main.go и введите следующий код.
package main
import(
"GoServe/global"
)
func init(){
err := setupDB()
if err != nil {
log.Fatalf("init.setupDBEngine err: %v", err)
}
}
func main(){
r := gin.Default()
r.Run(":9090")
}
func setupDB() error {
err := global.MongodbJoin()
if err != nil {
return err
}
return nil
}
Затем я создал файл db.go в глобальной папке и набрал следующий код:
package global
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
)
// Client Определите глобальную переменную для хранения дескриптора после подключения к базе данных.
var Client *mongo.Client
// MongodbJoin Функция подключения к базе данных MongoDB
func MongodbJoin() error {
// Установить параметры подключения
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// Подключитесь к MongoDB, используя параметры подключения.
var err error
Client, err = mongo.Connect(context.Background(), clientOptions)
if err != nil {
return fmt.Errorf("Ошибка подключения к базе данных: %v", err)
}
// Обязательно закройте ссылку в конце
err = Client.Disconnect(context.Background())
if err != nil {
return fmt.Errorf("Невозможно отключиться от базы данных Mongodb: %v", err)
}
return nil
}
Иди сюда,У нас есть примерное представление об использовании gin-фреймворка блога и использовании ссылок на базу данных монгодб.,В следующем выпуске мы извлечем информацию о конфигурации.,Завершите модуль конфигурации,и соответствующие модификации кода.
Эта практика относится к «Путешествию по программированию на языке Go». Эту книгу я увидел только после того, как закончил ее. Затем я изучил метод автора и реконструировал структуру своего кода в соответствии с его идеями.