我有一个使用 cobra 用 Go 编写的 CLI,其中一个命令是从文本文件的用户名列表中删除特定用户名。例如,我在文件中有一个用户名列表,
user1
user2
user3
user4
user5
这是我的 cobra 命令中的 Go 代码,
Run: func(cmd *cobra.Command, args []string) {
userBlacklist, _ := cmd.Flags().GetString("blacklist-file-path")
userName, _ := cmd.Flags().GetString("user-name")
if info, err := os.Stat(userBlacklist); err == nil && !info.IsDir() {
data, err := ioutil.ReadFile(userBlacklist)
if err != nil {
logger.Fatal("Failed to read in blacklist: %s", err)
}
lines := strings.Split(string(data), "\n")
file, err := os.Create(userBlacklist)
if err != nil {
logger.Fatal("Could not overwrite blacklist file %s\n", err)
}
defer file.Close()
for _, line := range lines {
if line != userName{
if _, err := file.WriteString(line + "\n"); err != nil {
logger.Fatal("Failed to write user to open blacklist file %s\n", err)
}
}
}
} else {
if err != nil {
logger.Fatal("Error stating blacklist %s\n", err )
} else {
logger.Fatal("--blacklist-file-path is a directory, not a file\n")
}
}
},
当我运行它时,例如,将 userName 设置为“user3”,生成的输出文件中确实没有 user3。但是它在文件末尾确实有一个空行“”。如果我然后运行要求它删除另一个用户的命令,它也会删除该用户,但生成的文件现在将在末尾有两个空行,等等。
我可以通过将第 22 行更改为来防止空行,
if !(line == userName || line == "") {
我不明白这是怎么回事。似乎不太明智?空白行来自哪里?
我在 Ubuntu 20.04、Go 版本 go1.16.5 linux/amd64 和 github.com/spf13/cobra v1.5.0
提前感谢您的任何见解。
当年话下
蓝山帝景
相关分类