"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > بنية وحدات Golang للخدمات الصغيرة مع مساحة عمل Go

بنية وحدات Golang للخدمات الصغيرة مع مساحة عمل Go

تم النشر بتاريخ 2024-11-08
تصفح:406

بنية أساسية لقاعدة تعليمات برمجية قابلة للتطوير

يتألق Golang في تطوير الواجهة الخلفية والعمليات المتزامنة وهو مجموعة مثالية لبناء تطبيقات خلفية قابلة للتطوير وفعالة. نظرًا لقلة المنشورات التي تدور حول بنية الخدمات الصغيرة مع مساحات عمل go والتي تعد أداة رائعة لمشاركة التعليمات البرمجية المعيارية من خلال خدمات مختلفة، قررت مشاركة التنفيذ الخاص بي.

إعداد المشروع

Golang microservice modular architecture with go workspace

mkdir docker

touch docker/Dockerfile.authentication

touch docker/Dockerfile.users

mkdir -p services/authentication

mkdir -p services/users

mkdir -p shared/utils

touch docker-compose.yml

ستنتج أوامر الصدفة التالية بنية شجرة المجلدات التالية

Golang microservice modular architecture with go workspace

إعداد مساحة العمل

في جذر المشروع، قم بإنشاء مساحة عمل go ببساطة باستخدام أمر بسيط go Work init سيؤدي ذلك إلى إنتاج ملف go.work

بعد ذلك، قم بتهيئة جميع مشاريع go المختلفة التي ستكون قادرة على الاحتفاظ بالتبعيات، وتشغيل قواعد التعليمات البرمجية.

cd services/authentication && go mod init github.com/LegationPro/ms/services/authentication

cd ../.. && cd services/users && go mod init github.com/LegationPro/ms/services/users

cd ../.. && cd shared && go mod init github.com/LegationPro/ms/shared

بعد تشغيل الأوامر التالية، يجب أن يبدو مشروعك بهذا الشكل

Golang microservice modular architecture with go workspace

بعد ذلك، سنقوم بملء مساحة العمل go وإخبارها بما هو جزء من مساحة العمل عن طريق تشغيل الأمر التالي

الذهاب إلى العمل واستخدام ./services/authentication ./services/users ./shared

سيؤدي هذا إلى ملء ملف go.work

go 1.23.1

use (
    ./services/authentication
    ./services/users
    ./shared
)

إعداده مع Docker

دعونا نراجع ملف docker-compose.yml أولاً.

يجب أن يبدو ملف docker-compose.yml الخاص بك بهذا الشكل

services:
  authentication:
    build:
      context: .
      dockerfile: docker/Dockerfile.authentication
    volumes:
      - ./services/authentication:/app/authentication
      - ./shared:/app/shared
    ports:
      - "8081:8081"

  users:
    build:
      context: .
      dockerfile: docker/Dockerfile.users
    volumes:
      - ./services/users:/app/users
      - ./shared:/app/shared
    ports:
      - "8082:8082"

نطلب من docker-compose استخدام الخدمات التالية وهي المصادقة والمستخدمين.

نحن نقدم السياق الجذر، حتى نتمكن من الوصول إلى الملفات والمجلدات على مستوى الجذر.

قم بتوفير موقع ملف الإرساء.

حدد الحجم المحدد للحاوية وفي النهاية قم بكشف منفذ للحاوية لتعمل عليه.

إعداد ملفات دوكر

يعد إعداد ملف Dockerfile أمرًا بسيطًا جدًا ومباشرًا.

نقوم بسحب أحدث صورة لـ golang alpine، ونقوم بتعيين دليل عمل، ونقل بعض التعليمات البرمجية، وضبطها للعمل مع بنية مساحة عمل go وتشغيلها ببساطة.

docker/Dockerfile.authentication

# Pull golang image
FROM golang:1.23-alpine

# Switch to /app as the working directory
WORKDIR /app

# Copy the authentication codebase over to our container
COPY ./services/authentication /app/authentication/

# Copy the shared codebase and libraries that are shared across our apps inside the container
COPY ./shared /app/shared

# Initialize go workspace inside of our container
RUN go work init

# Assign different codebases to go workspaces
RUN go work use ./authentication ./shared

# Simply run our service with this simple command
CMD ["go", "run", "./authentication"]

Dockerfile.users

# Pull golang image
FROM golang:1.23-alpine

# Switch to /app as the working directory
WORKDIR /app

# Copy the authentication codebase over to our container
COPY ./services/users /app/users/

# Copy the shared codebase and libraries that are shared across our apps inside the container
COPY ./shared /app/shared

# Initialize go workspace inside of our container
RUN go work init

# Assign different codebases to go workspaces
RUN go work use ./users ./shared

# Simply run our service with this simple command
CMD ["go", "run", "./users"]

كتابة رمز الخدمة لدينا

الخدمات/المصادقة/main.go

package main

import (
    "fmt"

    "github.com/LegationPro/ms/shared/utils"
)

func main() {
    fmt.Println(utils.SomeAuthFunc())
}

الخدمات/المستخدمين/main.go

package main

import (
    "fmt"

    "github.com/LegationPro/ms/shared/utils"
)

func main() {
    fmt.Println(utils.SomeUserFunc())
}

shared/utils/utils.go

package utils

func SomeAuthFunc() string {
    return "Some auth func"
}

func SomeUserFunc() string {
    return "Some user func"
}

يجب أن يبدو الهيكل هكذا الآن

Golang microservice modular architecture with go workspace

قم بتشغيل التطبيق داخل حاوية عامل إرساء

إنشاء عامل الإرساء --بناء

للتأكد من أن كل شيء يعمل يجب أن يكون الإخراج كما يلي:

Golang microservice modular architecture with go workspace

هذا كل شيء، لديك إعداد معماري متكامل للخدمات الصغيرة لمساحة عمل go! ??

كود المصدر: https://github.com/LegationPro/go-microservice-modular-docker-setup

شكرًا لك

شكرًا لك على قراءة منشور مدونتي، آمل أن يكون هذا مفيدًا ❤️!

بيان الافراج تم نشر هذه المقالة على: https://dev.to/legationpro/golang-microservice-modular-architecture-with-go-workspace-44db?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3