golang如何通过interface指针调用成员函数
时间: 2023-07-26 20:39:04 浏览: 56
在 Golang 中,可以通过 interface 指针调用成员函数,具体步骤如下:
1. 定义一个 interface 类型,其中包含成员函数的声明。
2. 定义一个结构体类型,并实现该 interface 中声明的所有成员函数。
3. 定义一个指向该结构体类型的指针变量,并将其赋值给一个 interface 类型的变量。
4. 通过该 interface 变量调用成员函数。
下面是一段示例代码,演示了如何通过 interface 指针调用成员函数:
```go
package main
import "fmt"
// 定义一个 interface 类型
type Animal interface {
Say()
}
// 定义一个结构体类型
type Cat struct {
Name string
}
// 实现 interface 中声明的成员函数
func (c *Cat) Say() {
fmt.Printf("I'm a cat, my name is %s\n", c.Name)
}
func main() {
// 定义一个指向 Cat 类型的指针变量
c := &Cat{Name: "Tom"}
// 将 c 赋值给 interface 变量
var a Animal = c
// 通过 interface 变量调用成员函数
a.Say()
}
```
输出结果为:
```
I'm a cat, my name is Tom
```
相关问题
golang有没有指针
是的,Go 语言有指针。指针是一种变量,其值为另一个变量的内存地址。可以使用指针来传递变量的地址,以便在函数之间共享数据。在 Go 中,使用 `&` 运算符获取变量的地址,使用 `*` 运算符访问指针指向的变量。
以下是一个简单的示例,展示了如何声明和使用指针:
```
package main
import "fmt"
func main() {
// 声明一个整型变量 x
var x int = 10
// 声明一个指向整型变量的指针 p
var p *int = &x
// 打印变量 x 的值和地址
fmt.Println("x =", x)
fmt.Println("&x =", &x)
// 打印指针 p 的值和指向的变量的值
fmt.Println("p =", p)
fmt.Println("*p =", *p)
// 修改指针所指向的变量的值
*p = 20
// 再次打印变量 x 的值
fmt.Println("x =", x)
}
```
在上面的示例中,我们首先声明了一个整型变量 `x`,然后声明了一个指向该变量的指针 `p`,并将其初始化为 `&x`(即 `x` 的地址)。然后,我们使用 `*p` 访问指针所指向的变量的值,使用 `&x` 访问变量 `x` 的地址,最后使用 `*p = 20` 修改指针所指向的变量的值。
golang有那些指针运算
在Golang中,指针运算非常有限,只支持以下两种指针运算:
1. 取地址运算符 `&`: 取得操作数的地址。
2. 取值运算符 `*`: 取得指针指向地址的值。
其他的指针运算,如指针的加、减、自增、自减等运算,在Golang中是不允许的。这是Golang为了保证程序的安全性和可靠性而做出的设计决策。