Импорт пакетов в go
На языке программирования go, почему после импорта пакета мне все еще нужно префикс метода в этом пакете с именем пакета?
то есть.
import "io/ioutil"
func main() {
content, err = iotuil.ReadFile("somefile.txt")
// etc..
}
Разве это не избыточно? Например, в Java вы можете делать такие вещи, как Files.readAllLines и т.д. Без импорта файлов.
Ответы
Ответ 1
Я предполагаю, что это на самом деле не отвечает на ваш вопрос, но если вы хотите, вы можете фактически вызвать методы без явного указания пакета - просто импортируйте с .
перед именами (но это не рекомендуется; см. ниже):
package main
import (
. "fmt"
. "io/ioutil"
)
func main () {
content, err := ReadFile("testfile")
if err != nil {
Println("Errors")
}
Println("My file:\n", string(content))
}
Обратите внимание на комментарий @jimt ниже - эта практика не рекомендуется не за пределами тестов, так как это может вызвать конфликты имен с будущими версиями. Кроме того, определенно согласитесь с точкой @DavidGrayson о том, как лучше читать/видеть, откуда происходят.
Ответ 2
вы можете импортировать и переименовывать имя пакета, например:
import (
. "fmt" // no name, import in scope
File "io/ioutil" // rename ioutil to File
_ "net" // net will not be available, but init() inside net package will be executed
)
См. также https://golang.org/ref/spec#Import_declarations
Ответ 3
Я не могу действительно говорить для дизайнеров языка Go, но приятно иметь возможность быстро определить, где определяется метод, который вы вызываете. Также приятно видеть список всех пакетов, которые вы используете в верхней части файла. Это не избыточно.
Как вы сказали, Java требует, чтобы вы сказали Files.readAllLines
, и аналогичным образом вам нужно написать ioutil.ReadFile
.