云服務(wù)集成允許開發(fā)者通過 go 語言訪問關(guān)鍵服務(wù),例如對象存儲和機器學(xué)習(xí)。要集成 amazon s3,需要使用 github.com/aws/aws-sdk-go/s3;要集成 google cloud vision api,需要使用 cloud.google.com/go/vision。
Go 函數(shù)中的云服務(wù)集成
云服務(wù)提供諸如對象存儲、數(shù)據(jù)分析和機器學(xué)習(xí)等關(guān)鍵服務(wù)。通過將云服務(wù)集成到應(yīng)用程序中,開發(fā)者可以訪問這些功能,而無需自己開發(fā)和維護基礎(chǔ)架構(gòu)。
Go 是一種流行的編程語言,憑借其出色的并發(fā)性和性能,非常適合云開發(fā)。Go 提供了幾個庫和包,可簡化與云服務(wù)的集成。
使用 Go 集成 Amazon S3
Amazon S3 (Simple Storage Service) 是一款流行的對象存儲服務(wù)。要使用 Go 集成 Amazon S3,可以使用 github.com/aws/aws-sdk-go/s3
包。
import ( "context" "fmt" "io" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" ) // uploadFileToS3 上傳文件到 Amazon S3 存儲桶中。 func uploadFileToS3(w io.Writer, bucket, key, filePath string) error { // 創(chuàng)建一個新的 S3 客戶端。 sess := session.Must(session.NewSession()) client := s3.New(sess) // 使用文件路徑打開一個文件。 file, err := os.Open(filePath) if err != nil { return fmt.Errorf("os.Open: %v", err) } defer file.Close() // 上傳文件到指定的存儲桶和鍵中。 _, err = client.PutObjectWithContext(context.Background(), &s3.PutObjectInput{ Bucket: aws.String(bucket), Key: aws.String(key), Body: file, }) if err != nil { return fmt.Errorf("PutObjectWithContext: %v", err) } fmt.Fprintf(w, "Uploaded file to %s/%s\n", bucket, key) return nil }
登錄后復(fù)制
使用 Go 集成 Google Cloud Vision API
Google Cloud Vision API 是一種圖像分析服務(wù)。要使用 Go 集成 Google Cloud Vision API,可以使用 cloud.google.com/go/vision
包。
import ( "context" "fmt" "log" vision "cloud.google.com/go/vision/apiv1" "cloud.google.com/go/vision/v2/apiv1/visionpb" ) // detectLabelsFromGCS 分析存儲在 Google Cloud Storage 的圖像。 func detectLabelsFromGCS(w io.Writer, gcsURI string) error { ctx := context.Background() c, err := vision.NewImageAnnotatorClient(ctx) if err != nil { return fmt.Errorf("vision.NewImageAnnotatorClient: %v", err) } defer c.Close() image := &visionpb.Image{ Source: &visionpb.ImageSource{ GcsImageUri: gcsURI, }, } annotations, err := c.DetectLabels(ctx, image, nil, 10) if err != nil { return fmt.Errorf("DetectLabels: %v", err) } if len(annotations) == 0 { fmt.Fprintln(w, "No labels found.") } else { fmt.Fprintln(w, "Labels:") for _, annotation := range annotations { fmt.Fprintln(w, annotation.Description) } } return nil }
登錄后復(fù)制