gpt4 book ai didi

go - 你如何在 Go 中实现不同类型的容器?

转载 作者:IT王子 更新时间:2023-10-29 01:16:40 26 4
gpt4 key购买 nike

<分区>

以下代码在 Go 中实现了一个整数列表:

package main

import "fmt"

type List struct {
Head int
Tail *List
}

func tail(list List) *List {
return list.Tail
}

func main() {
list := List{Head: 1, Tail:
&List{Head: 2, Tail:
&List{Head: 3, Tail:
nil}}}
fmt.Println(tail(list).Head)
}

问题是这只适用于 int。如果我想要一个 strings 列表,我需要再次重新实现每个列表方法(例如 tail)!这显然不是实用,因此,这可以通过使用空接口(interface)来解决:

type List struct {
Head interface{} // Now works for any type!
Tail *List
}

问题是,1. 由于类型转换,这似乎要慢得多,2. 它抛弃了类型安全,允许对任何内容进行类型检查:

// This type-checks!
func main() {
list := List{Head: 123456789 , Tail:
&List{Head: "covfefe" , Tail:
&List{Head: nil , Tail:
&List{Head: []int{1,2}, Tail:
nil}}}}
fmt.Println(tail(list).Head)

显然,该程序应该在静态类型语言中进行类型检查。

我如何实现一个 List 类型,它不需要我为每个包含的类型重新实现所有 List 方法,但又能保持预期的类型安全性和性能?

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