You should almost never do GOPATH=$PWD, as it is unlikely to do what you want. Source code for a package is looked for in <GOPATH-element>/src/ not <GOPATH-element>/.
I'll give a quick example of how you could setup your environment. I'm going to assume you want 1 package named util and 1 command, named hello that depends on util. (I am not using a package named "file" to avoid confusion. This should give you the idea)
In .bashrc:
export GOPATH=~/go/external/:~/go/mycode/
Note: The reason for having 2 entries is so you can keep your code separate from code downloaded by go get (go get will automatically use the first entry in GOPATH)
In ~/go/mycode/src/util, create a file called "util.go", containing your code for the "util" package
In ~/go/mycode/src/hello, create a file hello.go and put your code for your "hello" command in there. Make sure that you give it package main as you want it to be executable not a package. You are free to import "util" in this file.
To {build|test|install} your util package, simply type "go {build|test|install} util". To {build|test|install} your hello command simply type "go {build|test|install} hello".
Note that putting your source directly under the root of <GOPATH-elem>/src/ is probably not best practice. You should probably put it under (in increasing order of preferance) <GOPATH-elem>/src/<my-project-name> or <GOPATH-elem>/src/<my-company-name>/ or <GOPATH-elem>/src/<my-vcs-path>.