英文:
golang: how to get sub element from a []interface{} alias
问题
我定义了一个别名为[]interface{}的类型state:
type state []interface{}
如何获取State中的子项:
func test(s state) {
// 如何获取s中的第一个元素?
// 或者如何将s转换回[]interface{}类型?
}
test([]interface{1, 2, 3})
英文:
I defined a alias to []interface{}:
type state []interface{}
how to get subitems in State:
func test(s state) {
// How to get 1st element in s ?
// or How to convert s back to []interface{} ?
}
test([]interface{1, 2, 3})
答案1
得分: 1
test([]interface{1, 2, 3})
是错误的,应该是 test(state{1,2,3})
。
另外,你可以像访问任何切片一样访问 s 的第一个元素,使用 s[x]
:
type state []interface{}
func test(s state) {
fmt.Println(s[0])
}
func main() {
test(state{1, 2, 3})
}
英文:
test([]interface{1, 2, 3})
is wrong, it should be test(state{1,2,3})
.
Also you access the first element in s like you would access any slice, with s[x]
:
type state []interface{}
func test(s state) {
fmt.Println(s[0])
}
func main() {
test(state{1, 2, 3})
}
答案2
得分: 0
package main
import (
"fmt"
"log"
)
type state []interface{}
func (s state) item(index int) (interface{}, error) {
if len(s) <= index {
return nil, fmt.Errorf("索引超出范围")
}
return s[index], nil
}
func main() {
st := state{1, 2, 3}
// 获取子项
it, err := st.item(0)
if err != nil {
log.Fatal(err)
}
fmt.Printf("第一个项 %v\n", it)
// 转换回 []interface{}
items := []interface{}(st)
fmt.Println(items)
}
以上是要翻译的代码。
英文:
package main
import (
"fmt"
"log"
)
type state []interface{}
func (s state) item(index int) (interface{}, error) {
if len(s) <= index {
return nil, fmt.Errorf("Index out of range")
}
return s[index], nil
}
func main() {
st := state{1, 2, 3}
// get sub item
it, err := st.item(0)
if err != nil {
log.Fatal(err)
}
fmt.Printf("First Item %v\n", it)
// cast back to []interface{}
items := []interface{}(st)
fmt.Println(items)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论