2016-08-11 7 views
9

Was ist C++ using some_namespace::object gleichwertig in Golang?Was ist C++? `Äquivalent` in Golang

Nach der Frage here Ich kann unter using namespace common mit Anweisung erhalten:

import (
    . "common" 
) 

Dies würde aber den gesamten Namensraum importieren. Im Moment möchte ich nur verwenden, sagen platform Definition, so etwas wie using common::platform

Gibt es ein Äquivalent für das in Go, so dass ich zu common.platform nicht geben Sie die ganze Zeit?

+1

@juanchopanza Ich bin mir ziemlich sicher, dass das OP nach etwas sucht, wie 'mit std :: cout; 'und dann kann man einfach' cout' anstelle von 'std :: cout' benutzen. – NathanOliver

+1

@NathanOliver das ist genau was ich suche. – cookieisaac

+0

Wenn die Paketbenennung und die Benennung von exportierten Dateien gut aufeinander abgestimmt sind, ist es nicht viel mehr zu tippen, dafür aber viel besser lesbar. – Volker

Antwort

5

Der folgende Code kommt der Lesbarkeit sehr nahe, ist aber weniger effizient, da der Compiler keine Inline-Funktionsaufrufe mehr ausführen kann.

import (
    "fmt" 
    "strings" 
) 

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

Und, hat es den Nebeneffekt des Namen fmt und strings in die Datei Umfang importieren, das etwas ist, das C++ 's using nicht tut.

1

Wie andere gesagt haben, ist es in Go nicht möglich. In Go importieren Sie Pakete, keine Funktionen oder Typen von Paketen.

Beachten Sie, dass Sie leicht erreichen können, was Sie wollen, wenn Sie ein Helfer Paket erstellen.

Nehmen wir an, Sie möchten nur die Funktionen und fmt.Printf() "verwenden". Erstellen Sie ein Helfer-Paket:

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...) 
} 

Und wo Sie wollen, dass die C++ 's ‚mit‘ Funktionalität, Import einen Punkt mit .:

import . "helper" 

func Something() { 
    Println("Hi") 
    Printf("Using format string: %d", 3) 
} 

Das Ergebnis ist, dass nur die exportierten Kennungen des helper Paket wird im Umfang, nichts anderes aus dem fmt Paket. Sie können dieses einzelne Paket helper verwenden, um Funktionen natürlich auch in anderen Paketen als fmt verfügbar zu machen. helper kann alle anderen Pakete importieren und eine "Proxy" - oder Delegatorfunktion haben, die ihre Funktionalität veröffentlicht.

Persönlich fühle ich nicht das Bedürfnis nach diesem. Ich würde einfach fmt importieren und seine Funktionen mit fmt.Println() und fmt.Printf() aufrufen.

1

Vielleicht könnten Sie das Paket umbenennen:

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

Dann würden Sie nur geben c.Platform müssen

Verwandte Themen