sdk client for any ucloud product openapi service should constructed by client config and credential config,
import (
"github.com/ucloud/ucloud-sdk-go/services/uhost"
)
client := uhost.NewClient(&cfg, &credential)
req := client.NewCreateUHostInstanceRequest()
req.Password = ucloud.String("xxx")
req.LoginMode = ucloud.String("Password")
req.Region = ucloud.String("cn-bj2")
req.Zone = ucloud.String("cn-bj2-04")
req.ImageId = ucloud.String("uimage-xxxx")
req.CPU = ucloud.Int(1)
req.Memory = ucloud.Int(1024)
To set request timeout for current request, it will overwrite the client Timeout at current request only.
req.WithTimeout(10 * time.Second)
To set request max retries > 0 to enable auto retry, it will overwrite the client MaxRetries at current request only.
req.WithRetry(3)
resp, err := client.CreateUHostInstance(req)
log.Printf("%#v", resp.UHostIds)
In general usage, you can serialize error to string for free, use err.Error()
or
fmt.Printf("got error: %s", err)
For business error with RetCode > 0 at the body of server response, you can check it easily, such as
if uerr.IsCodeError(err) {
fmt.Printf("%v %s", e.Code(), e.Message())
} else {
fmt.Printf("%s", e)
}
In advanced usage, error could be infered ucloud sdk client error / server error, such as
import (
uerr "github.com/ucloud/ucloud-sdk-go/ucloud/error"
)
if err != nil {
switch err.(type) {
case uerr.(ClientError):
fmt.Printf("client error: %s", err)
case uerr.(ServerError):
fmt.Printf("server error: %s", err)
}
}
or enum by error name
import (
uerr "github.com/ucloud/ucloud-sdk-go/ucloud/error"
)
if e, ok := err.(uerr.Error); err != nil && ok {
switch e.Name() {
case uerr.ErrRetCode:
fmt.Printf("%v %s", e.Code(), e.Message())
default:
fmt.Printf("%s", e)
}
}