Re:Hurl, the Exceptional Language
by remram on Sunday May 26, 2024 @04:11PM
(#40484995)
Ah yes, Python's package manager has it wrong also. But at least Python the language is clear, so you can know "import foo" or "from bar import foo" creates a name "foo" in your file. Go has no such limitation. Imagine doing "import pyyaml" and "yaml" is the name defined...
[ Parent
| on HN ]
Wait I’m so confused by this - this is the opposite of how I thought it worked? Go import creates exactly the symbol you mention in the import statement, like “import fmt” creates a symbol “fmt”?
Can you give an example of what you mean?
Yea, this is correct.
```go
import (
"net/http"
"os"
"github.com/anacrolix/torrent"
tstor "github.com/anacrolix/torrent/storage"
)
```would import as: http, os, torrent and tstor. That guy is mixed up.
I don't know what this proves. See example above for an example of exactly what I've said.
The only example I have in mind is modules, which can have a different name from their root package.
For example you can have github.com/user/go-module as module name, and "module" as package name, so "import github.com/user/go-module" will be imported as "module.*".
There’s a linter that automatically aliases this kind of imports with their actual module name so that it’s non ambiguous when reading the import list.
Here's an example, a package bar under a totally different name:
package main
// imports 'bar', you couldn't possibly know from reading this line
import "github.com/remram44/foo20240527"
func main() {
// ??? where does this function come from ???
bar.SomeFunc()
}