4.13 آموزش کار با environment variable

4.13 آموزش کار با environment variable

Environment Variables یا متغیرهای محیطی، متغیرهایی هستند که در فضای محیطی سیستم عامل مشخص شده‌اند. این متغیرها، شامل اطلاعاتی مانند مسیر فایل‌ها، تنظیمات سیستم، ترجیحات و تعیینات ساده و دیگر اطلاعات مورد استفاده توسط برنامه‌ها هستند.

به عنوان مثال، در سیستم عامل لینوکس، PATH یک متغیر محیطی است که شامل یک فهرست از دایرکتوری‌هایی است که سیستم به دنبال فایل‌ها و برنامه‌ها می‌گردد. برای دسترسی به این متغیر، می‌توان از دستور زیر در خط فرمان استفاده کرد:

echo $PATH

همچنین، در زبان برنامه‌نویسی Go نیز استفاده از Environment Variables بسیار رایج است. برای نمونه، تنظیمات پایگاه داده را می‌توان با استفاده از Environment Variables در برنامه اصلی تنظیم کرد. در این مثال بسیار کوتاه، متصل شدن به پایگاه داده با استفاده از متغیرهای محیطی بیان شده است:

 1package main
 2
 3import (
 4    "database/sql"
 5    "os"
 6)
 7
 8func main() {
 9    db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))
10    if err != nil {
11        panic(err)
12    }
13    defer db.Close()
14
15    // Do something with the database
16}

در این مثال، پایگاه داده PostgreSQL از طریق پارامتر DATABASE_URL قابل تنظیم است. با استفاده از os.Getenv مقدار متغیر محیطی با همین نام به دست می‌آید و سپس به عنوان آرگومان به sql.Open ارائه می‌شود.

استفاده از Environment Variables یک روش مدیریتی عالی برای محیط برنامه است. این روش، به برنامه‌ها امکان می‌دهد که بدون اینکه برای هر برنامه یک سری تنظیمات خاص وجود داشته باشد، با یک سری تنظیمات کلی کار کنند و به صورت پویا و گسترده پاسخگو باشند.

4.13.1 نحوه set کردن #

در زبان برنامه‌نویسی Go، برای set کردن Environment Variables می‌توان از پکیج os استفاده کرد. برای مثال، برای تعیین متغیر محیطی با نام “DATABASE_URL” به مقدار “postgresql://localhost/mydb” می‌توانید از تابع os.Setenv استفاده کنید:

 1package main
 2
 3import (
 4    "fmt"
 5    "os"
 6)
 7
 8func main() {
 9    err := os.Setenv("DATABASE_URL", "postgresql://localhost/mydb")
10    if err != nil {
11        panic(err)
12    }
13    fmt.Println("Environment variable set successfully")
14}

در این مثال، با استفاده از تابع os.Setenv، متغیر محیطی با نام DATABASE_URL و مقدار postgresql://localhost/mydb تنظیم شده است. اگر خطا رخ دهد، با استفاده از تابع panic خطا ثبت می‌شود. سپس یک پیام تاییدی برای نشان دادن موفقیت set کردن متغیر محیطی نمایش داده می‌شود.

اگر بخواهید یک Environment Variable را به یک مقدار خالی تنظیم کنید، می‌توانید از تابع os.Unsetenv استفاده کنید. برای مثال، برای حذف متغیر محیطی DATABASE_URL، کد زیر را می‌توانید استفاده کنید:

 1package main
 2
 3import (
 4    "fmt"
 5    "os"
 6)
 7
 8func main() {
 9    err := os.Unsetenv("DATABASE_URL")
10    if err != nil {
11        panic(err)
12    }
13    fmt.Println("Environment variable unset successfully")
14}

در این مثال، با استفاده از تابع os.Unsetenv، متغیر محیطی با نام DATABASE_URL حذف شده است. اگر خطا رخ دهد، با استفاده از تابع panic خطا ثبت می‌شود. سپس یک پیام تاییدی برای نشان دادن موفقیت unset کردن متغیر محیطی نمایش داده می‌شود.

4.13.2 نحوه get کردن #

در زبان برنامه‌نویسی Go، برای get کردن Environment Variables می‌توان از پکیج os استفاده کرد. برای مثال، برای به دست آوردن مقدار متغیر محیطی با نام “DATABASE_URL” می‌توانید از تابع os.Getenv استفاده کنید:

 1package main
 2
 3import (
 4    "fmt"
 5    "os"
 6)
 7
 8func main() {
 9    dbUrl := os.Getenv("DATABASE_URL")
10    fmt.Printf("Database URL: %s\n", dbUrl)
11}

در این مثال، با استفاده از تابع os.Getenv، متغیر محیطی با نام DATABASE_URL به عنوان پارامتر به تابع ارسال شده و مقدار آن در یک متغیر به نام dbUrl ذخیره شده است. سپس با استفاده از تابع fmt.Printf، مقدار dbUrl به همراه یک پیام مشابه “Database URL: postgresql://localhost/mydb” نمایش داده می‌شود.

اگر مقدار متغیر محیطی مورد نظر وجود نداشته باشد، تابع os.Getenv مقدار خالی برمی‌گرداند. لذا برای اطمینان از وجود مقدار متغیر محیطی، می‌توانید از تابع os.LookupEnv استفاده کنید. برای مثال، کد زیر چک می‌کند که آیا متغیر محیطی EMAIL تنظیم شده است یا خیر:

 1package main
 2
 3import (
 4    "fmt"
 5    "os"
 6)
 7
 8func main() {
 9    email, ok := os.LookupEnv("EMAIL")
10    if ok {
11        fmt.Printf("Email address: %s\n", email)
12    } else {
13        fmt.Println("Email address is not set")
14    }
15}

در این مثال، با استفاده از تابع os.LookupEnv، متغیر محیطی با نام EMAIL برای وجود مقدار بررسی شده است. اگر مقدار موجود بود، با استفاده از تابع fmt.Printf، مقدار این متغیر به همراه یک پیام مشابه “Email address: user@example.com” نمایش داده می‌شود. در صورتی که مقداری برای این متغیر وجود نداشته باشد، با استفاده از تابع fmt.Println، یک پیام مشابه “Email address is not set” نمایش داده می‌شود.

4.13.3 کار با فایل env. #

فایل .env یک فایل متنی است که حاوی متغیرهای محیطی برای برنامه شما است. در Go، می‌توانیم از پکیج godotenv استفاده کنیم تا مقادیر متغیرهای محیطی را از فایل .env بخوانیم و در متغیرهای خود بارگذاری کنیم.

برای استفاده از پکیج godotenv، ابتدا باید آن را با استفاده از دستور زیر نصب کنید:

go get github.com/joho/godotenv

سپس می‌توانید از تابع godotenv.Load() استفاده کنید تا متغیرهای محیطی از فایل .env خوانده شود. در زیر یک مثال برای استفاده از پکیج godotenv به همراه فایل .env نشان داده شده است:

فرض کنید فایل .env شما به شکل زیر باشد:

DATABASE_URL=postgresql://localhost/mydb
API_KEY=AbCdEfGhIjKlMnOp

حال در کد Go خود، پکیج godotenv را import کرده و با استفاده از تابع godotenv.Load()، متغیرهای محیطی از فایل .env خوانده شده و در متغیرهای خود بارگذاری کنید:

 1package main
 2
 3import (
 4    "fmt"
 5    "github.com/joho/godotenv"
 6    "os"
 7)
 8
 9func main() {
10    // Load environment variables from .env file
11    err := godotenv.Load()
12    if err != nil {
13        fmt.Println("Error loading .env file")
14        os.Exit(1)
15    }
16
17    // Get values of environment variables
18    dbUrl := os.Getenv("DATABASE_URL")
19    apiKey := os.Getenv("API_KEY")
20
21    // Print the values
22    fmt.Printf("Database URL: %s\n", dbUrl)
23    fmt.Printf("API Key: %s\n", apiKey)
24}

در این مثال، با استفاده از تابع godotenv.Load()، متغیرهای محیطی از فایل .env خوانده شده و در متغیرهای خود بارگذاری شده‌اند. سپس با استفاده از تابع os.Getenv()، مقادیر این متغیرها به دست آمده و با استفاده از تابع fmt.Printf نمایش داده شده‌اند.

با استفاده از این روش، مقادیری که در فایل .env تعریف شده‌اند، در زمان اجرای برنامه به راحتی قابل دسترس خواهند بود و این اجازه را به شما می‌دهد که مقادیر مورد نیاز را به راحتی تغییر دهید و حتی بدون تغییر کد، برنامه خود را در محیط‌های مختلف اجرا کنید.