Go 语言应用部署 不需要依赖 ,非常简便,这是一个不小的优势。
Go 语言官方镜像非常大,超过 500MB 。镜像之所以如此庞大是因为它包含了构建 Go 程序所需的全部 工具链 。然而运行编译好的(静态)二进制程序,并不需要这些工具。
本文介绍如何制作一个紧凑的 Docker 镜像用于部署 Go 应用,大小控制在 10MB 以内。
本文实验所有操作均在 macOS 下进行,在其他平台进行也是类似的。
Go 语言应用部署 不需要依赖 ,非常简便,这是一个不小的优势。
Go 语言官方镜像非常大,超过 500MB 。镜像之所以如此庞大是因为它包含了构建 Go 程序所需的全部 工具链 。然而运行编译好的(静态)二进制程序,并不需要这些工具。
本文介绍如何制作一个紧凑的 Docker 镜像用于部署 Go 应用,大小控制在 10MB 以内。
本文实验所有操作均在 macOS 下进行,在其他平台进行也是类似的。
JSON 是目前最为流行的序列化手段,Go 语言内置 encoding/json 包用于 JSON 序列化 / 反序列化 操作。本文以详细代码示例,演示 encoding/json 包的使用方式。
对于已有类型,序列化只需一行代码:
|
|
发起HTTP请求 一文介绍了如何使用 net/http 包发起 HTTP 请求。net/http 包同样提供了用于开发实现 HTTP 服务的基础类库,本文将进一步介绍如何使用这些类库。
先来看看一个简单的例子——计数器服务接口。这个接口非常简单,每次均返回接口调用总次数,以 1 开始:
|
|
在日常开发中,发起 HTTP 请求是一个非常频繁的任务。
Go 语言提供了 net/http 包,协助用户实施与 HTTP 协议相关的开发任务。该包既提供了 HTTP 服务器 实现,又提供了 客户端 实现。
本文介绍如何使用 net/http 包发起 HTTP 请求,覆盖大部分应用场景:
发起 Get 请求是最常见的场景之一,使用 http.Get 函数即可。代码示例如下:
|
|
相对而言,Go 语言还是一门非常年轻的语言。虽然发展迅猛,局限性也有——类库不是特别丰富。有些开源项目,例如 x264 ,只有 C 语言版本, Go 重写一遍也不太现实。
好在 Go 提供了调用 C 函数的机制—— cgo ,本文用一个实际例子演示如何使用 cgo 调用 C 函数。
为了演示需要,虚设一个名为 callee 的函数库。函数库只提供一个名为 sayHello 的函数,接口如头文件 callee.h 所示:
|
|
sayHello 函数只是简单输出 Hello, world!
,实现见源文件 callee.c :
|
|
接下来,将上述代码编译成动态库:
|
|