gpt4 book ai didi

go - 如何比较 Golang 中的结构数据和接口(interface)数据?

转载 作者:IT王子 更新时间:2023-10-29 01:54:48 28 4
gpt4 key购买 nike

我正在尝试在 Golang 中创建一个通用的二叉树。如何比较接口(interface)中的数据和代码中输入的数据?这是我正在尝试做的一个例子。给我带来麻烦的比较是这个

 } else if cur.data < data {

-

package DSAA

type TreeNode struct {
data interface{}
right *TreeNode
left *TreeNode
}

type BinarySearchTree struct {
root *TreeNode
}

func BSTCreate() *BinarySearchTree {
return &BinarySearchTree{nil}
}

func (b *BinarySearchTree) Insert(cur TreeNode, data interface{}) *BinarySearchTree {
if &cur == nil {
cur := &TreeNode{data, nil, nil}
} else if cur.data < data {
b = b.Insert(*cur.left, data)
} else {
b = b.Insert(*cur.right, data)
}
return b
}

最佳答案

你有一些选择:
1- 使用运行时类型开关:

package main

import (
"fmt"
)

func main() {
fmt.Println(Less(1, 2)) // true
fmt.Println(Less("AB", "AC")) // true
}

func Less(a, b interface{}) bool {
switch v := a.(type) {
case int:
w := b.(int)
return v < w
case string:
w := b.(string)
return v < w

}
return false
}

然后替换} else if cur.data < data {} else if Less(cur.data , data) {


2- 使用 Comparer interface :

package main

import (
"fmt"
)

type Comparer interface {
// Less reports whether the element is less than b
Less(b interface{}) bool
}

func main() {
a, b := Int(1), Int(2)
fmt.Println(a.Less(b)) // true

c, d := St("A"), St("B")
fmt.Println(c.Less(d)) // true
}

type Int int

func (t Int) Less(b interface{}) bool {
if v, ok := b.(Int); ok {
return int(t) < int(v)
}
return false
}

type St string

func (t St) Less(b interface{}) bool {
if v, ok := b.(St); ok {
return string(t) < string(v)
}
return false
}

3- 使用 reflect

关于go - 如何比较 Golang 中的结构数据和接口(interface)数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39130593/

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