Skip to content

Commit

Permalink
add: environment variables section
Browse files Browse the repository at this point in the history
  • Loading branch information
Ja7ad committed May 23, 2023
1 parent 57691dd commit 78c3a8c
Showing 1 changed file with 170 additions and 1 deletion.
171 changes: 170 additions & 1 deletion content/chapter 4/4.13-environment-variable.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,173 @@ slug: work-with-environment-variable
weight: 7013
---

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

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

```
echo $PATH
```

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

```go
package main

import (
"database/sql"
"os"
)

func main() {
db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))
if err != nil {
panic(err)
}
defer db.Close()

// Do something with the database
}
```

در این مثال، پایگاه داده 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 استفاده کنید:

```go
package main

import (
"fmt"
"os"
)

func main() {
err := os.Setenv("DATABASE_URL", "postgresql://localhost/mydb")
if err != nil {
panic(err)
}
fmt.Println("Environment variable set successfully")
}
```

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

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

```go
package main

import (
"fmt"
"os"
)

func main() {
err := os.Unsetenv("DATABASE_URL")
if err != nil {
panic(err)
}
fmt.Println("Environment variable unset successfully")
}
```

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

## 4.13.2 نحوه get کردن

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

```go
package main

import (
"fmt"
"os"
)

func main() {
dbUrl := os.Getenv("DATABASE_URL")
fmt.Printf("Database URL: %s\n", dbUrl)
}
```

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

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

```go
package main

import (
"fmt"
"os"
)

func main() {
email, ok := os.LookupEnv("EMAIL")
if ok {
fmt.Printf("Email address: %s\n", email)
} else {
fmt.Println("Email address is not set")
}
}
```

در این مثال، با استفاده از تابع os.LookupEnv، متغیر محیطی با نام EMAIL برای وجود مقدار بررسی شده است. اگر مقدار موجود بود، با استفاده از تابع fmt.Printf، مقدار این متغیر به همراه یک پیام مشابه "Email address: [user@example.com](mailto: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 خوانده شده و در متغیرهای خود بارگذاری کنید:

```go
package main

import (
"fmt"
"github.com/joho/godotenv"
"os"
)

func main() {
// Load environment variables from .env file
err := godotenv.Load()
if err != nil {
fmt.Println("Error loading .env file")
os.Exit(1)
}

// Get values of environment variables
dbUrl := os.Getenv("DATABASE_URL")
apiKey := os.Getenv("API_KEY")

// Print the values
fmt.Printf("Database URL: %s\n", dbUrl)
fmt.Printf("API Key: %s\n", apiKey)
}
```

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

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

0 comments on commit 78c3a8c

Please sign in to comment.