Peter,

Thank you for your input regarding my question.

In an effort to clear up any confusion or ambiguity regarding the problem I 
am running into,
I will post the code for what is working and the code that is not working.

The following block of code works, a valid file is passed to the 
executable, the file is read
and the results of how many lines were read are emitted to stdout:

package main
 
import (
"flag"
"bufio"
"fmt"
"log"
"os"
)

func cli() string {
flag.Parse()
return flag.Arg(0)
}

func openFile(s string, file *os.File) {
file, err := os.Open(s)
if err != nil {
log.Fatal(err)
}
    defer file.Close()
}

func main() {
fname := cli()
f, err := os.Open(fname)
if err != nil {
log.Fatal(err)
}
defer f.Close()
ireader := bufio.NewReader(f)
scanner := bufio.NewScanner(ireader)
lcounter := 0
for scanner.Scan() {
lcounter++
}
fmt.Printf("# lines read : %d\n", lcounter)
}

The following is an attempt to refactor the code by moving one section of 
code,
specifically the code that opens a file handle returning a file descriptor 
to variable named "f".
The file file descriptor "f" will then be used to create a buffered Reader 
& Scanner. It is this code
that is not working, for which I seek assistance to understand why it is 
not working, and for a solution
that adheres to what I was trying to do in the function named openFile(), 
which is pass two parameters
to openFile(), the first, a string containing the path to be opened, the 
second parameter will be a pointer
to os.File.

What I am attempting to do here is to pass the path to be opened, while at 
the same time pass a pointer
that will be used to return the file descriptor. The code that is not 
working follows:

package main
 
import (
"flag"
"bufio"
"fmt"
"log"
"os"
)

func cli() string {
flag.Parse()
return flag.Arg(0)
}

func openFile(s string, file *os.File) {
file, err := os.Open(s)
if err != nil {
log.Fatal(err)
}
    defer file.Close()
}

func main() {
fname := cli()
var f *os.File
openFile(fname, f)
ireader := bufio.NewReader(f)
scanner := bufio.NewScanner(ireader)
lcounter := 0
for scanner.Scan() {
lcounter++
}
fmt.Printf("# lines read : %d\n", lcounter)
}

I hope that I have been able to remove the ambiguity from the code,
and the intent of what it is I am trying to accomplish is clear.

Again, thanks in advance to anyone that can help me resolve this issue.


THANX(MKD).

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to