cmd/cue/cmd: extract cue constraints in tags in get go

Change-Id: I9bd0a2307a364c0ab9c8d9b3e8f69b8f162c29f6
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/6341
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cmd/cue/cmd/get_go.go b/cmd/cue/cmd/get_go.go
index d085723..9cefa8a 100644
--- a/cmd/cue/cmd/get_go.go
+++ b/cmd/cue/cmd/get_go.go
@@ -1075,6 +1075,14 @@
 		field, cueType := e.makeField(name, kind, f.Type(), docs[i], count > 0)
 		add(field)
 
+		if s := reflect.StructTag(tag).Get("cue"); s != "" {
+			expr, err := parser.ParseExpr("get go", s)
+			if err != nil {
+				e.logf("error parsing struct tag %q:", s, err)
+			}
+			field.Value = cueast.NewBinExpr(cuetoken.AND, field.Value, expr)
+		}
+
 		// Add field tag to convert back to Go.
 		typeName := f.Type().String()
 		// simplify type names:
diff --git a/cmd/cue/cmd/testdata/code/go/pkg1/file1.go b/cmd/cue/cmd/testdata/code/go/pkg1/file1.go
index d3d110a..1aa7be5 100644
--- a/cmd/cue/cmd/testdata/code/go/pkg1/file1.go
+++ b/cmd/cue/cmd/testdata/code/go/pkg1/file1.go
@@ -38,7 +38,7 @@
 	AnyJSON    json.Marshaler
 	AnyText    encoding.TextMarshaler
 
-	Bar int `json:"bar,omitempty"`
+	Bar int `json:"bar,omitempty" cue:">10"`
 
 	exclude int
 
diff --git a/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue b/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
index 3e1cdd5..5164026 100644
--- a/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
+++ b/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
@@ -21,7 +21,7 @@
 	CustomYAML?: null | #CustomYAML @go(,*CustomYAML)
 	AnyJSON:     _                  @go(,json.Marshaler)
 	AnyText:     string             @go(,encoding.TextMarshaler)
-	bar?:        int                @go(Bar)
+	bar?:        int & >10          @go(Bar)
 
 	// Time is mapped to CUE's internal type.
 	Time:   time.Time