基于Gin搭建项目框架并集成Nacos实现服务注册
ycshang Lv1

一、Windows 如何搭建 Go 环境

1、下载 Go 语言开发包

可以到 Go 语言开发官网下载 Windows 系统下的Go语言开发包,如下图所示:
image

2、安装 Go 语言开发包

双击下载好的 Go 语言开发包即可启动安装程序,如下图所示,直接勾选“I accept …”然后点击“Next”即可
image
在 Windows 系统下 Go 语言开发包会默认安装到 C 盘的 Go 目录下,推荐在这个目录下安装,使用起来较为方便。当然,也可以选择其他的安装目录,确认无误后点击“Next”,如下图所示:
image
Go语言开发包的安装没有其他需要设置的选项,点击“Install”即可开始安装
安装完成后,在我们所设置的安装目录下将生成一些目录和文件,如下图所示:
image

3、设置环境变量

开发包安装完成后,还需要配置一下GOPATH 环境变量,之后才可以使用Go语言进行开发。GOPATH 是一个路径,用来存放开发中需要用到的代码包
image
在弹出的菜单里找到 GOPATH 对应的选项点击编辑之后就可以修改了,没有的话可以选择新建,并将变量名填写为 GOPATH,变量值设置为任意目录均可(尽量选择空目录),例如 D:\Go

4、下载开发工具并设置环境变量

Go 项目开发需要使用 GoLand 开发工具进行开发,需要从官网上下载对应的安装包,并配置对应的 GOROOT地址【选择自己安装的 Go 语言开发包的位置】
image
配置GOPATH
image

二、Golang 的项目框架是什么样子的?

目前构建 Go 项目普遍参考的项目结构: golang-standards 其中构建的项目结构是 Go 应用程序项目的基础布局,包含中文README文件阅读

  1. /internal
    1. 私有的应用程序代码库:这些是不希望被其他人导入的代码,在项目的目录树中的任意位置都可以有internal目录,而不仅仅是在顶级目录中
  2. /pkg
    1. 外部应用程序可以使用的库代码:比如项目中公用封装的工具类等
  3. /vendor
    1. 包含所有依赖的三方的源代码

三、什么是Gin,应该如何使用?

Gin 是一个用 Go (Golang) 编写的 HTTP web 框架,可以传入一些Http请求
下载并安装Gin:

  1. go get -u github.com/gin-gonic/gin
  2. import “github.com/gin-gonic/gin”
  3. import “net/http”[可选,会提供一些http响应的状态常量]

使用基本例子:
image

四、如何集成Nacos集成服务注册与配置文件的动态读取

Nacos-sdk-go是Nacos的Go语言客户端,它实现了服务发现和动态配置的功能
配置过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var (
Db *gorm.DB
LOG *zap.SugaredLogger
CONFIG conf.Config
WechatOfficial *officialaccount.OfficialAccount
)

// 加载配置,失败直接panic
func LoadConfig() {
//服务注册端口和地址
serverConfigs := []constant.ServerConfig{
{
IpAddr: "Nacos注册地址",
Port: 8848,
},
}
// 客户端配置
clientConfig := constant.ClientConfig{
//http请求超时时间,单位毫秒
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
NamespaceId: "注册的命名空间",
ListenInterval: 10000,
}
//创建动态配置客户端
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
// 创建服务发现客户端的另一种方式 (推荐)
client, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)

if err != nil {
panic(err)
}
//服务注册
success, err := client.RegisterInstance(vo.RegisterInstanceParam{
Ip: utils.LocalIP(),
Port: '项目端口号',
ServiceName: "项目注册的服务名",
Weight: 10,
Enable: true,
Healthy: true,
Ephemeral: true,
})
if !success {
return
}
//获取配置
content, err := configClient.GetConfig(
vo.ConfigParam{
DataId: "Nacos上配置的配置文件名",
Group: "DEFAULT_GROUP"})
viper := viper.New()
v := viper
//配置读取文件类型
v.SetConfigType("yaml")
//读取配置文件内容
v.ReadConfig(strings.NewReader(content))
//监听配置文件变动,重新解析配置
v.OnConfigChange(func(in fsnotify.Event) {
if err := v.Unmarshal(&CONFIG); err != nil {
panic(err)
}
})
//将配置映射成结构体
if err := v.Unmarshal(&CONFIG); err != nil {
panic(err)
}
}

 Comments