面向云与网络服务的Go语言

概述

Go语言帮助企业构建和扩展云计算系统

随着应用程序和处理过程向云端迁移,并发性成为一个非常重要的问题。云计算系统本质上是资源共享和扩展的。协调对共享资源的访问是影响云端每个应用程序处理的问题,这要求编程语言“明确地致力于开发高度可靠的应用程序”。

Go让公司规模扩张变得非常容易。这一点非常重要,因为随着工程团队的成长,每个服务都可以由不同的团队管理。

主要优势

解决开发周期与服务器性能之间的权衡问题

Go语言的创建正是为了解决大规模应用、微服务和云开发中的这些并发需求。事实上,云原生计算基金会超过75%的项目是用Go编写的。

Go有助于减少这种权衡的必要性,其快速的构建时间支持迭代开发,降低了内存和CPU使用率。使用Go构建的服务器启动迅速,在按需付费和无服务器部署模式下运行成本更低。

应对现代云挑战,提供标准的地道API

Go语言解决了开发者在现代云环境中面临的许多挑战,提供标准的地道API,并内置并发支持以充分利用多核处理器。Go的低延迟和“无需调优”特性使其在性能和生产力之间取得了很好的平衡——赋予了工程团队选择的权力和快速行动的能力。

用例

将Go用于云计算

Go的优势在构建服务时尤为突出。其速度和内置的并发支持可以构建出快速高效的服务,而静态类型、强大的工具链以及对简洁性和可读性的重视有助于构建可靠且可维护的代码。

Go拥有一个强大的服务开发生态系统。标准库包含了处理常见需求的包,如HTTP服务器和客户端、JSON/XML解析、SQL数据库以及一系列安全/加密功能,同时Go运行时还包含竞态检测基准测试/性能分析、代码生成和静态代码分析等工具。

主要的云服务商(GCPAWSAzure)为其服务提供了Go API,而流行的开源库则为API工具化(Swagger)、传输(Protocol BuffersgRPC)、监控(OpenCensus)、对象关系映射(gORM)以及认证(JWT)提供了支持。开源社区还提供了多个服务框架,包括Go KitGo MicroGizmo,这些都是快速上手的好方法。

用于云计算的Go工具

Docker Docker

Docker是一个平台即服务,它在容器中交付软件。容器将软件、库和配置文件打包在一起,由Docker引擎托管,并由单个操作系统内核运行(比虚拟机使用更少的系统资源)。

云开发者使用Docker来管理他们的Go代码并支持多个平台,因为Docker支持开发工作流和部署过程。

Kubernetes Kubernetes

Kubernetes是一个用Go编写的开源容器编排系统,用于自动化Web应用的部署。Web应用通常使用容器(如上所述)打包其依赖项和配置。Kubernetes有助于大规模部署和管理这些容器。云程序员使用Kubernetes来快速构建、交付和扩展容器化应用——通过控制容器如何运行的API来管理日益增长的复杂性。

Customer Brief introduction Projects using go
Google Google Google 谷歌云在其产品和工具生态系统中广泛使用Go语言,包括Kubernetes、gVisor、Knative、Istio和Anthos。谷歌云的所有API和运行时都完全支持Go语言。
Capital One Capital One Capital One Capital One使用Go语言驱动其关键服务——信贷报价API。其工程团队也正在使用Go构建无服务器架构,他们提到Go的速度和简洁性,并表示“(他们)不想在没有Go的情况下走向无服务器。”
Dropbox Dropbox Dropbox Dropbox最初是用Python构建的,但在2013年决定将其性能关键的后端迁移到Go。如今,该公司的大部分基础设施都由Go编写。

开始学习

云计算领域的Go书籍

  • Echo

    一个高性能、可扩展且极简的Go Web框架

  • Flamingo

    一个基于Go的快速开源框架,具有清晰且可扩展的架构

  • Gin

    一个用Go编写的Web框架,具有类似Martini的API。

  • Gorilla

    一个用于Go编程语言的Web工具包。

View More
  • net/http

    标准库HTTP包

  • julienschmidt/httprouter

    一个轻量级高性能的HTTP请求路由器

  • gorilla/mux

    一个强大的HTTP路由器和URL匹配器,用于构建Go Web服务器 🦍

  • Chi

    一个轻量级、符合惯例且可组合的路由器,用于构建Go HTTP服务。

View More
View More
  • database/sql

    标准库接口,支持MySQL、Postgres、Oracle、MS SQL、BigQuery以及大多数SQL数据库的驱动

  • mongo-driver/mongo

    MongoDB官方支持的Go语言驱动

  • elastic/go-elasticsearch

    一个用于Go的Elasticsearch客户端

  • GORM

    一个Go语言的ORM库

  • Bleve

    Go语言的全文搜索与索引

  • CockroachDB

    数据库的一种演进——为云而设计,旨在大规模提供弹性、一致的分布式SQL

View More
View More
  • gopherjs

    一个从Go到JavaScript的编译器,允许开发者用Go编写可在所有浏览器中运行的前端代码。

View More