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

资料

Date: 2019-09-25 Wed 10:02