2 回答

TA貢獻1810條經驗 獲得超4個贊
我假設 my_struct “實現” Dynamo 接口是否正確
不完全是。my_struct您為嵌入初始化的任何結構都Dynamo將是實現接口的東西。my_struct但是會在編譯時滿足接口。Dynamo正如@mkopriva 指出的那樣,在運行時,這確實需要嵌入式接口的具體實現。因此,如果您要執行以下操作:
package main
import "fmt"
type Adder interface {
func Add(a, b int) int
}
type Embed struct {
Adder
}
func PrintAdd(a Adder, first, second int) {
fmt.Println(a.Add(first, second))
}
func main() {
e := Embed{}
PrintAdd(e, 1, 2)
}
此代碼將編譯,但在運行時,調用PrintAdd將失敗,因為尚未設置嵌入式接口實現。
如果將上面的 main 替換為:
type adder struct {}
func (a adder) Add(first, second int) int {
return first + second
}
func main() {
e := Embed{adder{}}
PrintAdd(e, 1, 2)
}
事情將按預期進行。
...現在可以使用 DescribeTableWithContext 方法了嗎?
是的,假設您在初始化期間提供了接口實現。
編輯:添加了對實現接口與僅僅滿足它的含義的解釋。

TA貢獻1811條經驗 獲得超6個贊
我假設 my_struct"implements" Dynamo 接口是否正確,現在可以使用 DescribeTableWithContext 方法?
不,它的作用是Dynamo
在你的結構中嵌入一個未命名的類型字段。您將能夠直接調用(例如)DescribeTableWithContext
的實例,但此調用實際上會調用您分配給 的任何內容的實現,而不是其中的實現(因為它沒有定義,因此也沒有實現)。這樣做可能只有在設置為具有實現的類型的值(或指向值的指針)后才會順利(即不會恐慌)。Go 中接口的實現是通過鴨子類型完成的。my_struct
var my_struct_instance my_struct
my_struct_instance.Dynamo
my_struct
DescribeTableWithContext
Dynamo
my_struct_instance.Dynamo
Dynamo
- 2 回答
- 0 關注
- 155 瀏覽
添加回答
舉報