mkdir src/greet
Then create a new Go source code file (greet.go) in src/greet:
# cat src/greet/greet.go
package greet
import "fmt"
func Greet() {
fmt.Println("नमस्ते किंशुक!")
}
You can consider this greet directory provides a greet package which can be used by other programs.
(3) Create another package hello which utilizes the greet package:
# mkdir src/hello
# cat src/hello/hello.go
package main
import "greet"
func main() {
greet.Greet()
}
You can see in hello.go, the main function calls Greet function offered by greet package.
(4) Now our $GOPATH layout is like this:
# tree
.
└── src
├── greet
│ └── greet.go
└── hello
└── hello.go
3 directories, 2 files
Let’s compile and install hello package:
go install hello
Check the $GOPATH layout again:
# tree
.
├── bin
│ └── hello
├── pkg
│ └── linux_amd64
│ └── greet.a
└── src
├── greet
│ └── greet.go
└── hello
└── hello.go
6 directories, 4 files
You can see the executable command hello is generated in bin folder. Because hello needs greet package’s help, a greet.a object is also produced in pkg directory, but in system related subdirectory: linux_amd64.
Run `hello` command:
# ./bin/hello
नमस्ते किंशुक!
Working as expected!
(5) You should add $GOPATH/bin to $PATH environment variable for facility:
PATH=$PATH:$GOPATH/bin
export PATH
Then you can run hello directly:
# hello
नमस्ते किंशुक!