Create greet package

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
  नमस्ते किंशुक!

See also