Yes, that is expected. The right hand side of the assignment is 
`b[1].code`. That is a single value. The "magic" that allows a two value 
return from a map lookup does not carry through to more complex expressions 
that use the value from that lookup. It would get confusing really fast if 
it did. 

On Friday, March 29, 2019 at 11:16:03 AM UTC-4, jlfo...@berkeley.edu wrote:
>
>
> go version go1.12 linux/amd64
>
> When compiling the example program below (
> https://play.golang.org/p/koHORLMMuhK)
> I get the error
>
> assignment mismatch: 2 variable but 1 values
>
> for the assignment statement in Part 2 but the assignment statement in 
> Part 1 compiles.
> Both assignment statements have the same number of values, but it appears 
> that
> referencing an integer in a structure field in the 2nd assignment 
> statement, rather than a simple
> integer, confuses the compiler.
>
> I know I can work around this problem by breaking Part 2 into 2 assignment
> statements, the first assigning a structure, and the second assigning the 
> structure field, but
> I wonder if what I'm seeing is expected.
>
> Cordially,
> Jon Forrest
>
> ---------------------------
>
> package main
>
> import "fmt"
>
> var a = map[int]int{
>         1: 2,
> }
>
> var b = map[int]Word{
>         1: {2, 3},
> }
>
> type Word struct {
>         code    int
>         scratch int
> }
>
> func main() {
>         var num int
>
>         // Part 1
>         num, ok := a[1]
>         if ok {
>                 fmt.Println(num)
>         }
>
>         // Part 2
>         num, ok = b[1].code   // assignment mismatch: 2 variable but 1 
> values
>         if ok {
>                 fmt.Println(num)
>         }
> }
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to