config.Config具有方法func String(string) string
我想将这些方法混合到我的类型Config
中
1.什么时候可以
// type Config struct
type Config struct {
// a struct has many methods
config.Config
Path string
}
// new and call string method
var a Config = &Config{}
a.String("test")
// type Config struct
type (
Configure config.Config
Config struct {
Configure
Path string
}
)
// new and call string method
var a Config = &Config{}
// error, can not call `String()`
a.String("test")
答案 0 :(得分:1)
https://go101.org/article/type-system-overview.html很好:
新定义的类型及其在类型定义中各自的源类型是两种不同的类型。
这有效:
package main
import(
"fmt"
)
type MyType struct {
Id int
}
func (mt *MyType)Method() {
fmt.Printf("Method called %d\n", mt.Id)
}
type MyOtherType MyType
func main(){
mt := &MyType{Id:3}
mt.Method()
//mt2 := &MyOtherType{Id:5}
//mt2.Method()
}
但是,如果您取消注释mt2.Method()
,则会出现错误:
mt2.Method undefined (type *MyOtherType has no field or method Method)
组成的工作原理不同。结构确实获取组成其的结构的方法:
package main
import (
"fmt"
)
type MyType struct {
Id int
}
func (mt *MyType) Method() {
fmt.Printf("Method called %d\n", mt.Id)
}
type MyOtherType struct {
MyType
}
func main() {
mt := &MyType{Id: 3}
mt.Method()
mt2 := &MyOtherType{MyType{Id: 5}}
mt2.Method()
}
这就是类型构成的魔力。
$ go run t.go
Method called 3
Method called 5