go — Что в C ++ использует `эквивалент` в golang

Что такое C ++ using some_namespace::object эквивалент в Голанге?

По вопросу Вот
я могу получить using namespace common с заявлением ниже:

import (
. "common")

Но это импортировало бы все пространство имен. Прямо сейчас я хочу использовать только, скажем platform определение, что-то вроде using common::platform

Есть ли эквивалент в Go, чтобы мне не приходилось печатать common.platform все время?

8

Решение

Следующий код подходит для удобства чтения, но он менее эффективен, поскольку компилятор больше не может вызывать встроенные вызовы функций.

import (
"fmt""strings")

var (
Sprintf = fmt.Sprintf
HasPrefix = strings.HasPrefix
)

И это имеет побочный эффект импорта имен fmt а также strings в область файла, которая является то, что в C ++ using не делает.

4

Другие решения

В настоящее время нет такой функциональности в Go.

Это не значит, что он никогда не будет добавлен: есть открытое предложение добавить «Псевдоним декларации» на язык.

2

Как говорили другие, в 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(),

1

Возможно, вы могли бы переименовать пакет:

import (
c "common"cout2 "github.com/one/cout"cout2 "github.com/two/cout")

Тогда вам нужно будет только набрать c.Platform

1
По вопросам рекламы [email protected]