Должен ли я импортировать пакет, если он содержит ту же часть имени? - PullRequest
0 голосов
/ 12 января 2020

У меня немного странный вопрос. Нужно ли импортировать 2 пакета в Go, если он содержит половину имени другого пакета?

Например, следует ли импортировать "os" , если я уже импортировал "os / exe c "

Ответы [ 2 ]

1 голос
/ 12 января 2020

Нет. На самом деле, вы не можете, даже если хотите. Импорт пакета, на который вы не ссылаетесь напрямую, не позволит компилировать Go. См. этот пример :

package main

import (
    "os"
    "os/exec"
)

func main() {
    _ = exec.Cmd{}
}

Создает эту ошибку компиляции:

. / Prog. go: 4: 2: импортировано и не используется: "os"

Вы импортируете os/exec только если вам нужна функциональность в os/exec, и вы импортируете os только если вам нужна функциональность в os.

В некоторых (но определенно не во всех) случаях пакет x/y может зависеть от x, но он сам импортирует его, поэтому вам не нужно об этом беспокоиться.

0 голосов
/ 12 января 2020

Неправильно

package main

import (
    "os/exec"
)

func main() {
    _ = exec.Cmd{}
    _, _ = os.Getwd()
}

Приведенный выше код выдаст ошибку

undefined: os

, поскольку мы не импортировали os пакет. Правильная реализация:

Вправо

package main

import (
    "os"
    "os/exec"
)

func main() {
    _ = exec.Cmd{}
    _, _ = os.Getwd()
}

Неверно

package main

import (
    "os"
    "os/exec"
)

func main() {
    _ = exec.Cmd{}
}

Приведенный выше код выдаст ошибку

, импортированную и не импортированную used: "os"

, поскольку мы не использовали пакет os. Правильная реализация:

Right

package main

import (
    "os/exec"
)

func main() {
    _ = exec.Cmd{}
}

Так что, если вам нужны функциональные возможности пакета os, вы должны импортировать его, а если вам нужны функциональные возможности os/exec, вы должны также нужно импортировать это явно. В противном случае нет необходимости импортировать os и os/exec в том случае, если вы хотите, чтобы в вашем коде был только один из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...