发布时间:2024-11-05 17:25:23
var i interface{}
i = "Hello, World"
s := i.(string)
fmt.Println(s) // 输出:Hello, World
在上面的示例中,我们首先定义了一个空接口`i`,然后将一个字符串赋值给它。接着,我们使用接口转换将其转换为`string`类型,并将转换后的值赋给`s`变量。最后,我们打印出`s`的值,结果为`Hello, World`。
var i interface{}
i = 42
if value, ok := i.(int); ok {
fmt.Println("转换成功:", value)
} else {
fmt.Println("转换失败")
}
在上面的示例中,我们首先将一个整数赋值给了空接口`i`,然后使用类型断言将其转换为`int`类型。如果转换成功,则会打印出`转换成功: 42`;如果转换失败,则会打印出`转换失败`。
2. 使用`value := i.(类型)`的方式进行类型断言,如果类型转换失败,则会触发panic。下面是一个示例:
var i interface{}
i = "Hello, World"
value := i.(int) // 触发panic:接口类型不是int
fmt.Println(value)
在上面的示例中,我们将一个字符串赋值给了空接口`i`,然后使用类型断言将其转换为`int`类型。由于实际类型并非`int`,所以会触发panic,程序崩溃。
type Reader interface {
Read() (data string, ok bool)
}
type Writer interface {
Write(data string) bool
}
type ReadWriter interface {
Reader
Writer
}
var rw ReadWriter
rw = MyStruct{}
reader := rw.(Reader)
writer := rw.(Writer)
data, ok := reader.Read()
success := writer.Write(data)
在上面的示例中,我们定义了三个接口类型:`Reader`、`Writer`和`ReadWriter`,其中`ReadWriter`是由`Reader`和`Writer`组合而成的。我们将一个实现了`ReadWriter`接口的结构体赋值给了`rw`变量,然后通过两次接口转换,分别得到了`Reader`接口和`Writer`接口。最后,我们调用了`Read`和`Write`方法来进行读写操作。