ينظم Go الكود باستخدام الحزم (مجموعات ملفات المصدر في دليل) والوحدات (مجموعات من الحزم مع اعتماديات مرقومة). معاً، يهيكلان المشاريع ويديران الاعتماديات.
الحزم — دليل الكود ذي الصلة
main
mathutil
{ a + b }
{}
جميع الملفات في دليل واحد تنتمي إلى حزمة واحدة. الأحرف الكبيرة تتحكم في الرؤية: الأسماء المكتوبة برأس حرف كبير تُصدّر (عام عبر الحزم)، والأحرف الصغيرة خاصة بالحزمة.
import (
"fmt" // standard library
"strings"
"github.com/user/repo/mathutil" // a third-party or local module package
)
fmt.Println(strings.ToUpper("hi"))
mathutil.Add(2, 3) // use Exported names via package.Name
go mod init github.com/user/myapp # create a module → makes go.mod
go get github.com/gin-gonic/gin # add a dependency (records it in go.mod)
go mod tidy # add missing & remove unused dependencies
go build # build using the module's dependencies
go.mod — declares the module path, Go version, and direct dependencies (+ versions)
go.sum — cryptographic checksums of dependencies (integrity/security)
الوحدة (تم تقديمها في Go 1.11) هي وحدة إدارة الاعتماديات — go.mod يسرد إصدارات الاعتماديات الدقيقة، مما يجعل البناء قابل للتكرار. go.sum يتحقق من سلامة الاعتماديات.
package main
func init() { // runs automatically when the package loads (before main)
// setup
}
func main() { // entry point of an executable (package main only)
}
myapp/
go.mod
main.go package main
internal/ packages here are PRIVATE to this module (can't be imported externally)
pkg/ or other dirs/ reusable packages
دليل internal/ خاص — حزمه يمكن استيرادها فقط ضمن نفس الوحدة، مما يفرض التغليف على مستوى الوحدة.
الحزم والوحدات هي كيفية هيكلة مشاريع Go وكيفية إدارة الاعتماديات — أمر أساسي لأي مشروع حقيقي.
فهم الحزم (دليل من الملفات، رؤية مرئية/خاصة قائمة على الأحرف الكبيرة، حزمة main الخاصة) أمر أساسي لتنظيم الكود والتحكم في واجهة برمجتها العامة.
الوحدات (go mod وgo.mod/go.sum) توفر إدارة اعتماديات قابلة للتكرار ومرقومة وتحقق من السلامة — المعيار الحديث الذي استبدل نهج GOPATH القديم.
معرفة نظام الاستيراد واتفاقية internal/ لكود خاص بالوحدة والأدوات (go mod init/tidy وgo get) ضرورية لبناء ومشاركة والحفاظ على مشاريع Go، وتعكس الطلاقة العملية مع نظام Go البيئي.