Go 快速入门
几分钟之内,你的 Go 服务就会在进程内评估 feature flags——每次检查没有网络跳转,请求路径上没有延迟,一次轮询服务你的进程处理的每一个请求。
零运行时依赖:SDK 的 require 块是空的,而且会一直空下去。
SDK 放在 GitHub 上的一个公开仓库里——直接从那里安装,并固定到发布版本:
go get github.com/FortressFlag/FortressFlag_SDK_go@v1.0.02. 服务器密钥——真正的机密
Section titled “2. 服务器密钥——真正的机密”这个 SDK 使用服务器密钥(ffs_…),它和移动端与 Web SDK 所携带的客户端密钥恰恰相反:它可以下载你的完整 ruleset,包括定向规则。像对待数据库密码一样对待它——环境变量或机密管理器,绝不进代码,绝不进仓库,绝不进日志。两类密钥,并排对照。
3. 启动客户端
Section titled “3. 启动客户端”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 到达(或 context 结束) cancel()
// ... 你的服务运行;flag 检查现在是内存中的函数调用。}Start 永远不会返回致命错误——如果第一次获取不能及时完成,客户端会在后台继续尝试,而你的调用方在此期间拿到它们的默认值。
4. 评估一个 flag
Section titled “4. 评估一个 flag”enabled := client.Bool("new-checkout", fortressflag.Context{ Key: "user-42", // 你的稳定上下文 key:用户 id、会话 id——由你选择 Tags: map[string]string{"cohort": "beta"},}, false) // flag 未知或从未获取到任何东西时的回退值client.String 和 client.Number 的用法相同。上下文 Key 是百分比灰度用来分桶的东西——始终传入同一个标识符,每个用户就会得到一个稳定的分组。它是你的数据:SDK 从不验证、存储或记录它。
就是这样——你的服务正在本地评估 flag。一次控制台变更会在大约一分钟内到达每一个进程。
评估永远不会失败
Section titled “评估永远不会失败”Bool、String 和 Number 总会给出答案,从不 panic——一个 flag 方面的问题绝不能拖垮你的服务。重启后的进程在第一次获取完成之前提供你调用处的回退值(或者在配置里设置 CachePath,把最后一个 ruleset 持久化到你选定的文件,重启就能立即从它恢复)。即使密钥被吊销也不会弄坏任何东西:SDK 会继续用它最后下载的 ruleset 评估,直到你交给它一个新密钥。
- Flag 如何到达你的应用——服务端平面详解
- 密钥——签发、轮换和吊销
ffs_密钥 - 定向——你的服务现在正在评估的那些规则