A package is the smallest unit of private encapsulation in Go.
- All identifiers defined within a package are visible throughout that package.
- When importing a package you can access only its exported identifiers, which are public.
- An identifier is exported if it begins with a capital letter, in other words, an identifier with a lower case letter if private.
However, sometimes, we have to use some private function test a specific function more easily. There are several methods you can do that.
Method 1: If you have a package-private function
func foo() int {
return 42
}
You can create a public function in the same package, which will call the package-private function and return its result
func Bar() int {
return foo()
}
Then, you can import that public function to indirectly use that private function.
Method 2: you can use go:linkname https://golang.org/cmd/compile/
For example, you have a package-private function in package A
func foo() int {
return 42
}
if you want to use a private function of package A in package B,
import _ "unsafe"
//go:linkname localname [importpath.name]
func foo() int
Then, you can directly use that private function for your purpose.
Question mark: how to access private parameters in other packages?