我总是必须返回一个值,即使出错

If I have a function that looks like this

  func ThisIsMyComplexFunc() (ComplexStruct, error)

where ComplexStruct is a big struct that usually contain loads of values.

What if the function stumbles on an error right in the beginning, before I even started building my struct, ideally I would like to only return the error, e.g.

  return nil, err

but it wont let me do it, it forces me to create a dummy complex struct and return that together with the error, even though I never want to use the struct.

Is there a way around this?

If your function is declared to return two values, then you will need to return two values.

One option that might simplify your code is to use named return values:

func ThisIsMyComplexFunc() (s ComplexStruct, err error) {
    ...
}

Now you can just assign to s and/or err and then use a bare return statement. You will still be returning a ComplexStruct value, but you don't need to initialise it manually (it will default to a zero value).

You can return a pointer to the struct:

func ThisIsMyComplexFunc() (*ComplexStruct, error) {
  ...
  if somethingIsWrong {
    return nil, err
  }
  ...
  return &theStructIBuilt, nil
}

In general, it'll be cheaper to pass big structs by pointer anyway, because it's easier to copy a pointer than the whole struct.