Michael,

In Go, all arguments are passed by value. Therefore the value of file is 
discarded at the end of openfile. In main, f remains nil.

Peter

On Wednesday, June 21, 2017 at 4:58:58 PM UTC, Michael Dwyer wrote:
>
> 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