Golang面向对象编程
Table of Contents
介绍
Go 基于 Go 技术栈的微服务构建
传统的微服务通常基于http协议来进行模块间的调用,而在我们的微服务构建中,选用了Google推出的gRPC框架来进行调用。
下面这张简表比较了http rpc框架与gRPC的特性:
HTTP | RPC | gRPC |
---|---|---|
传输协议 | HTTP 1.1 | HTTP/2 |
传输协议 | JSON | Protobuf 3 |
接口定义 | 基于文档,轻约束 | 静态编译,强约束 |
- gRPC的接口需要使用Protobuf3定义,通过静态编译后才能成功调用。
- 在性能方面,gRPC相比传统的http rpc协议有非常大的改善(根据这个评测,gRPC要快10倍)。
Go语言 vs. 其它语言
- Go语言没有类,没有对象,没有异常和模板。
- 它支持垃圾回收和内建的并发。
- 有关面向对象方面的最显著的遗漏是Go语言中没有类型层次结构。
- 这与大多数面向对象语言如C++,Java,C#,Scala甚至动态语言(如Python和Ruby)形成对比。
Go面向对象语言特性
- Go语言没有类,但它支持类型。
- 特别是, 它支持structs。 Structs是用户定义的类型。
- nStruct类型(含方法)提供类似于其它语言中类的服务。
- Structs只保存状态,不保存行为。
go交叉编译
Mac 下编译 Linux 和 Windows 64位可执行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Linux 下编译 Mac 和 Windows 64位可执行程序
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Windows 下编译 Mac 和 Linux 64位可执行程序
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go
注意:
- 需要注意的是我发现golang在支持cgo的时候是没法交叉编译的
- GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
- GOARCH:目标平台的体系架构(386、amd64、arm)
- 交叉编译不支持 CGO 所以要禁用它
- 上面的命令编译 64 位可执行程序,你当然应该也会使用 386 编译 32 位可执行程序
- windows下面 powershell不行,要cmd
发布
nohup ./birthday >> log.out & GOPATH C:\Go <<--- GOROOT 指向的位置 --src <<--- Go 语言自带的源代码 --pkg <<--- 编译的中间文件放在此文件夹 --bin <<--- 编译的目标文件放在此文件夹 D:\MyWorks <<--- GOPATH 指向的位置 --src <<--- 项目源代码放置在此文件夹。!!!警告:一个常犯的错误是把 GOPATH 指向此处!!! --HelloWorld <<--- 我们项目源代码所在的文件夹。!!!警告:一个常犯的错误是把 GOPATH 指向此处!!! --vendor <<--- 第三方开源代码文件夹 --github.com --... --pkg <<--- 编译的中间文件放在此文件夹,Go编译器自动生成此文件夹 --bin <<--- 编译的目标文件放在此文件夹,Go编译器自动生成此文件夹
我的go环境配置
~/.bash_profile #go export GOROOT=/usr/local/go export GOPATH=/Users/yk/go export PATH=$GOPATH/bin:$GOROOT/bin:$PATH export GO111MODULE=on export GOPROXY=https://goproxy.io