In Ruby people achieve something similar by convention (explicitly creating a namespace and keeping the names in sync with the file name), but not everyone follows convention and things can turn into a mess.
If I had to suggest one flaw in Ruby it would be this, in many other ways I find it nicer to code in then Python, but honestly this one thing is enough to really sour the experience.
Discoverability in Ruby is usually done via IRB, and you can call "source_location" on a method to find where in code it the method is defined (or redefined, as can happen in Ruby)
Coming from Python, I got used to the "explicit is better than implicit" Zen. With "import *" being discouraged, usually when you see something in your Python code, you know exactly where it came from. When I started out with golang, seeing references to things that came out of nowhere (to my eyes) annoyed the hell out of me. I still consider this a cognitive burden.
Generally in Go: functions, structs, and consts are namespaced in a way I think is familiar to most, by package origin.
If something is not, then it's either a function/struct in the same namespace (same file, or directory), variable in same scope, or it's a built-in.
Built-ins like `append`, are not much different than say `map`, `filter`, `max`, etc in Python.
Anything sourced from a subdirectory, parent directory, or sibling directory needs to be explicitly imported via the module path.