This blog post explains how to write a Google Go program which contains multiple packages. Let's suppose your software contains multiple packages: a and b, a consisting of two source files: a1.go and a2.go, and b contains only 1 source file importing package a. Here is an example:
$ cat a1.go package a type Rectangle struct { width int; Height int; } $ cat a2.go package a func (r *Rectangle) GetArea() int { return r.width * r.Height } func (r *Rectangle) Populate() { r.width = 2; r.Height = 3; } $ cat b.go package main import ( "a"; ) func main() { r := new(a.Rectangle); r.Populate(); // Fields (etc.) starting with a small letter are undefined. // (private): b.go:9: r.width undefined (type a.Rectangle has no field width) // print(r.width, "\n"); print(r.GetArea(), "\n"); print(r.Height, "\n"); print(r, "\n"); print("done\n") } $ cat abc.sh #! /bin/bash -- set -ex rm -f *.6 6.out 6g -o a.6 a1.go a2.go 6g -I. b.go 6l b.6 # links a.6 as well $ ./abc.sh ... $ ./6.out 6 3 0x7f18309691a8 done
Notes:
- Symbols and structure fields starting with lower case are not visible in other packages.
- You have to specify -I. for the compiler so it will find a.6 in the current directory.
- The linker figures out that it has to load prerequisite a.6 when linking b.6.
No comments:
Post a Comment