go - 是否可以将具有许多项目的结构转换为具有这些项目子集的结构?
问题描述
我正在寻找一种将较大结构转换为另一个结构的方法,该结构包含较大结构中的属性子集。
像一个接口,但有属性。
package main
import "fmt"
type Foobar struct {
foo string
bar string
}
type Bar struct {
bar string
}
func main() {
foobar := Foobar{}
bar := foobar.(Bar)
fmt.Println(bar)
}
显然,上述方法不起作用:invalid operation: foobar (variable of type Foobar) is not an interface
但随后的尝试不起作用
func main() {
var foobar interface{} = Foobar{}
bar := foobar.(*Bar)
fmt.Println(bar)
}
失败了panic: interface conversion: interface {} is main.Foobar, not main.Bar
解决方案
不同的结构是不同的类型,不能相互分配。我认为对于您想要做的事情,您只需要一个嵌套结构。
type (
Bar struct {
bar string
}
Foobar struct {
foo string
bar Bar
}
)
func main() {
foobar := Foobar{bar: Bar{"bbb"}}
bar := foobar.bar
fmt.Println(bar.bar)
}
此外,类型断言只能与接口一起使用。
推荐阅读
- sql - 如何根据PostgreSQL中的两列获取指定数据
- excel - Excel VlookUp 左单元格从另一个工作簿进入 VBA
- python - 在 Python 中使用 Arima 预测未来(关键错误)
- java - 无效的输入和循环
- java - JDBC 在服务器上返回空结果集
- php - Laravel / Eloquent:如何挂钩删除过程?
- c# - C# 中“in”参数的用途
- smartcard - 发送 PPS 智能卡读卡器
- excel - Excel 相关数据验证
- android - 我无法在 mac os 的 android 模拟器上运行 react-native-webrtc-demo