📖 Scenario: You are creating a simple Go program to understand how variables and functions are accessible within a package.
🎯 Goal: Build a Go program that shows how package-level variables and functions can be accessed inside the same package.
📋 What You'll Learn
Create a package-level variable
Create a package-level function
Access the variable and function inside the main function
Print the results to the console
💡 Why This Matters
🌍 Real World
Understanding package scope is essential for organizing Go programs into reusable and maintainable parts.
💼 Career
Go developers frequently use package-level variables and functions to share data and logic within packages, making this knowledge critical for writing clean and effective Go code.
Progress0 / 4 steps
1
Create a package-level variable
Create a package-level variable called message of type string and set it to "Hello from package scope!".
Go
Hint
Package-level variables are declared outside of any function but inside the package.
2
Create a package-level function
Create a package-level function called getMessage that returns a string and returns the message variable.
Go
Hint
Functions declared outside main() are package-level and can be used anywhere in the package.
3
Access the variable and function inside main
Inside the main function, create a variable called msgFromVar and assign it the value of the package-level variable message. Then create a variable called msgFromFunc and assign it the result of calling the getMessage() function.
Go
Hint
You can use package-level variables and functions directly inside main().
4
Print the results
Add import "fmt" at the top. Inside the main function, print msgFromVar and msgFromFunc each on a new line using fmt.Println.
Go
Hint
Use fmt.Println to print each message on its own line.
Practice
(1/5)
1. In Go, what does it mean if a variable name starts with a lowercase letter inside a package?
easy
A. It is private to the package and cannot be accessed from other packages.
B. It is accessible from any package.
C. It is a constant value.
D. It is a global variable accessible everywhere.
Solution
Step 1: Understand Go naming conventions
In Go, identifiers starting with a lowercase letter are unexported, meaning they are private to the package.
Step 2: Apply package scope rule
Such variables cannot be accessed from outside their package, ensuring encapsulation.
Final Answer:
It is private to the package and cannot be accessed from other packages. -> Option A
Quick Check:
Lowercase start = private [OK]
Hint: Lowercase start means private inside package [OK]
Common Mistakes:
Thinking lowercase variables are accessible outside package
Confusing lowercase with constants
Assuming lowercase means global
2. Which of the following is the correct way to declare an exported function in a Go package?
easy
A. func MyFunction() {}
B. func myFunction() {}
C. func _MyFunction() {}
D. func my_function() {}
Solution
Step 1: Recall Go export rules
Functions starting with an uppercase letter are exported and accessible outside the package.
Step 2: Check each option
func MyFunction() {} starts with uppercase 'M', so it is exported. Others start with lowercase or invalid characters.
Final Answer:
func MyFunction() {} -> Option A
Quick Check:
Uppercase start = exported function [OK]
Hint: Function name uppercase means exported [OK]
Common Mistakes:
Using lowercase to export functions
Using underscores which are allowed but don't affect export
Confusing export with naming style
3. Given the following Go code in package 'mathops':
package mathops
var result = 10
func Result() int {
return result
}
What will happen if another package tries to access mathops.result?
medium
A. It will access the value 10 successfully.
B. It will cause a compile-time error due to unexported variable.
C. It will cause a runtime panic.
D. It will access a zero value.
Solution
Step 1: Identify variable scope
The variable 'result' starts with lowercase, so it is unexported and private to the package.
Step 2: Understand access from other packages
Accessing 'mathops.result' from outside the package is not allowed and causes a compile-time error.
Final Answer:
It will cause a compile-time error due to unexported variable. -> Option B
Hint: Lowercase vars cause compile error if accessed outside [OK]
Common Mistakes:
Assuming private variables can be accessed
Thinking runtime panic occurs instead of compile error
Confusing function export with variable export
4. Consider this Go code snippet inside a package:
package example
func calculate() int {
return 42
}
func Calculate() int {
return calculate()
}
What is the main reason for defining both calculate and Calculate functions?
medium
A. To confuse the compiler with similar names.
B. To create two independent exported functions.
C. To cause a compile-time error due to duplicate names.
D. To have a private helper function and a public wrapper function.
Solution
Step 1: Analyze function names and scope
'calculate' starts lowercase, so it is private to the package; 'Calculate' starts uppercase, so it is exported.
Step 2: Understand design pattern
This pattern allows internal logic in 'calculate' while exposing a public function 'Calculate' that calls it.
Final Answer:
To have a private helper function and a public wrapper function. -> Option D
Quick Check:
Lowercase private + uppercase public wrapper [OK]
Hint: Use lowercase for private helpers, uppercase for public API [OK]
Common Mistakes:
Thinking both functions are exported
Expecting compile error from similar names
Assuming no reason for two functions
5. You want to create a Go package that exposes only a function GetData but keeps the data source variable private. Which code snippet correctly implements this using package scope rules?
hard
A. package data
var datasource = "secret"
func getData() string {
return datasource
}
B. package data
var DataSource = "secret"
func GetData() string {
return DataSource
}
C. package data
var datasource = "secret"
func GetData() string {
return datasource
}
D. package data
var DataSource = "secret"
func getData() string {
return DataSource
}
Solution
Step 1: Identify private data variable
The data source variable should start lowercase to be private to the package, so 'datasource' is correct.
Step 2: Identify exported function
The function 'GetData' starts uppercase, so it is exported and accessible outside the package.
Step 3: Verify function returns private variable
The function returns the private variable, exposing data safely.
Final Answer:
package data
var datasource = "secret"
func GetData() string {
return datasource
} -> Option C
Quick Check:
Lowercase var + uppercase func = private data, public access [OK]
Hint: Private vars lowercase, public funcs uppercase [OK]
Common Mistakes:
Making data variable exported by uppercase
Making function unexported by lowercase
Returning unexported function instead of exported
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.