package sdk import ( "encoding/json" "errors" "git.sxidc.com/service-supports/ds-sdk/client" "git.sxidc.com/service-supports/ds-sdk/db_operations" ) var sdkInstance *SDK func GetInstance() *SDK { return sdkInstance } func InitInstance(token string, baseUrl string, namespace string, dataSource string, opts ...Option) error { if sdkInstance != nil { return nil } options := &Options{ token: token, baseUrl: baseUrl, namespace: namespace, dataSource: dataSource, } for _, opt := range opts { opt(options) } c := client.New(options.timeout) dbOperations, err := initDBOperations(c, options) if err != nil { return err } sdkInstance = &SDK{ options: options, client: c, dbOperations: dbOperations, } return nil } func initDBOperations(c *client.Client, options *Options) (db_operations.DBOperations, error) { dataSourceInfo, err := c.GetDataSources(options.token, options.baseUrl, options.namespace, options.dataSource, "database", 0, 0) if err != nil { return nil, err } if dataSourceInfo == nil || len(dataSourceInfo) == 0 { return nil, errors.New("不存在类型为database的数据源" + options.dataSource) } specStr, err := c.GetDataSourceSpec(options.token, options.baseUrl, options.namespace, options.dataSource) if err != nil { return nil, err } specMap := make(map[string]any) err = json.Unmarshal([]byte(specStr), &specMap) if err != nil { return nil, err } dbOperations, err := db_operations.NewOperationsFromMap(specMap) if err != nil { return nil, err } return dbOperations, nil } func DestroyInstance() error { if sdkInstance == nil { return nil } err := db_operations.DestroyOperation(sdkInstance.dbOperations.(*db_operations.Operations)) if err != nil { return err } sdkInstance = nil return nil }