Golang : Skip or discard items of non-interest when iterating example
Problem:
You want to skip or discard items of non-interest when iterating. For example, skipping the commented lines with #
sign in the /etc/passwd
file.
##
# User Database
#
# Note that this file is consulted directly only when the system is running
# in single-user mode. At other times this information is provided by
# Open Directory.
#
# See the opendirectoryd(8) man page for additional information about
# Open Directory.
##
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
Solution:
Test each line(item) with strings.Index()
function to see if the line starts with #
sign. If the #
sign is detected, skip or discard the item. This example reads the iterable items from a file; however, you can easily modify it to accommodates array or slice.
package main
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
func main() {
file, err := os.Open("/etc/passwd")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
// skip all line starting with #
if equal := strings.Index(line, "#"); equal < 0 {
fmt.Print(line)
}
// alternatively, only print line starting with #
//if equal := strings.Index(line, "#"); equal >= 0 {
// fmt.Print(line)
// }
if err == io.EOF {
break
}
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
}
Output:
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
References:
https://www.socketloop.com/tutorials/golang-read-data-from-config-file-and-assign-to-variables
See also : Golang : Read data from config file and assign to variables
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+12.2k Golang : Get constant name from value
+7.3k Golang: Prevent over writing file with md5 hash
+6.4k Golang : Individual and total number of words counter example
+25.8k Golang : Record voice(audio) from microphone to .WAV file
+5.9k Golang : How to call function inside template with template.FuncMap
+9k Golang : Get login name from environment and prompt for password
+6.2k Golang : File system scanning
+29.8k Golang : Example for ECDSA(Elliptic Curve Digital Signature Algorithm) package functions
+12.2k Golang : Verify token from Google Authenticator App
+25.6k Golang : Find files by name - cross platform example
+23.6k Golang : Storing cookies in http.CookieJar example
+9k Golang : Text file editor (accept input from screen and save to file)