介绍

ini 包在Go中提供了INI文件的读写功能。
https://pkg.go.dev/gopkg.in/ini.v1@v1.66.2

Go gopkg.in/ini.v1 包将给定的 IP 地址写入到配置文件中
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>