1. 整体架构
创新互联建站专业为企业提供虎丘网站建设、虎丘做网站、虎丘网站设计、虎丘网站制作等企业网站建设、网页设计与制作、虎丘企业网站模板建站服务,10多年虎丘做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
kingshard采用Go开发,充分地利用了Go语言的并发特性。Go语言在并发方面,做了很好的封装,这大大简化了kingshard的开发工作。kingshard的整体工作流程入下所述:
读取配置文件并启动,在配置文件中设置的监听端口监听客户端请求。
收到客户端连接请求后,启动一个goroutine单独处理该请求。
首选进行登录验证,验证过程完全兼容MySQL认证协议,由于用户名和密码在配置文件中已经设置好,所以可以利用该信息验证连接请求是否合法。
当用户名和密码都正确时,转入下面的步骤,否则返回出错信息给客户端。
认证通过后,客户端发送SQL语句。
为了快速声明配置文件中的全局变量而写的封装包,大家笑纳,废话少说,直接上方法。
1.首先,下载包:
1
2
go get "github.com/luckykris/go-utilbox/Env"
go get "github.com/luckykris/go-utilbox/Conf/ReadConf"
2.书写配置文件(例):
vim test.cfg,写入如下配置内容:
1
2
3
4
5
6
7
8
[gms]
port = 2016
[db]
db = mysql
user = root
password = redhat
port = 3306
host = 127.0.0.1
3.写一个test.go来获取配置文件里的配置,并且将所有配置文件内的信息声明全局变量,注意,你需要在go代码里提前定义各项配置的数据类型(string,int目前只支持两类)以及默认值。如下列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
package main
import(
"github.com/luckykris/go-utilbox/Env"
"github.com/luckykris/go-utilbox/Conf/ReadConf"
"fmt"
)
func main(){
Init()
}
func Init(){
//定义gms配置区域
gms:=ReadConf.CONFIG{
AREA:"gms",//区域名
CONF:map[string]ReadConf.CONFIGROW{
"port":{TYPE:"int",EXIT:false,DEFAULT:1},//具体配置,
//此条为port配置默认值为1
//类型为int
//注意:如果标明类型是int默认值
//不要加双引号“”不然会被认为 //是字符串.
//false的意思是,当配置文件里读 //取不到这个配置的时候程序退出
},
}
//定义db配置区域
db:=ReadConf.CONFIG{
AREA:"db",//区域名
CONF:map[string]ReadConf.CONFIGROW{
"port":{TYPE:"int",EXIT:false,DEFAULT:3306},
"db":{TYPE:"string",EXIT:false,DEFAULT:"mongo"},
"user":{TYPE:"string",EXIT:false,DEFAULT:"root"},
"password":{TYPE:"string",EXIT:false,DEFAULT:"root"},
"host":{TYPE:"string",EXIT:false,DEFAULT:"localhost"},
},
}
//让程序读取配合文件,并且把需要提取的配置区域变量传入LodConf函数
//这个函数执行之后,所有实现定义的配置就都生成全局变量了。
ReadConf.LoadConf("test.cfg",gms,db)
//以下是对配置文件的全局变量的调用方式,用Env.ENV["配置区域/配置条目"].(类型)
//因为返回的值是interface{}类型的,所以需要自己转换下类型。
fmt.Printf("gms/port:%d\n",Env.ENV["gms/port"].(int))
fmt.Printf("db/port:%d\n",Env.ENV["db/port"].(int))
fmt.Printf("db/db:%s\n",Env.ENV["db/db"].(string))
fmt.Printf("db/user:%s\n",Env.ENV["db/user"].(string))
fmt.Printf("db/password:%s\n",Env.ENV["db/password"].(string))
fmt.Printf("db/host:%s\n",Env.ENV["db/host"].(string))
}
4.以下就是执行此GO程序后的输出结果啦:
1
2
3
4
5
6
7
[root@gbz.test.org GoMonitorServer]# go run test.go
gms/port:2016
db/port:3306
db/db:mysql
db/user:root
db/password:redhat
db/host:127.0.0.1
go run 或者 go build后在配置目录的相对路径上执行
假设当前目录如下:
├─config
│ │ main.go
│ │
│ └─file // 配置文件目录
│ config.ini
│
也就是说无论你是go run或者build后的执行程序,都应该在你执行目录下
有该配置文件路径如file/config.ini
否则就会发生以下错误, 无法读取配置文件
panic: Error:can not read file "./file/config.ini"
使用绝对路径读取配置文件
如果配置文件动态的话, 具体怎么传入 配置文件路径
go-bindata 把配置文件打包进去
5.1 使用远程配置中心去读取配置
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款