コンテンツにスキップ

Go クイックスタート

数分で、あなたの Go サービスはフィーチャーフラグをプロセス内で評価するようになります。確認ごとのネットワーク往復も、リクエスト経路のレイテンシもなく、1 回のポーリングがプロセスの処理するすべてのリクエストをまかないます。

ランタイム依存はゼロ。SDK の require ブロックは空で、これからも空のままです。

SDK は GitHub の公開リポジトリにあります。そこから直接、リリースに固定してインストールしてください。

Terminal window
go get github.com/FortressFlag/FortressFlag_SDK_go@v1.0.0

2. サーバーキー、正真正銘の秘密

Section titled “2. サーバーキー、正真正銘の秘密”

この SDK はサーバーキー(ffs_…)を使います。モバイルや Web の SDK が出荷するクライアントキーとは正反対で、ターゲティングルールを含む完全な ruleset をダウンロードできます。データベースのパスワードとまったく同じように扱ってください。環境変数かシークレットマネージャーに置き、コード、リポジトリ、ログには決して入れません。2 つのキーのクラスを並べて。

package main
import (
"context"
"os"
"time"
fortressflag "github.com/FortressFlag/FortressFlag_SDK_go"
)
func main() {
client, err := fortressflag.New(fortressflag.Configuration{
Key: os.Getenv("FF_SERVER_KEY"),
})
if err != nil {
// SDK がエラーを返しうる唯一の場所:何かを配信する前の、
// 不正な設定。
panic(err)
}
defer client.Close()
startCtx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
client.Start(startCtx) // 最初の ruleset が届く(またはコンテキストが終わる)までブロックする
cancel()
// ... サービスが動く。flag の確認はもうメモリ内の関数呼び出し。
}

Start が致命的なエラーを返すことはありません。最初の取得が時間内に届かなければ、クライアントはバックグラウンドで再試行を続け、その間、呼び出し元はデフォルトを受け取ります。

enabled := client.Bool("new-checkout", fortressflag.Context{
Key: "user-42", // 安定したコンテキストキー:ユーザー ID、セッション ID など、あなたの選択
Tags: map[string]string{"cohort": "beta"},
}, false) // flag が不明、または一度も取得していないときのフォールバック

client.String と client.Number も同じように動きます。コンテキストの Key はパーセンテージロールアウトがバケット分けの基準にするものです。同じ識別子を一貫して渡せば、各ユーザーは安定したコホートを得ます。それはあなたのデータです。SDK が検証、保存、ログすることは決してありません。

これで完了です。サービスはローカルで flag を評価しています。ダッシュボードの変更は約 1 分以内にすべてのプロセスに届きます。

Bool、String、Number は常に答え、決して panic しません。flag の問題がサービスを止めることがあってはならないからです。再起動したプロセスは、最初の取得が届くまで呼び出し箇所のフォールバックを配信します(あるいは設定で CachePath を指定して、最後の ruleset を任意のファイルに永続化すれば、再起動はそこから即座に再開します)。失効したキーでさえ何も壊しません。SDK は、新しいキーを渡すまで、最後にダウンロードした ruleset で評価を続けます。