از LaunchDarkly (LD) با Golang – Dev Community استفاده کنید

مقدمه
در توسعه نرم افزار مدرن ، پرچم گذاری ویژگی ها به یک تکنیک قدرتمند برای مدیریت فرآیند انتشار ، بهبود ایمنی استقرار و امکان تحویل مداوم تبدیل شده است. LaunchDarkly یک بستر محبوب مدیریت ویژگی است که به تیم ها کمک می کند تا دید ویژگی های تولید را کنترل کنند. در این مقاله نحوه ادغام LaunchDarkly با Golang (Go) ، به شما امکان می دهد تا بدون استفاده مجدد از برنامه خود ، ویژگی های پویا را تغییر دهید.
LaunchDarkly چیست؟
LaunchDarkly یک پلت فرم مدیریت و آزمایش ویژگی است که توسعه دهندگان را قادر می سازد تا کد را مستقر کنند اما کنترل کاربران را کنترل می کنند. این اجازه می دهد تا تیم ها:
- به تدریج ویژگی ها را برای کاربران جمع کنید.
- A/B نسخه های مختلف یک ویژگی را تست کنید.
- ویژگی های مشکل ساز را بدون بازگشت کامل غیرفعال کنید.
- استقرار کد جداگانه از انتشار ویژگی.
LaunchDarkly برای دستیابی به این هدف از پرچم های ویژگی (همچنین به عنوان ضامن ویژگی شناخته می شود) استفاده می کند. پرچم های ویژگی در اصل در کد شما شرط هستند که تعیین می کند آیا یک ویژگی برای یک کاربر یا زمینه خاص فعال شده است.
نحوه استفاده از LaunchDarkly
برای استفاده از LaunchDarkly در برنامه خود:
-
یک حساب LaunchDarkly ایجاد کنید و یک پروژه و محیط جدید تنظیم کنید. https://app.launchdarkly.com/
-
پرچم های ویژگی را در داشبورد LD تعریف کنید.
-
LD SDK را در کد برنامه خود ادغام کنید.
-
پرچم های ویژگی را در زمان اجرا ارزیابی کنید و از مقادیر آنها برای کنترل منطق برنامه استفاده کنید.
پرچم نمونه من –
تغییرات پرچم نمونه –
LaunchDarkly SDK را برای زبانهای مختلف از جمله GO فراهم می کند که به برنامه شما اجازه می دهد تا با سرویس LD در تعامل باشد و پرچم ها را ارزیابی کند.
مثال کد با Golang
در اینجا یک مثال ساده از نحوه ادغام و استفاده از LaunchDarkly در یک برنامه GO وجود دارد:
مرحله 1: SDK را نصب کنید
go get "github.com/launchdarkly/go-server-sdk/v7"
مرحله 2: مثال کد
در اینجا ما مثالی برای پرچم JSON داریم و همچنین Watcher را روی آن پرچم اضافه می کنیم.
package main
import (
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/launchdarkly/go-sdk-common/v3/ldcontext"
"github.com/launchdarkly/go-sdk-common/v3/ldvalue"
ld "github.com/launchdarkly/go-server-sdk/v7"
)
// Replace with your actual LaunchDarkly SDK key
const sdkKey = "YOUR-SDK-KEY"
// Replace with the key of the JSON flag you want to evaluate
const jsonFlagKey = "json-flag"
func main() {
// --- 1. Configure and Initialize the LaunchDarkly Client (v7) ---
// Optional: for advanced configuration like logging
// config := ld.Config{} // Default configuration
// client, err := ld.MakeCustomClient(sdkKey, config, 5*time.Second)
// Creating client with Default configuration
client, err := ld.MakeClient(sdkKey, 5*time.Second)
if err != nil {
log.Fatalf("Error initializing LaunchDarkly client: %v", err)
}
defer func() {
if err := client.Close(); err != nil {
log.Printf("Error closing LaunchDarkly client: %v", err)
}
}()
if !client.Initialized() {
log.Println("Client did not initialize successfully within the timeout.")
} else {
log.Println("LaunchDarkly client initialized successfully.")
}
// --- 2. Define the Evaluation Context (v7 uses ldcontext from common v3) ---
evaluationContext := ldcontext.New("example-context-key")
// Add more attributes as needed:
// evaluationContext = ldcontext.NewBuilder("example-user-key").
// Kind("user").
// Name("Example User").
// SetString("email", "user@example.com").
// Build()
// --- 3. Read the Initial JSON Flag Value (v7 uses ldvalue from common v3) ---
defaultValue := ldvalue.ObjectBuild().Build()
jsonValue, err := client.JSONVariation(jsonFlagKey, evaluationContext, defaultValue)
if err != nil {
log.Printf("Error evaluating flag '%s': %v. Using default value.", jsonFlagKey, err)
}
log.Printf("Initial value for flag '%s': %s\n", jsonFlagKey, jsonValue.JSONString())
// --- 4. Watch for Flag Changes (v7 Flag Tracker with Listener Function) ---
WatchFlagChanges(client, jsonFlagKey, evaluationContext)
// --- 5. Keep the Application Running ---
log.Println("Application started. Watching for flag changes. Press Ctrl+C to exit.")
// Wait for a termination signal (Ctrl+C)
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
}
func WatchFlagChanges(client *ld.LDClient, flagKey string, context ldcontext.Context) {
updateCh := client.GetFlagTracker().AddFlagValueChangeListener(flagKey, context, ldvalue.Null())
go func() {
for event := range updateCh {
log.Printf("Flag %q for context %q has changed from %s to %s", event.Key,
context.Key(), event.OldValue, event.NewValue)
}
}()
}
خروجی:
برای خروجی بالاتر ، می توانیم ببینیم که مقدار پرچم از آن تغییر کرد env:stage
به env:prod
بعد از اینکه هدف را برای پرچم تغییر دادم.
یادداشت ها:
- your_sdk_key خود را با کلید SDK محیط خود از LaunchDarkly جایگزین کنید.
- “ویژگی جدید” را با کلید واقعی پرچم تعریف شده خود در داشبورد LD جایگزین کنید.
پایان
استفاده از LaunchDarkly با Golang به توسعه دهندگان این امکان را می دهد تا کنترل ریز و درشت بر روی ویژگی های ویژگی را بدست آورند و روند استقرار را بهبود بخشند. با ادغام پرچم های ویژگی در برنامه GO ، می توانید کد را با اعتماد به نفس ارسال کنید ، نسخه های قناری را انجام دهید و به سرعت به مشکلات تولید پاسخ دهید. LaunchDarkly فقط با چند خط کد ، کنترل قدرتمند و واقعی را بر رفتار برنامه شما امکان پذیر می کند.