gpt4 book ai didi

go - 遍历别名(用户定义)类型的 slice 在别名之前给出类型

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:36 27 4
gpt4 key购买 nike

我正在尝试遍历用户定义类型的 slice (在下面的示例中,这些是别名 int),但是 range 生成类型为 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")
}
}
}

Playground :https://play.golang.org/p/nb77pvTMdkW

错误:

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

然后我认为这个问题可能与 consts 和 iota 有关,所以我使用了在函数中声明的变量 - 没有改变任何东西。

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

我没有在 Effective Go/other questions 中找到任何信息。如果有人对此有任何意见,请分享!

最佳答案

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

irange 索引,一个 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")
}
}
}

关于go - 遍历别名(用户定义)类型的 slice 在别名之前给出类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50877861/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com