go通过ini文件读写实现“小数据库”

代码实现如下:

var cfg *ini.File  func main() { 	var err error 	// 加载ini文件 	cfg, err = ini.Load("test.ini") 	if err != nil { 		fmt.Println("[ReadLogId] fail to parse 'test.ini':", err) 	} 	// 增 	fmt.Println(Add("w77")) 	// 删 	fmt.Println(Del("w55")) 	// 改,将“w66”改成“w661” 	fmt.Println(Update("w66", "w661")) 	// 查 	fmt.Println(Grep("w44")) }  // 判断是否存在 func Add(key string) (bool, error) { 	ret, num := Exist(key)  	// 错误 	if !ret && num == 0 { 		return false, err.New("[Add] failed") 	}  	// 存在 	if ret { 		return false, err.New("[Add] Exist") 	}  	// 不存在 	section, err := cfg.GetSection("test") 	if err != nil { 		fmt.Println("[Add] GetSection failed:", err) 	} 	section.NewKey(key, strconv.Itoa(num)) 	err = cfg.SaveTo("test.ini") 	if err != nil { 		fmt.Println("[Add] SaveTo failed:", err) 	} 	return true, nil }  func Del(key string) (bool, error) { 	ret, num := Exist(key)  	// 错误 	if !ret && num == 0 { 		return false, err.New("[Del] failed") 	}  	// 不存在 	if !ret { 		return false, err.New("[Add] Not Exist") 	}  	// 存在 	section, err := cfg.GetSection("test") 	if err != nil { 		fmt.Println("[Add] GetSection failed:", err) 	} 	section.DeleteKey(key) 	err = cfg.SaveTo("test.ini") 	if err != nil { 		fmt.Println("[Add] SaveTo failed:", err) 	} 	return true, nil }  func Update(key string, newKey string) (bool, error) { 	ret, num := Exist(key)  	// 错误 	if !ret && num == 0 { 		return false, err.New("[Del] failed") 	}  	// 不存在 	if !ret { 		return false, err.New("[Add] Not Exist") 	}  	// 存在 	section, err := cfg.GetSection("test") 	if err != nil { 		fmt.Println("[Add] GetSection failed:", err) 	} 	re, err := Del(key) 	if !re { 		fmt.Println("[Add] Del failed:", err) 	} 	section.NewKey(newKey, strconv.Itoa(num)) 	err = cfg.SaveTo("test.ini") 	if err != nil { 		fmt.Println("[Add] SaveTo failed:", err) 	} 	return true, nil }  func Grep(key string) (string, error) { 	// 读取“test”分段下的“key”对应的值 	ret := cfg.Section("test").Key(key) 	if len(ret.Value()) == 0 { 		return "", err.New("[Grep] Not Exist") 	} 	return ret.Value(), nil }  func Exist(key string) (bool, int) { 	// 读取“test”分段下的“key”对应的值 	ret := cfg.Section("test").Key(key) 	// 不存在“key”对应的值 	if len(ret.Value()) == 0 { 		num := 1 		for { 			ret := cfg.Section("test").HasValue(strconv.Itoa(num)) 			if ret { 				num++ 			} else { 				return false, num 			} 		} 	} 	// 存在“key”对应的值 	value, err1 := strconv.Atoi(ret.Value()) 	if err1 != nil { 		return false, 0 	} 	return true, value }

INI文件:

[test] # value = key w11 = 1 w22 = 2 w33 = 3 w44 = 4 w55 = 5 w66 = 6

1、执行Add操作,ini文件增加“w77”:

go通过ini文件读写实现“小数据库”

2、执行Del操作,ini文件删掉了“w55”:

go通过ini文件读写实现“小数据库”

3、执行Update操作,ini文件将“w66”改成“w661”:

go通过ini文件读写实现“小数据库”

 

 

版权声明:玥玥 发表于 2021-06-07 15:57:18。
转载请注明:go通过ini文件读写实现“小数据库” | 女黑客导航