التكرار فوق شريحة من الأنواع المستعارة (من تحديد المستخدم) يعطي الكتابة قبل الاسم المستعار

-1

أحاول التكرار فوق شريحة من الأنواع المعرفة من قبل المستخدم (على سبيل المثال أدناه هذه هي أسماء مستعارة) ، لكن النطاق ينتج قيمًا من النوع int ، بدلاً من MyInt كما أتوقع. يساعد الإرسال بداخل "if" بالتأكيد ، لكني أود أن أفهم لماذا لا ينتج النطاق قيمًا من نوع MyInt.

package main

import (
    "fmt"
)

type MyInt int

const (
    MYINT00 MyInt = iota
    MYINT01
)

func main() {
    var myInt02 MyInt = 2
    myInts := []MyInt{MYINT00, MYINT01}
    for i := range myInts {
        if i == myInt02 {
            fmt.Println("same")
        }
    }
}

الملعب: https://play.golang.org/p/nb77pvTMdkW

خطأ:

prog.go:18:8: invalid operation: i == myInt02 (mismatched types int and MyInt)

ثم ظننت أن المشكلة يمكن أن تكون مرتبطة بالثوابت والأيوتا ، لذلك استخدمت المتغيرات المعلنة في الوظيفة - لم تغير أي شيء.

https://play.golang.org/p/0fVRhBtvlOL https://play.golang.org/p/pioDSU4oJdP

لم أجد أي معلومات في Effective Go / أسئلة أخرى. إذا كان أي شخص لديه بعض المدخلات في ذلك ، يرجى مشاركة!

1 إجابة

3
افضل جواب

The Go Programming Language Specification

For statements with range clause

Range expression                          1st value          2nd value

array or slice  a  [n]E, *[n]E, or []E    index    i  int    a[i]       E

i هل range الفهرس int وليس ال range القيمة.

على سبيل المثال ، إصلاح التعليمات البرمجية لاستخدام range القيمة،

package main

import (
    "fmt"
)

type MyInt int

const (
    MYINT00 MyInt = iota
    MYINT01
)

func main() {
    var myInt02 MyInt = 2
    myInts := []MyInt{MYINT00, MYINT01}
    for _, v := range myInts {
        if v == myInt02 {
            fmt.Println("same")
        }
    }
}
:مؤلف
فوق
قائمة طعام