03-packages-and-scopes/questions/03-scopes/README.md
package awesome
import "fmt"
var enabled bool
func block() {
var counter int
fmt.Println(counter)
}
3: That's right.
enabledis out of any functions, so it's a package scoped name.block()function is also package scoped; it's out of any function too.
2: That's right. Imported package names are file scoped. And they can only be used within the same file.
5: That's right.
counteris declared within theblock()func, so it's in the scope of the block func. Out of theblock()func, other code can't see it.
block() see enabled name?1: All code inside the same package can see all the other package level declared names.
awesome package see counter name?4: That's right. None of the other code can see the names inside the
block()function. Only the code inside theblock()function can see them (Only to some extent. For example: Inside the block, the code can only see the variables declared before it.)
awesome package see fmt name?3: Only the same file can see the imported packages, not the other files whether they're in the same package or not.
package awesome
import "fmt"
// declared twice in the package scope
var enabled bool
var enabled bool
func block() {
var counter int
fmt.Println(counter)
}
2: That's right. You can't declare the same name in the same scope. If you could do so, then how would you access it again? Or to which one?
package awesome
import "fmt"
// declared at the package scope
var enabled bool
func block() {
// also declared in the block scope
var enabled bool
var counter int
fmt.Println(counter)
}
1: Actually, you can declare the same name in the inner scopes like this.
block()'s scope is inside its package. This means that it can access to its package's scope (but not vice versa). So,block()'s scope is under its package's scope. This means that you can declare the same name again. It will override the parent scope's name. They both can be exist together. Check out the example in the course repository to find out.