I have a command line programme that can output to either stdout or a named file. Output to stdout, as commented out in the small example below, works fine, but not to a named file.
Attempting to write to a named file panics on go 1.17 on Linux with: panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x46123d] I'm confused since both os.Stdout and os.Create are *os.File types, which implement the Write(b []byte) (n int, err error) method which fulfils the io.Writer interface. I pass around io.Writer types in my programme to facilitate testing. I've chosen io.WriteString because it will use StringWriter on the writer if the writer supports this method, which may perform better than a simple Write. Clearly I am missing something fundamental, or I have a stupid error in my programme. Help very much appreciated. Thanks Rory package main import ( "io" "log" "os" ) func main() { // o := "-" // use stdin o := "/tmp/output.txt" // or a file var output io.Writer if o == "-" { output = os.Stdout } else { output, err := os.Create(o) if err != nil { log.Fatalf("Could not create file %s, %s", output, err) } defer output.Close() } _, err := io.WriteString(output, "hello") if err != nil { log.Fatal(err) } } -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/YlUv/%2BH%2BHYguq4Nn%40campbell-lange.net.