Go Basics
June 17, 2019
command line args
– main.go
package main
import (
"os"
"fmt"
)
func main() {
argsWithProgramName := os.Args
argsWithoutProgramName := os.Args[1:]
fmt.Println(argsWithProg)
fmt.Println(argsWithoutProg)
}
-- OUTPUT --
PS C:\Users\INTEL\Desktop\golang> go run .\main.go "a b c" "sdf"
[C:\Users\INTEL\AppData\Local\Temp\go-build928898898\b001\exe\main.exe a b c sdf]
[a b c sdf]
Reading Files
package main
import (
"os"
"fmt"
"bufio"
"log"
)
func main() {
f, err := os.Open("logfile.log")
if err != nil {
log.Fatal("Unable to open log file")
}
defer f.Close()
r := bufio.NewReader(f)
for {
str, err := r.ReadString('\n')
if err != nil {
break
}
fmt.Println(str)
}
}
Executing commands in go
// execute and return output
package main
import (
"os/exec"
"log"
"fmt"
)
func main() {
output, err := exec.Command("date").Output()
if err != nil {
log.Fatal("Failed to execute command" + err)
}
fmt.Println(output)
}
// start and wait for the command to exit
func main() {
cmd := exec.Cmd("sleep", "5")
err := cmd.Start()
if err != nil {
log.Fatal(err)
}
fmt.Println("Waiting for the command")
err := cmd.Wait()
fmt.Printf("Command has been executed with error: %v", err)
}
// Stdoutpipe
func main() {
// tail from first line; and keep follow the file for any chagnes
// tail -Fn+1 <filename>
cmd := exec.Cmd("tail", "-Fn+1", "logfile.log")
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Fatal(err)
}
// start the command
err = cmd.Start()
if err != nil {
log.Fatal(err)
}
// io.Reader object.
r := bufio.NewReader(stdout)
for {
line, error := r.ReadString("\n")
if error != nil {
log.Fatal(error)
}
fmt.Println(line)
}
// Wait for the command
err = cmd.Wait()
log.Printf("Command finished with error: %v", err)
}