我有一個使用 cobra 用 Go 編寫的 CLI,其中一個命令是從文本文件的用戶名列表中刪除特定用戶名。例如,我在文件中有一個用戶名列表,user1user2user3user4user5這是我的 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。但是它在文件末尾確實有一個空行“”。如果我然后運行要求它刪除另一個用戶的命令,它也會刪除該用戶,但生成的文件現(xiàn)在將在末尾有兩個空行,等等。我可以通過將第 22 行更改為來防止空行,if !(line == userName || line == "") { 我不明白這是怎么回事。似乎不太明智?空白行來自哪里?我在 Ubuntu 20.04、Go 版本 go1.16.5 linux/amd64 和 github.com/spf13/cobra v1.5.0提前感謝您的任何見解。
獲取從 Go 中的文本文件中刪除行的空行
幕布斯7119047
2023-02-14 15:19:40