ini 包在Go中提供了INI文件的读写功能。
https://pkg.go.dev/gopkg.in/ini.v1@v1.66.2
test.go
package main
import (
"log"
"os"
"gopkg.in/ini.v1"
)
func WriteIpToFile(ip string) {
// 检查目录是否存在,如果不存在则创建
_, err := os.Stat("./conf")
if err != nil {
if os.IsNotExist(err) {
err = os.Mkdir("./conf", os.ModePerm)
}
log.Printf("Get current err=%+v!!", err)
}
// 加载配置文件,如果文件不存在则创建空的配置对象
cfg, err := ini.Load("./conf/config.ini")
if err != nil {
cfg = ini.Empty()
log.Printf("Fail to read file: %+v", err)
}
// 创建或获取名为 "ip" 的配置节
sec, err := cfg.NewSection("ip")
if err != nil {
log.Printf("NewSection err=%+v!", err)
}
// 在配置节中创建名为 "Intranet" 的配置项,并设置为给定的 IP 地址
_, err = sec.NewKey("Intranet", ip)
if err != nil {
log.Printf("NewKey err=%+v!!", err)
}
// 将修改后的配置文件保存到磁盘上
err = cfg.SaveToIndent("./conf/config.ini", "\t")
if err != nil {
log.Printf("SaveToIndent err=%+v!!", err)
}
}
func main() {
ip := "127.0.0.1"
WriteIpToFile(ip)
}
Administrator@Q3 MINGW64 /e/TEXT/test
$ tree
|-- conf
|-- |-- config.ini
|-- go.mod
|-- go.sum
|-- test.go
1 directory, 4 files
Administrator@Q3 MINGW64 /e/TEXT/test
$
Go 读取 ini 文件
package main
import (
"log"
"os"
"gopkg.in/ini.v1"
)
func ReadFromfile() {
_, err := os.Stat("./conf")
if err != nil {
if os.IsNotExist(err) {
err = os.Mkdir("./conf", os.ModePerm)
}
log.Printf("Get current err=%+v!!", err)
}
cfg, err := ini.Load("./conf/config.ini")
if err != nil {
cfg = ini.Empty()
log.Printf("Fail to read file: %+v", err)
}
// 打印每个部分的键值对(sections)用于获取配置文件中的所有部分
for _, section := range cfg.Sections() {
log.Printf("[%s]\n", section.Name())
keys := section.Keys()
for _, key := range keys {
log.Printf("%s = %s\n", key.Name(), key.Value())
}
}
}
func main() {
ReadFromfile()
}
PS E:\TEXT\test> go run .\test.go
2023/05/30 14:41:51 [DEFAULT]
2023/05/30 14:41:51 [ip]
2023/05/30 14:41:51 Intranet = 127.0.0.1
PS E:\TEXT\test>
根据 ini 配置文件字符串拼装
思路:config.ini 配置 server URL 用配置的,否则走默认的。
package main
import (
"log"
"os"
"strings"
"gopkg.in/ini.v1"
)
var cfg *ini.File
var control_url string = "http://8.140.130.195:8888"
var homepage_url string = ":8080/v1/jit/digitalGuard/reg?clientIp="
func ReadFromfile() {
_, err := os.Stat("./conf")
if err != nil {
if os.IsNotExist(err) {
err = os.Mkdir("./conf", os.ModePerm)
}
log.Printf("Get current err=%+v!!", err)
}
cfg, err = ini.Load("./conf/config.ini")
if err != nil {
cfg = ini.Empty()
log.Printf("Fail to read file: %+v", err)
}
// 打印每个部分的键值对(sections)用于获取配置文件中的所有部分
for _, section := range cfg.Sections() {
log.Printf("[%s]\n", section.Name())
keys := section.Keys()
for _, key := range keys {
log.Printf("%s = %s\n", key.Name(), key.Value())
}
}
}
func main() {
ReadFromfile()
key := cfg.Section("server").Key("url").String()
arr := strings.Split(key, "//")
log.Printf("the config.ini the server url is %s key", key)
if len(arr) != 2 {
control_url = "http://8.140.130.195" + ":8888"
homepage_url = "http://" + "8.140.130.195" + homepage_url
} else {
control_url = key + ":8888"
homepage_url = "http://" + arr[1] + homepage_url
}
// 使用 control_url 和 homepage_url 进行后续操作
log.Printf("Control URL: %s", control_url)
log.Printf("Homepage URL: %s", homepage_url)
}
E:\TEXT\test\conf\config.ini
[ip]
Intranet = 127.0.0.1
[server]
url = https://matesec.cn:8888
PS E:\TEXT\test> go run .\test.go
2023/05/30 14:58:05 [DEFAULT]
2023/05/30 14:58:05 [ip]
2023/05/30 14:58:05 Intranet = 127.0.0.1
2023/05/30 14:58:05 [server]
2023/05/30 14:58:05 url = https://matesec.cn:8888
2023/05/30 14:58:05 the config.ini the server url is https://matesec.cn:8888 key
2023/05/30 14:58:05 Control URL: https://matesec.cn:8888:8888
2023/05/30 14:58:05 Homepage URL: http://matesec.cn:8888:8080/v1/jit/digitalGuard/reg?clientIp=
PS E:\TEXT\test>
E:\TEXT\test\conf\config.ini
[ip]
Intranet = 127.0.0.1
PS E:\TEXT\test> go run .\test.go
2023/05/30 15:05:35 [DEFAULT]
2023/05/30 15:05:35 [ip]
2023/05/30 15:05:35 Intranet = 127.0.0.1
2023/05/30 15:05:35 the config.ini the server url is key
2023/05/30 15:05:35 Control URL: http://8.140.130.195:8888
2023/05/30 15:05:35 Homepage URL: http://8.140.130.195:8080/v1/jit/digitalGuard/reg?clientIp=
PS E:\TEXT\test>