I believe this thread was prior to the release of Go 1, because the call to os.Open() as shown doesn't even compile in current versions of Go: it now only accepts a single string argument. The correct answer for today is to use os.Create(). Similarly, reader.Read no longer accepts a pointer.
However, the answer to the 15-year old question is still available in the manpage of open:
The open() system call opens the file specified by pathname. If the specified file does not exist, it may optionally (if O_CREAT is specified in
flags) be created by open().
...
The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR. These request opening the file read-only, write-
only, or read/write, respectively.
That is, if you were making a low-level open() call, you could set the mode to be O_WRONLY|O_CREAT or O_RDWR|O_CREAT depending on what you want to do with the file descriptor.