日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

Go Cloud項(xiàng)目開源發(fā)布:Go語言將成為云端應(yīng)用開發(fā)的首選語言?(go語言開發(fā)云平臺)

Go Cloud項(xiàng)目開源發(fā)布:Go語言將成為云端應(yīng)用開發(fā)的首選語言?(go語言開發(fā)云平臺)

作者 | The Go Blog

編輯 | 張嬋 – 高效開發(fā)運(yùn)維公眾號

Go 語言團(tuán)隊(duì)發(fā)布了一個新的開源項(xiàng)目 Go Cloud,用于開發(fā)具有可移植性的云端應(yīng)用程序。

7 月 24 日,Go 語言團(tuán)隊(duì)發(fā)布了一個新的開源項(xiàng)目 Go Cloud。Go Cloud 是一個可在開放云平臺上進(jìn)行開發(fā)的庫和工具集,旨在讓 Go 語言成為開發(fā)構(gòu)建可移植云端應(yīng)用程序的首選語言。

1 為什么瞄準(zhǔn)具有可移植性的云端編程?為什么是現(xiàn)在?

谷歌的 Go 語言是當(dāng)今發(fā)展最快的編程語言之一,在全球擁有約 100 萬的活躍開發(fā)人員。Go 語言為包括 Kubernetes,Istio 和 Docker 在內(nèi)的許多關(guān)鍵云基礎(chǔ)架構(gòu)項(xiàng)目提供支持,并憑借其高效性,內(nèi)置并發(fā)性和低延遲受到很多云端開發(fā)人員的喜愛。

Go 語言團(tuán)隊(duì)從合作伙伴當(dāng)中了解到,很多公司都對跨云的可遷移性有共同的需求,他們想要在多云或混合云環(huán)境中部署健壯的應(yīng)用程序,并希望無需對代碼進(jìn)行大量更改就能在不同的云服務(wù)之間遷移工作負(fù)載。

為實(shí)現(xiàn)這一目標(biāo),一些團(tuán)隊(duì)嘗試將應(yīng)用程序與特定云服務(wù)的 API 分離,以生成更簡單,更可移植的代碼。然而,功能的快速迭代需求必將犧牲長期的可移植性。因此,云中運(yùn)行的大多數(shù) Go 應(yīng)用程序都與其初始云服務(wù)緊密耦合。

現(xiàn)在,團(tuán)隊(duì)可以使用 Go Cloud(一組開放的通用云端 API)編寫更簡單,可移植的云端應(yīng)用程序。Go Cloud 使團(tuán)隊(duì)能夠?qū)崿F(xiàn)其功能開發(fā)目標(biāo),同時能保持在多云和混合云架構(gòu)中遷移的靈活性。

2 Go Cloud 是什么

Go 語言團(tuán)隊(duì)識別了云端應(yīng)用程序使用的通用服務(wù),并創(chuàng)建了可跨云進(jìn)行應(yīng)用的通用 API。Go Cloud 采用 blob 存儲,可訪問 MySQL 數(shù)據(jù)庫,可進(jìn)行運(yùn)行時配置,還有一個具有內(nèi)置日志記錄,跟蹤和運(yùn)行狀況檢查的 HTTP 服務(wù)器。Go Cloud 目前提供對 Google Cloud Platform(GCP)和 Amazon Web Services(AWS)的支持。后期 Go 團(tuán)隊(duì)計劃與其他云服務(wù)和 Go 語言社區(qū)合作,盡快為其他云廠商添加支持。

Go Cloud 旨在為各種云中最常用的服務(wù)提供中立于廠商的 API,這樣可以輕松地將 Go 應(yīng)用程序進(jìn)行跨云遷移。Go Cloud 還為其他編寫跨云的庫的開源項(xiàng)目奠定了基礎(chǔ)。來自社區(qū)各級各類開發(fā)人員的反饋將決定 Go Cloud 中未來 API 的優(yōu)先級。

3 如何使用 Go Cloud

Go Cloud 的核心是一組進(jìn)行便攜云端編程的通用 API 集合。 我們來看一個使用 blob 存儲的例子。你可以使用 * blob.Bucket 這個通用類型將文件從本地磁盤復(fù)制到云服務(wù)中。 首先使用附帶的 s3blob 包打開一個 S3 bucket:

// setupBucket opens an AWS bucket. func setupBucket(ctx context.Context) (*blob.Bucket, error) { // Obtain AWS credentials. sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-east-2"), }) if err != nil { return nil, err } // Open a handle to s3://go-cloud-bucket. return s3blob.OpenBucket(ctx, sess, "go-cloud-bucket") }

一旦程序有了* blob.Bucket,就可以創(chuàng)建一個可以實(shí)現(xiàn) io.Writer 的 blob.Writer。 然后這個程序程序可以使用 * blob.Writer 將數(shù)據(jù)寫入 bucket,確保 Close 不會報告錯誤。

ctx := context.Background b, err := setupBucket(ctx) if err != nil { log.Fatalf("Failed to open bucket: %v", err) } data, err := ioutil.ReadFile("gopher.png") if err != nil { log.Fatalf("Failed to read file: %v", err) } w, err := b.NewWriter(ctx, "gopher.png", nil) if err != nil { log.Fatalf("Failed to obtain writer: %v", err) } _, err = w.Write(data) if err != nil { log.Fatalf("Failed to write to bucket: %v", err) } if err := w.Close; err != nil { log.Fatalf("Failed to close: %v", err) }

注意:使用 Bbucket 的邏輯不適用于AWS S3。通過更改用于打開 * blob.Bucket 的功能,Go Cloud 可以交換云端存儲。這樣應(yīng)用程序可以使用 gcsblob.OpenBucket 構(gòu)建一個 * blob.Bucket,不更改復(fù)制文件的代碼就能使用 Google Cloud Storage:

// setupBucket opens a GCS bucket. func setupBucket(ctx context.Context) (*blob.Bucket, error) { // Open GCS bucket. creds, err := gcp.DefaultCredentials(ctx) if err != nil { return nil, err } c, err := gcp.NewHTTPClient(gcp.DefaultTransport, gcp.CredentialsTokenSource(creds)) if err != nil { return nil, err } // Open a handle to gs://go-cloud-bucket. return gcsblob.OpenBucket(ctx, "go-cloud-bucket", c) }

雖然訪問不同云服務(wù)中的 bucket 需要不同的步驟,但應(yīng)用程序使用的結(jié)果類型是一樣的:* blob.Bucket。這將應(yīng)用程序代碼與特定云服務(wù)的代碼隔離開來。為了提高與現(xiàn)有 Go 庫的互操作性,Go Cloud 利用了 io.Writer,io.Reader 和 * sql.DB 等已建立的接口。

4 如何開始

官方教程地址:

https://github.com/google/go-cloud/tree/master/samples/tutorial

可按照此教程進(jìn)行操作并嘗試自行構(gòu)建應(yīng)用程序。如果你已經(jīng)在使用 AWS 或 GCP,可以嘗試遷移現(xiàn)有的應(yīng)用程序的一部分來嘗試使用 Go Cloud。如果你使用的是其他云服務(wù)或本地服務(wù),則可以通過實(shí)現(xiàn)驅(qū)動程序接口(如 driver.Bucket)來擴(kuò)展 Go Cloud 進(jìn)行支持。

Go Cloud 開源地址:

https://github.com/google/go-cloud

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部
宜阳县| 宁明县| 西乡县| 金寨县| 大新县| 乌鲁木齐县| 竹溪县| 三都| 高清| 鄂伦春自治旗| 格尔木市| 鹤庆县| 化隆| 贡觉县| 香格里拉县| 宜川县| 行唐县| 金山区| 榆树市| 大厂| 卓尼县| 昌都县| 原阳县| 淮安市| 曲阳县| 梁河县| 龙泉市| 新营市| 射洪县| 青浦区| 九龙县| 临邑县| 高碑店市| 定结县| 宜昌市| 庄浪县| 兴山县| 乐都县| 扶余县| 镇康县| 固镇县|