Что такое C ++ using some_namespace::object
эквивалент в Голанге?
По вопросу Вот
я могу получить using namespace common
с заявлением ниже:
import (
. "common")
Но это импортировало бы все пространство имен. Прямо сейчас я хочу использовать только, скажем platform
определение, что-то вроде using common::platform
Есть ли эквивалент в Go, чтобы мне не приходилось печатать common.platform
все время?
Следующий код подходит для удобства чтения, но он менее эффективен, поскольку компилятор больше не может вызывать встроенные вызовы функций.
import (
"fmt""strings")
var (
Sprintf = fmt.Sprintf
HasPrefix = strings.HasPrefix
)
И это имеет побочный эффект импорта имен fmt
а также strings
в область файла, которая является то, что в C ++ using
не делает.
В настоящее время нет такой функциональности в Go.
Это не значит, что он никогда не будет добавлен: есть открытое предложение добавить «Псевдоним декларации» на язык.
Как говорили другие, в Go это невозможно. В Go вы импортируете пакеты, не функции или типы из пакетов.
Обратите внимание, что вы можете легко достичь того, что вы хотите, если вы создаете помощник пакет.
Допустим, вы хотите «использовать» fmt.Println()
а также fmt.Printf()
только функции Создайте вспомогательный пакет:
package helper
import "fmt"
func Println(a ...interface{}) (n int, err error) {
return fmt.Println(a...)
}
func Printf(format string, a ...interface{}) (n int, err error) {
return fmt.Printf(format, a...)
}
И там, где вы хотите, чтобы функциональность C ++ «с помощью», импортировалась с использованием точки .
:
import . "helper"
func Something() {
Println("Hi")
Printf("Using format string: %d", 3)
}
В результате только экспортированные идентификаторы helper
пакет будет в объеме, ничего другого из fmt
пакет. Вы можете использовать этот сингл helper
пакет, чтобы сделать функции доступными из пакетов, кроме fmt
конечно тоже. helper
может импортировать любые другие пакеты и иметь функцию «прокси» или делегатора, публикующую их функциональность.
Лично я не чувствую в этом необходимости. Я бы просто импортировал fmt
и вызвать его функции, используя fmt.Println()
а также fmt.Printf()
,
Возможно, вы могли бы переименовать пакет:
import (
c "common"cout2 "github.com/one/cout"cout2 "github.com/two/cout")
Тогда вам нужно будет только набрать c.Platform