我只想编写这样的代码:
func (w Writer) WriteVString(strs []string) (int, error) {
return writeV(func(index int, str interface{}) (int, error) {
return w.WriteString(str.(string))
}, strs) // it doesn't work
}
func (w Writer) WriteV(bs [][]byte) (int, error) {
return writeV(func(index int, b interface{}) (int, error) {
return w.Write(b.([]byte))
}, []interface{}{bs...}) // it also can't be compiled
}
type writeFunc func(int, interface{}) (int, error)
func writeV(fn writeFunc, slice []interface{}) (n int, err error) {
var m int
for index, s := range slice {
if m, err = fn(index, s); err != nil {
break
}
n += m
)
return
}
我以为interface{}
可以代表任何类型,所以[]interface
也可以代表任何类型,[]type
现在我知道我错了,[]type
是一个整体类型,不能视为[]interface{}
。
因此,有人可以帮助我如何使此代码正常工作,或其他解决方案吗?
PS :我知道[]byte
或string
可以相互转换,但是实际上这并不是我的意图,可能还有另一种类型,而不是[]byte
and
string
。
现在我知道我错了,
[]type
是一个整体类型,不能视为[]interface{}
。
是的,那是因为interface{}
它是它自己的类型(而不是其他任何类型的“别名”)。
正如我在“golang中的含义是interface{}
什么?”(如果v
是interface{}
变量)中提到的那样:
导致地鼠的人相信“
v
任何类型”,但这是错误的。
v
不是任何类型;它是interface{}
类型的。
在常见问题中提到
它们在内存中没有相同的表示 。
有必要 将元素分别复制到目标切片 。
此示例将int的切片转换为的切片interface{}
:
t := []int{1, 2, 3, 4}
s := make([]interface{}, len(t))
for i, v := range t {
s[i] = v
}
TomL提出了这个示例(在评论中:
package main
import "fmt"
func main() {
x := []string{"a", "b", "c", "d"}
fmt.Printf("%T: %v\n", x, x)
//converting a []string to a []interface{}
y := make([]interface{}, len(x))
for i, v := range x {
y[i] = v
}
fmt.Printf("%T: %v\n", y, y)
//converting a []interface{} to a []string
z := make([]string, len(y))
for i, v := range y {
z[i] = fmt.Sprint(v)
}
fmt.Printf("%T: %v\n", z, z)
}
问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转
问题内容: 如何从float转换为string或从string转换为float? 在我的情况下,我需要在2个值字符串(我从表中获得的值)和我计算出的浮点值之间进行断言。 我尝试从浮动到字符串: 但是断言失败 问题答案: 使用Java的类。 为了进行比较,将字符串转换为float并比较两个float总是更好。这是因为对于一个浮点数,存在多个字符串表示形式,与字符串相比,它们是不同的(例如“ 25”!
问题内容: 我将日期以这种格式存储在SQLite数据库中: 当我以这种格式检索日期时,除小时外,其他一切都很好。时间总是如此。这是我的输出: 这是代码: 我究竟做错了什么? 问题答案: 我认为您的日期格式没有意义。没有13:00 PM。删除格式末尾的“ aaa”,或将HH转换为hh。 不过,这对我来说很好: 它将打印“ 2010年4月29日星期四CEST”。
问题内容: 我想将对象转换为 Java。 格式为 问题答案: 转换日期为字符串使用方法:
将转换为的最佳方法是什么?我有下面的代码,我们有更干净的方式吗?
问题内容: 从来源来看,我无法影响我在地图中获得的数据,该地图以表示。 我需要处理所包含的数据,最好是(其中的数据非常适合该处理)。 我还需要从数据中生成键列表,因为这些键是事先未知的。 我可以在网上找到的大多数类似问题或多或少都说这是不可能的,但是如果我的地图是,则表明数据在那里,可读性为。 我该怎么办fmt.Println可以做什么? 问题答案: 处理未知接口的一种安全方法,只需使用fmt.S