2012-07-13 2 views
22

Ich habe versucht, herauszufinden, wie mgo (MongoDB-Treiber für Go) zu verwenden, und ich kam in dieser Strukturdeklaration:Seltsame Typdefinition Syntax in Golang (Name, geben Sie dann, dann Stringliteral)

type Something struct { 
    Id bson.ObjectId "_id,omitempty" 
    Name string 
} 

Ich verstehe nicht ganz die Syntax des ersten Elements (Id). Ich verstehe, dass es als Typ bson.ObjectId deklariert wird, aber was ist das String-Literal dort tun?

Meine Frage ist nicht über die Mgo-Treiber-Funktionalität,
aber über diese seltsame <name> <type> <string_literal> Syntax.

Ich konnte nichts über die Go-Spezifikationen finden, und ich weiß auch nicht, wie man das googelt.

+0

Weitere Informationen und Beispiele hier: [Was die Verwendung (en) für Tags in Go sind?] (Https://stackoverflow.com/questions/10858787/what-are-the-uses- for-tags-in-go/30889373 # 30889373) – icza

Antwort

37

Es ist in der Struct types Abschnitt des language specification erläutert:

A Felddeklaration durch eine optionale Stringliteral folgen kann tag, die für alle Felder in dem entsprechenden Feld Deklaration eines Attributs wird. Die Tags werden durch eine reflection interface sichtbar gemacht, werden aber ansonsten ignoriert.

// A struct corresponding to the TimeStamp protocol buffer. 
// The tag strings define the protocol buffer field numbers. 
struct { 
    microsec uint64 "field 1" 
    serverIP6 uint64 "field 2" 
    process string "field 3" 
} 
+0

Danke! Das habe ich vermisst. –

+0

speziell im Fall von Mgo, wird das Tag den Schlüssel bei der Kodierung der Struktur als Bson verwendet werden. So funktioniert auch das encoding/json-Paket. Andernfalls würde Go Cap-Initial Keys verwenden. – jorelli

Verwandte Themen