Учебное пособие по Go для среднего уровня научит вас, как разработать простой веб-сайт личного блога (1) Базовая структура проекта и ссылка на базу данных.
Учебное пособие по Go для среднего уровня научит вас, как разработать простой веб-сайт личного блога (1) Базовая структура проекта и ссылка на базу данных.

Предисловие

В этой статье записано: «Язык Go шаг за шагом научит вас, как разработать простой веб-сайт личного блога (1)».

Эта статья представляет собой запись личного обучения и резюме. Она публикуется исключительно компанией Tencent Cloud. Перепечатка без разрешения строго запрещена. Если есть что-то не так, пожалуйста, поправьте меня. Спасибо!

Ну как программисту не иметь своего блога? Затем я написал свой личный блог, а затем подумал о том, чтобы подвести итоги и опубликовать простую версию руководства по языку Go.

Конечно, сейчас создать личный веб-сайт очень просто. Вы можете использовать для этого платформу с низким кодом. На github также есть множество фреймворков. Пока вы это делаете, нет ничего невозможного. .

Введение в проект

Описание функции

Веб-сайт личного блога используется для записи личных статей. Интерфейс используется для отображения статей, а серверная часть используется авторами для управления статьями.

Очень просто, функция очень простая.

стек технологий

На этот раз мы выбрали архитектуру, разделяющую переднюю и заднюю части.

Интерфейс: html, less, element-plus, Vue3, javascript.

Бэкенд: golang, gin, Mongodb

Инструменты разработки: Голанд

Все технологии, используемые для разработки внешнего интерфейса, в настоящее время популярны. Внутренняя структура gin также очень проста в использовании в golang. Для Mongodb она относительно легкая и простая в использовании.

Иметь приблизительное представление

Эскиз не стандартизирован. В реальной разработке он будет не таким корявым. Если я один, то просто нарисую для удобства.

Итоговая структура каталогов проекта, ну неудобно показывать полную версию, я до сих пор сам ею пользуюсь. Ниже я немного изменил структуру кода.

Язык кода:go
копировать
GoServe
├── configs
├── docs
├── global
├── internal
│   ├── dao
│   ├── middleware
│   ├── model
│   ├── routers
│   └── service
├── pkg
├── main.go

configs: файл конфигурации.

документы: Коллекция документов.

global: глобальные переменные.

внутренний: внутренний модуль.

дао: все операции, связанные с данными, выполняются на уровне дао.

промежуточное программное обеспечение: промежуточное программное обеспечение.

модель: слой модели, используемый для хранения объектов модели.

Маршрутизаторы: логическая обработка, связанная с маршрутизацией.

сервис: основная бизнес-логика проекта.

pkg: пакет модулей, связанных с проектом.

Некоторые базовые знания для этого развития

Gin

Gin — это веб-фреймворк HTTP, написанный на Go, с чистым API, высокой производительностью и хорошей экосистемой. Ниже приводится простое руководство по использованию платформы Gin:

  1. Установите Джин:

Сначала убедитесь, что у вас установлен язык Go. Затем используйте следующую команду для установки Gin в Goland или других инструментов разработки:

Язык кода:bash
копировать
go get -u github.com/gin-gonic/gin
  1. Создайте простой HTTP-сервер:

Непосредственно в проекте создайте файл с именем main.go файл и добавьте следующий код:

Язык кода: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.

  1. Запустите сервер:

В терминале перейдите в каталог, содержащий main.go каталог файлов, а затем выполните следующую команду:

Язык кода:bash
копировать
go run main.go

Теперь ваш Gin Сервер должен быть включен и слушать 8080 порт. доступ http://localhost:8080,Вы увидите информацию «Hello, World!».

  1. Добавьте функции маршрутизации и обработки:

При необходимости вы можете добавить дополнительные функции маршрутизации и обработки. Например, добавьте маршрут запроса POST:

Язык кода:go
копировать
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!" информация.

  1. Используйте промежуточное программное обеспечение:

Gin Предоставляет встроенное промежуточное программное обеспечение, такое как ведение журналов, междоменное совместное использование ресурсов (CORS) и т. д. Чтобы использовать промежуточное программное обеспечение, вы можете использовать Use() метод, чтобы добавить его к маршрутизатору. Например, добавьте промежуточное программное обеспечение для ведения журналов:

Язык кода:go
копировать
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, используя следующую команду:

Язык кода:bash
копировать
go get go.mongodb.org/mongo-driver/mongo

После установки вы можете импортировать этот пакет в свой код Go:

Язык кода:go
копировать
import (
    "go.mongodb.org/mongo-driver/mongo"
)

Далее вам необходимо создать экземпляр структуры mongo.Client и использовать функцию mongo.Connect для подключения к базе данных MongoDB.

Чтобы использовать MongoDB в коде Go, вам необходимо использовать методы структуры mongo.Client для работы с базами данных и коллекциями. Вы можете использовать метод Client.Database для получения базы данных, а затем использовать метод Database.Collection для получения коллекции.

Чтобы подключиться к базе данных MongoDB и реализовать операции CRUD с данными, вы можете прочитать руководство ниже.

  • Импортируйте необходимые пакеты:
Язык кода:go
копировать
import (
    "context"
    "fmt"
    "go.mongodb.org/mongo-driver/bson"
    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "log"
    "time"
)
  • Определить структуру данных:
Язык кода:go
копировать
type User struct {
    ID        primitive.ObjectID `bson:"_id,omitempty"`
    Name      string             `bson:"name"`
    Age       int                `bson:"age"`
    CreatedAt time.Time          `bson:"created_at"`
}

Следующий знак табуляции относится к базе данных Mongodb.

  • Подключитесь к базе данных MongoDB:
Язык кода:go
копировать
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())
}
  • Выберите базу данных и коллекцию:
Язык кода:go
копировать
// Получите базу данных с именем «test» из экземпляра клиента.
db := client.Database("test")

// Получите коллекцию с именем «users» из экземпляра базы данных.
collection := db.Collection("users")

Тогда есть базовый CRUD.

  • Вставить данные (Создать):
Язык кода:go
копировать
// Определить экземпляр структуры 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)
  • Данные запроса (Чтение):
Язык кода:go
копировать
// Определите фрагмент типа пользователя для хранения результатов запроса.
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)
}
  • Обновление данных (Update):
Язык кода:go
копировать
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")
  • Удалить данные (Удалить):
Язык кода:go
копировать
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 и введите следующий код.

Язык кода: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 в глобальной папке и набрал следующий код:

Язык кода: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». Эту книгу я увидел только после того, как закончил ее. Затем я изучил метод автора и реконструировал структуру своего кода в соответствии с его идеями.

Я участвую в четвертом выпуске специального учебного лагеря Tencent Technology Creation 2023 с эссе, получившими награды. Приходите и разделите приз со мной!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose