No Description

marion 923b575b7c 更新 'README.md' 2 years ago
conf 343b7e67b1 init 2 years ago
controller 343b7e67b1 init 2 years ago
dao 343b7e67b1 init 2 years ago
enums 343b7e67b1 init 2 years ago
model 343b7e67b1 init 2 years ago
res 343b7e67b1 init 2 years ago
service 343b7e67b1 init 2 years ago
static 343b7e67b1 init 2 years ago
.gitignore 343b7e67b1 init 2 years ago
Dockerfile 343b7e67b1 init 2 years ago
LICENSE 343b7e67b1 init 2 years ago
README.md 923b575b7c 更新 'README.md' 2 years ago
build.bat 343b7e67b1 init 2 years ago
build.sh 343b7e67b1 init 2 years ago
config.toml 343b7e67b1 init 2 years ago
data_init.sql 343b7e67b1 init 2 years ago
main.go 343b7e67b1 init 2 years ago
postman.json 343b7e67b1 init 2 years ago

README.md

Golang架构原型示例项目

Golang开发环境安装和环境变量配置

与Java、Python、NodeJS、PHP等均不同,只是开发环境需要安装用于代码编译,生产环境直接运行项目编译好的可执行文件即可,无需安装任何类似JRE、Python、v8、PHP的虚拟机或运行时环境!

执行以下操作前请理解并确认:

  1. GOPATH 环境变量已配置,例如配置到用户目录下的go目录
  2. GOPATH 目录是用于存放golang项目和其相关依赖的目录,所有golang项目代码都应该位于GOPATH目录中的src子目录下的包括代码托管地址、组织名、项目名在内的多级子目录下

下载

此处 下载安装

配置相关环境变量

Windows

在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:

GOROOT=C:\go
GOPATH=%USERPROFILE%\go

PATH环境变量末尾添加 %GOROOT%\bin

MAC OS X

cd

sudo vi .bash_profile

修改以下项目

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH="${GOROOT}/bin:${PATH}"

source .bash_profile

更新配置

获取项目

获取

go get -v -insecure -d git.wanpinghui.com/WPH/go_prototype

参数:-v 显示详情,-insecure 非https版本仓库路径,-d 仅获取,不编译安装到GOPATH

可能会卡住或者报错,不用管,只要项目本身源代码文件获取下来了即可,文件保存位置即在上述GOPATH目录中的子目录里

完成上述操作之后,以后日常开发都可以正常使用git命令来获取和提交此项目代码

建立软连接

建立软连接的目的仅仅是为了方便找而已!

使用GoLand等开发工具时,仍然打开GOPATH里面的项目目录,而不是打开软连接位置的!

Windows

Power Shell 或 Windows CMD (需要用管理员身份运行):

注意,Windows Power Shell打开后首先输入cmd进入Windows CMD,下同不再累述

mklink /D %USERPROFILE%\Documents\project\wph\go_prototype %GOPATH%\src\git.wanpinghui.com\WPH\go_prototype

MAC OS X

sudo ln -s $GOPATH/src/git.wanpinghui.com/WPH/go_prototype/ ~/Documents/project/wph/go_prototype

相关依赖

Golang官方包

Golang运行时 >= 1.10.3

其他常用golang官方包,因为golang.org被墙,所以用以下步骤获取:

Windows

git clone https://github.com/golang/net.git %GOPATH%\src\golang.org\x\net
git clone https://github.com/golang/text.git %GOPATH%\src\golang.org\x\text
git clone https://github.com/golang/tools.git %GOPATH%\src\golang.org\x\tools
git clone https://github.com/golang/sys.git %GOPATH%\src\golang.org\x\sys
git clone https://github.com/golang/crypto.git %GOPATH%\src\golang.org\x\crypto
git clone https://github.com/grpc/grpc-go.git %GOPATH%\src\google.golang.org\grpc
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
git clone https://github.com/google/go-genproto.git %GOPATH%\src\google.golang.org\genproto
cd %GOPATH%\src
go install golang.org\x\text
go install google.golang.org\grpc

MAC OS X

git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net \
&& git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text \
&& git clone https://github.com/golang/tools.git $GOPATH/src/golang.org/x/tools \
&& git clone https://github.com/golang/sys.git $GOPATH/src/golang.org/x/sys \
&& git clone https://github.com/golang/crypto.git $GOPATH/src/golang.org/x/crypto \
&& git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc \
&& go get -u github.com/golang/protobuf/{proto,protoc-gen-go} \
&& git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto \
&& cd $GOPATH/src/ \
&& go install golang.org/x/text \
&& go install google.golang.org/grpc

第三方包

如果有未下载的依赖包,进入项目目录,执行以下命令即可

go get -v

本项目主要依赖包如下

HTTP服务提供框架gin

Json序列化包json-iterator

如果希望gin使用json-iterator替换默认的json包,编译时需加上如下参数

go build -tags=jsoniter .

JWT用户校验jwt-go

RPC访问框架rpcx

Nats客户端go-nats

Mysql数据库驱动

数据库ORM框架xorm

配置文件读取viper

结构化日志logrus

结构化日志logrus输出到graylog

Redis客户端Redigo

Redis集群客户端redisc

Redis、Kafka、Nats等的本地开发环境安装方法参考 此处

内部依赖

go_common公共库

go_codegen代码生成工具

默认的golang依赖库是全局的,如果希望各个项目各自管理自己的依赖,可以使用 godep

项目结构

名称 说明
bin 程序编译结果输出目录
conf 项目配置文件
controller api接口层,仅承担以下职责:配置请求处理路由、请求的权限和数据校验、将请求转换为程序可理解的对象、将处理结果转换为响应对象返回
dao 数据访问层,包括数据库、缓存、队列、日志的公共访问对象
enums 枚举常量定义
model 数据库实体对象类,与数据库表结构相对应,由代码生产工具自动生成
proxy 调用外部api接口的代理类和相关请求响应实体,根据不同的合作伙伴区分子目录
res api接口响应对象类,当model中对象不够用时,另行手工创建
rq api接口请求对象类,当model中对象不够用时,另行手工创建。且rq对象中的字段加上类似form:"opDate" time_format:"2006-01-02" binding:"required"的tag即可指定字段名和格式,以及自动进行表单校验
service 业务逻辑层
static 静态文件目录
test 单元测试目录
main.go 程序入口
postman.json 本项目所有示例接口的postman定义文件,可直接导入postman使用
data_init.sql 本项目数据表结构和样例数据

运行测试

用GoLand或者IDEA之类开发工具打开项目,在内嵌终端Terminal里面跑

go run main.go

或者打开main.go文件之后,直接点绿色小三角运行

默认会在8081端口启动一个HTTP请求监听服务,访问 http://localhost:8081/test/imgood 可查看效果

交叉编译

交叉编译,指可以在任何一个操作系统环境,一次生成适用于包括Linux、Windows、Mac OS X在内的不同操作系统,和X86、X64、ARM等不同体系结构的多个可执行文件

交叉编译命令如下,开发环境不加参数,--test 测试环境,--prod 生产环境

Windows

./build.bat --prod

MAC OS X 或 Linux

./build.sh --prod

Docker打包发布

打包

docker build -t wanpinghui/go_prototype .

运行

docker run -d -p 8081:8081 --name="go_prototype" --restart=always wanpinghui/go_prototype

Kubernetes发布

详细请参考服务端发布流水线文档,及Jenkins中的相关发布脚本