Skip to content

Commit a04b262

Browse files
authored
[GO] fix: stops checking for nil for structs (#13843)
* [GO] fix: stops checking for nil for structs * [GO] chore: regenerates samples
1 parent 1de28c8 commit a04b262

103 files changed

Lines changed: 1382 additions & 1312 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/resources/go/model_simple.mustache

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,13 @@ func (o *{{classname}}) Get{{name}}() {{vendorExtensions.x-go-base-type}} {
122122
// Deprecated
123123
{{/deprecated}}
124124
func (o *{{classname}}) Get{{name}}Ok() ({{^isArray}}{{^isFreeFormObject}}*{{/isFreeFormObject}}{{/isArray}}{{vendorExtensions.x-go-base-type}}, bool) {
125-
if o == nil{{#isNullable}}{{#vendorExtensions.x-golang-is-container}} || o.{{name}} == nil{{/vendorExtensions.x-golang-is-container}}{{/isNullable}} {
126-
return nil, false
125+
if o == nil{{#isNullable}}{{#vendorExtensions.x-golang-is-container}} || isNil(o.{{name}}){{/vendorExtensions.x-golang-is-container}}{{/isNullable}} {
126+
{{^isFreeFormObject}}
127+
return nil, false
128+
{{/isFreeFormObject}}
129+
{{#isFreeFormObject}}
130+
return {{vendorExtensions.x-go-base-type}}{}, false
131+
{{/isFreeFormObject}}
127132
}
128133
{{#isNullable}}
129134
{{#vendorExtensions.x-golang-is-container}}
@@ -163,7 +168,7 @@ func (o *{{classname}}) Set{{name}}(v {{vendorExtensions.x-go-base-type}}) {
163168
// Deprecated
164169
{{/deprecated}}
165170
func (o *{{classname}}) Get{{name}}() {{vendorExtensions.x-go-base-type}} {
166-
if o == nil{{^isNullable}} || o.{{name}} == nil{{/isNullable}}{{#isNullable}}{{^vendorExtensions.x-golang-is-container}} || o.{{name}}.Get() == nil{{/vendorExtensions.x-golang-is-container}}{{/isNullable}} {
171+
if o == nil{{^isNullable}} || isNil(o.{{name}}){{/isNullable}}{{#isNullable}}{{^vendorExtensions.x-golang-is-container}} || isNil(o.{{name}}.Get()){{/vendorExtensions.x-golang-is-container}}{{/isNullable}} {
167172
var ret {{vendorExtensions.x-go-base-type}}
168173
return ret
169174
}
@@ -189,8 +194,13 @@ func (o *{{classname}}) Get{{name}}() {{vendorExtensions.x-go-base-type}} {
189194
// Deprecated
190195
{{/deprecated}}
191196
func (o *{{classname}}) Get{{name}}Ok() ({{^isArray}}{{^isFreeFormObject}}*{{/isFreeFormObject}}{{/isArray}}{{vendorExtensions.x-go-base-type}}, bool) {
192-
if o == nil{{^isNullable}} || o.{{name}} == nil{{/isNullable}}{{#isNullable}}{{#vendorExtensions.x-golang-is-container}} || o.{{name}} == nil{{/vendorExtensions.x-golang-is-container}}{{/isNullable}} {
193-
return nil, false
197+
if o == nil{{^isNullable}} || isNil(o.{{name}}){{/isNullable}}{{#isNullable}}{{#vendorExtensions.x-golang-is-container}} || isNil(o.{{name}}){{/vendorExtensions.x-golang-is-container}}{{/isNullable}} {
198+
{{^isFreeFormObject}}
199+
return nil, false
200+
{{/isFreeFormObject}}
201+
{{#isFreeFormObject}}
202+
return {{vendorExtensions.x-go-base-type}}{}, false
203+
{{/isFreeFormObject}}
194204
}
195205
{{#isNullable}}
196206
{{#vendorExtensions.x-golang-is-container}}
@@ -207,7 +217,7 @@ func (o *{{classname}}) Get{{name}}Ok() ({{^isArray}}{{^isFreeFormObject}}*{{/is
207217

208218
// Has{{name}} returns a boolean if a field has been set.
209219
func (o *{{classname}}) Has{{name}}() bool {
210-
if o != nil && {{^isNullable}}o.{{name}} != nil{{/isNullable}}{{#isNullable}}{{#vendorExtensions.x-golang-is-container}}o.{{name}} != nil{{/vendorExtensions.x-golang-is-container}}{{^vendorExtensions.x-golang-is-container}}o.{{name}}.IsSet(){{/vendorExtensions.x-golang-is-container}}{{/isNullable}} {
220+
if o != nil && {{^isNullable}}!isNil(o.{{name}}){{/isNullable}}{{#isNullable}}{{#vendorExtensions.x-golang-is-container}}isNil(o.{{name}}){{/vendorExtensions.x-golang-is-container}}{{^vendorExtensions.x-golang-is-container}}o.{{name}}.IsSet(){{/vendorExtensions.x-golang-is-container}}{{/isNullable}} {
211221
return true
212222
}
213223

@@ -285,7 +295,7 @@ func (o {{classname}}) MarshalJSON() ([]byte, error) {
285295
{{/isNullable}}
286296
{{! if argument is not nullable, don't set it if it is nil}}
287297
{{^isNullable}}
288-
if {{#required}}true{{/required}}{{^required}}o.{{name}} != nil{{/required}} {
298+
if {{#required}}true{{/required}}{{^required}}!isNil(o.{{name}}){{/required}} {
289299
toSerialize["{{baseName}}"] = o.{{name}}
290300
}
291301
{{/isNullable}}

modules/openapi-generator/src/main/resources/go/utils.mustache

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package {{packageName}}
33

44
import (
55
"encoding/json"
6+
"reflect"
67
"time"
78
)
89

@@ -317,3 +318,17 @@ func (v *NullableTime) UnmarshalJSON(src []byte) error {
317318
v.isSet = true
318319
return json.Unmarshal(src, &v.value)
319320
}
321+
322+
// isNil checks if an input is nil
323+
func isNil(i interface{}) bool {
324+
if i == nil {
325+
return true
326+
}
327+
switch reflect.TypeOf(i).Kind() {
328+
case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.UnsafePointer, reflect.Interface, reflect.Slice:
329+
return reflect.ValueOf(i).IsNil()
330+
case reflect.Array:
331+
return reflect.ValueOf(i).IsZero()
332+
}
333+
return false
334+
}

samples/client/petstore/go/go-petstore/model_200_response.go

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/client/petstore/go/go-petstore/model_additional_properties_any_type.go

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/client/petstore/go/go-petstore/model_additional_properties_array.go

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

samples/client/petstore/go/go-petstore/model_additional_properties_boolean.go

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)