Home >Backend Development >Golang >Why Does Go's Type Inference Fail for Struct Field Assignments?
Failed Type Inference in Go Assignments
Go's type inference mechanism typically allows for concise assignment statements. However, some assignments may fail to infer types as expected.
Consider the following example:
i := 10 next := 11 prev, i := i, next
This snippet correctly infers the types of the variables and assigns them accordingly.
However, a similar assignment involving a struct field may encounter type inference issues:
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
In this case, the compiler reports an error: "non-name on left side of :=."
The reason for this disparity is that in the first example, the left-hand side of the assignment is a variable name, while in the second example, it is a struct field. Go's type inference engine requires a named variable on the left-hand side to infer the type of the right-hand side.
This issue is acknowledged as Go issue 6842. It is not considered a bug but rather a limitation of the current type inference implementation.
The above is the detailed content of Why Does Go's Type Inference Fail for Struct Field Assignments?. For more information, please follow other related articles on the PHP Chinese website!