哪些知名公司在使用Golang语言

Python018

哪些知名公司在使用Golang语言,第1张

Go语言是谷歌2009发布的第二款开源编程语言。

Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

现在很多知名公司都在使用Go语言,比如说:Google、Facebook、腾讯、百度、阿里、京东、小米、360等。

Go作为Google2009年推出的语言,其被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于 游戏 服务端的开发而言是再好不过了。

到现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

=================================

哪些大公司在使用Go语言:

1、Google

这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如:https://github.com/kubernetes/kubernetes ,大家也可以在Github上 https://github.com/google/ 查看更多Google的Go开源项目。

2、Facebook

Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过 https://github.com/facebookgo 访问查看facebook开源的项目,比如著名的是平滑升级的grace。

3、腾讯

腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice

4、百度

目前所知的百度的使用是在运维这边,是百度运维的一个BFE项目,负责前端流量的接入。他们的负责人在2016年有分享,大家可以看下这个http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend

5、阿里

阿里巴巴具体的项目不太清楚,不过听说其系统部门、CDN等正在招Go方面的人。

6、京东

京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发。

7、小米

小米对Golang的支持,莫过于运维监控系统的开源,也就是 http://open-falcon.com/

此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。

8、360

360对Golang的使用也不少,一个是开源的日志搜索系统Poseidon,托管在Github上,https://github.com/Qihoo360/poseidon

==================================

Go适合做什么?为何这么多人偏爱Go语言?

Go强大的开发团队

1、自由高效:组合的思想、无侵入式的接口

Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程以及函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。

2、强大的标准库

这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。

3、部署方便:二进制文件、Copy部署

我相信这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。

4、简单的并发

它包含了降低心智的并发和简易的数据同步,我觉得这是Go最大的特色。之所以写正确的并发、容错和可扩展的程序如此之难,是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单。

5、稳定性

Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、gofmt、go test。

================================

我们为什么选择GO语言

选择GO语言,主要是基于两方面的考虑

1. 执行性能 缩短API的响应时长,解决批量请求访问超时的问题。在Uwork的业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的PHP实现模式下,要做到并行调用是非常困难的,串行处理却不能从根本上提高处理性能。而GO语言不一样,通过协程可以方便的实现API的并行处理,达到处理效率的最大化。 依赖Golang的高性能HTTP Server,提升系统吞吐能力,由PHP的数百级别提升到数千里甚至过万级别。

2. 开发效率 GO语言使用起来简单、代码描述效率高、编码规范统一、上手快。 通过少量的代码,即可实现框架的标准化,并以统一的规范快速构建API业务逻辑。 能快速的构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产。

Go语言近两年的发展速度还是非常快的,一方面Go语言有强大的行业背书,另一方面Go语言在设计时充分考虑了当前的编程环境,加强了大数据量、高并发等应用场景的处理能力,强调编程语言自身对于处理性能的追求,相信Go语言在未来大数据和人工智能相关技术逐渐落地应用的背景下,会有一个较为广阔的发展空间。

由于 Docker 编译需要依赖于 Docker Daemon ,所以只能在 64 位的 Linux 环境下先安装 Docker 程序,再从 Github 上克隆 Docker 的代码进行编译。

在 Docker 的目录下执行 make 命令将默认执行 Makefile 中 make binary 指令进行编译。

?

default: binary

all: build

$(DOCKER_RUN_DOCKER) hack/make.sh

binary: build

$(DOCKER_RUN_DOCKER) hack/make.sh binary

cross: build

$(DOCKER_RUN_DOCKER) hack/make.sh binary cross

从以上的 Makefile 可以看出,执行 make、make binary、make all 或 make cross 都可以得到可运行的 Docker 程序。

在 Mac OS 环境下使用 brew 的命令安装 Docker ,只能得到一个 docker client 的二进制程序,如果以 daemon 的方式运行,会得到 ‘This is a client-only binary - running the Docker daemon is not supported.’ 的错误提示信息。

方法 1.

使用 VirtualBox 或者 VMWare Workstation 安装一个 Linux 的虚拟机。宿主机使用 VPN 等方案使网络“正常”访问各种“服务”,虚拟机网卡使用 NAT 模式。在 Linux 虚拟机内使用 make 进行编译 Docker 不会有任何网络问题。只是编译速度受限于 VPN 等网络解决方案,有可能等待时间很长。

方法 2.

Docker 每次发布新版本,都会在 docker-dev 的镜像仓库发布一个新的标签,这个镜像仓库包含了编译 Docker 镜像所依赖的所有环境,只需替换 Docker 代码目录下的 Dockerfile 即可实现编译 Docker 。

?

FROM docker.cn/docker/docker-dev:v1.2.0

VOLUME /var/lib/docker

WORKDIR /go/src/github.com/docker/docker

ENV DOCKER_BUILDTAGS apparmor selinux

ENTRYPOINT [“hack/dind”]

COPY . /go/src/github.com/docker/docker

Dockerfile 中只保留必要的步骤就可以实现编译了。

方法 3.

对 Docker 代码中的 Docker 进行彻底的改造,用国内的各种镜像替换其中不能在“正常”网络条件下访问的镜像,使得代码能够快速编译通过。

?

FROM docker.cn/docker/ubuntu:14.04.1

MAINTAINER Meaglith Ma [email protected]>(@genedna)

RUN echo "deb http://mirrors.aliyun.com/ubuntu trusty main universe" >/etc/apt/sources.list &&echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted" >>/etc/apt/sources.list &&echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted" >>/etc/apt/sources.list &&echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted" >>/etc/apt/sources.list &&echo "deb http://mirrors.aliyun.com/ubuntu/ trusty universe" >>/etc/apt/sources.list &&echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty universe" >>/etc/apt/sources.list &&echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates universe" >>/etc/apt/sources.list &&echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates universe" >>/etc/apt/sources.list &&echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted" >>/etc/apt/sources.list &&echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted" >>/etc/apt/sources.list &&echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security universe" >>/etc/apt/sources.list &&echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security universe" >>/etc/apt/sources.list

RUN apt-get update &&apt-get install -y \

aufs-tools \

automake \

btrfs-tools \

build-essential \

curl \

dpkg-sig \

git \

iptables \

libapparmor-dev \

libcap-dev \

libsqlite3-dev \

lxc=1.0* \

mercurial \

parallel \

reprepro \

ruby1.9.1 \

ruby1.9.1-dev \

s3cmd=1.1.0* \

unzip \

--no-install-recommends

RUN git clone --no-checkout https://coding.net/genedna/lvm2.git /usr/local/lvm2 &&cd /usr/local/lvm2 &&git checkout -q v2_02_103

RUN cd /usr/local/lvm2 &&./configure --enable-static_link &&make device-mapper &&make install_device-mapper

RUN curl -sSL http://docker-cn.qiniudn.com/go1.3.1.src.tar.gz | tar -v -C /usr/local -xz

ENV PATH/usr/local/go/bin:$PATH

ENV GOPATH /go:/go/src/github.com/docker/docker/vendor

ENV PATH /go/bin:$PATH

RUN cd /usr/local/go/src &&./make.bash --no-clean 2>&1

ENV DOCKER_CROSSPLATFORMS \

linux/386 linux/arm \

darwin/amd64 darwin/386 \

freebsd/amd64 freebsd/386 freebsd/arm

ENV GOARM 5

RUN cd /usr/local/go/src &&bash -xc 'for platform in $DOCKER_CROSSPLATFORMSdo GOOS=${platform%/*} GOARCH=${platform##*/} ./make.bash --no-clean 2>&1done'

RUN mkdir -p /go/src/github.com/gpmgo \

&&cd /go/src/github.com/gpmgo \

&&curl -o gopm.zip http://gopm.io/api/v1/download?pkgname=github.com/gpmgo/gopm\&revision=dev --location \

&&unzip gopm.zip \

&&mv $(ls | grep "gopm-") gopm \

&&rm gopm.zip \

&&cd gopm \

&&go install

RUN gopm bin -v code.google.com/p/go.tools/cmd/cover

RUN gem sources --remove https://rubygems.org/ \

&&gem sources -a https://ruby.taobao.org/ \

&&gem install --no-rdoc --no-ri fpm --version 1.0.2

RUN gopm bin -v -d /go/bin github.com/cpuguy83/go-md2man@tag:v1

RUN git clone -b buildroot-2014.02 https://github.com/jpetazzo/docker-busybox.git /docker-busybox

RUN /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY' >/.s3cfg

RUN git config --global user.email '[email protected]'

RUN groupadd -r docker

RUN useradd --create-home --gid docker unprivilegeduser

VOLUME /var/lib/docker

WORKDIR /go/src/github.com/docker/docker

ENV DOCKER_BUILDTAGSapparmor selinux

ENTRYPOINT ["hack/dind"]

COPY. /go/src/github.com/docker/docker

以上的命令把 Ubuntu 镜像中的源替换为国内速度较快的阿里源;把 lvm2 镜像到国内的 Git 托管服务 coding.net;从 七牛云存储 保存的 Golang 源码进行获取和编译;使用 gopm 下载编译所需要的 Library ;最后把其中 gem 源切换到淘宝。至此,可以在“特殊”的网络条件下快速编译 Docker 。