@@ -102,4 +102,61 @@ func main() {
102102
103103با اجرای برنامه و وارد کردن یک Command Line مخصوص مثل زیر، میتوانید مقدارهای مختلفی به Flagهای برنامه خود اختصاص دهید.
104104
105- در این مثال، مقدار Flag username برابر با "John"، print برابر با true و count برابر با ۵ میباشد.
105+ ``` shell
106+ go run main.go -username=John -print=true -count=5
107+ ```
108+
109+ در این مثال، مقدار Flag username برابر با "John"، print برابر با true و count برابر با ۵ میباشد.
110+
111+ همچنین قابل ذکر است که سه مدل Flag دیگر در پکیج flag وجود دارند که عبارتند از:
112+ flag.StringVar، flag.BoolVar و flag.IntVar. تفاوت این Flag ها با Flag های قبلی این است
113+ که یک آرگومان اضافی به عنوان اولین آرگومان دریافت می کنند که مقدار تعیین شده برای
114+ Flag به داخل این آرگومان ریخته می شود. در زیر یک مثال نسبتا واقعی در مورد کانفیگ
115+ اولیه برنامه با استفاده از StringVar آمده است:
116+
117+ {{< play >}}
118+ package main
119+
120+ import (
121+ "flag"
122+ "fmt"
123+ )
124+
125+ type application struct {
126+ DSN string
127+ Domain string
128+ JWTSecret string
129+ JWTIssuer string
130+ JWTAudience string
131+ CookieDomain string
132+ APIKey string
133+ }
134+
135+ func main() {
136+ // تعریف یک متغیر از جنس ساختار application
137+ var app application
138+
139+ // پر کردن فیلد های ساختار با استفاده از flag.StringVar
140+ flag.StringVar(&app.DSN, "dsn", "host=localhost port=5432 user=postgres password=postgres dbname=yourdbname sslmode=disable timezone=UTC connect_timeout=5", "postgres connection string")
141+ flag.StringVar(&app.JWTSecret, "jwt-secret", "verysecret", "signing secret")
142+ flag.StringVar(&app.JWTIssuer, "jwt-issuer", "example.com", "signing issuer")
143+ flag.StringVar(&app.JWTAudience, "jwt-audience", "example.com", "signing audience")
144+ flag.StringVar(&app.CookieDomain, "cookie-domain", "localhost", "cookie domain")
145+ flag.StringVar(&app.Domain, "domain", "example.com", "domain")
146+ flag.StringVar(&app.APIKey, "api-key", "9c89eaa00a4a6eefe56f5f53fe3b05a8", "api key")
147+ flag.Parse()
148+
149+ fmt.Println("data source name: ", app.DSN)
150+ fmt.Println("jwt secret: ", app.JWTSecret)
151+ fmt.Println("jwt issuer: ", app.JWTIssuer)
152+ fmt.Println("jwt audience: ", app.JWTAudience)
153+ fmt.Println("cookie domain: ", app.CookieDomain)
154+ fmt.Println("domain: ", app.Domain)
155+ fmt.Println("api key: ", app.APIKey)
156+ }
157+ {{< /play >}}
158+
159+ همانطور که مشاهده می کنید، ابتدا یک ساختار به نام application تعریف کردیم که در واقع
160+ همان مشخصات برنامه ما می باشد. سپس یک نمونه از این ساختار را در تابع اصلی برنامه تعریف
161+ کردیم و فیلد های این نمونه از ساختار application را که app نام دارد با استفاده از
162+ flag.StringVar مقدار دهی کردیم و در نهایت آنها را چاپ کردیم.
0 commit comments