]> Cypherpunks repositories - gostls13.git/commitdiff
- language for struct field tags
authorRobert Griesemer <gri@golang.org>
Thu, 30 Oct 2008 22:52:37 +0000 (15:52 -0700)
committerRobert Griesemer <gri@golang.org>
Thu, 30 Oct 2008 22:52:37 +0000 (15:52 -0700)
DELTA=17  (15 added, 0 deleted, 2 changed)
OCL=18177
CL=18184

doc/go_spec.txt

index 8978434ddb62eaafa22ec3320eab19e5c4022e73..dbd7fa40c6541bea50a37e60c300ddf8b5842872 100644 (file)
@@ -4,7 +4,7 @@ The Go Programming Language Specification (DRAFT)
 Robert Griesemer, Rob Pike, Ken Thompson
 
 ----
-(October 28, 2008)
+(October 30, 2008)
 
 
 This document is a semi-formal specification of the Go systems
@@ -1094,7 +1094,8 @@ identifier may be declared twice and all field types must be complete
 types (§Types).
 
        StructType = "struct" [ "{" [ List<FieldDecl> ] "}" ] .
-       FieldDecl = IdentifierList CompleteType | TypeName .
+       FieldDecl = (IdentifierList CompleteType | TypeName) [ Tag ] .
+       Tag = string_lit .
 
        // An empty struct.
        struct {}
@@ -1135,6 +1136,20 @@ Fields and methods (§Method declarations) of an anonymous field become directly
 accessible as fields and methods of the struct without the need to provide the
 type name of the respective anonymous field (§Selectors).
 
+A field declaration may be followed by an optional string literal tag which
+becomes an ``attribute'' for all the identifiers in the corresponding
+field declaration. The tags are available via the reflection library but
+are ignored otherwise. A tag may contain arbitrary application-specific
+information (for instance protocol buffer field information).
+
+       // A struct corresponding to the EventIdMessage protocol buffer.
+       // The tag strings contain the protocol buffer field tags.
+       struct {
+               time_usec uint64 "1";
+               server_ip uint32 "2";
+               process_id uint32 "3";
+       }
+
 Forward declaration:
 A struct type consisting of only the reserved word "struct" may be used in
 a type declaration; it declares an incomplete struct type (§Type declarations).