golang博客里有一个例子。下面两段程序的结果是相同的。
Read more...
package main
import (
"fmt"
"reflect"
)
type A struct {
Name string
}
func (p A) test(){}
func (p A) Test1(){
fmt.Println("df")
}
type AInterface interface {
Test1()
test()
}
func main() {
var a A
a.Name = "hha"
var value reflect.Value = reflect.ValueOf(a)
p := value.Interface().(AInterface)
p.Test1()
}
package main
import (
"fmt"
"reflect"
)
type A struct {
Name string
}
func (p A) test(){}
func (p A) Test1(){
fmt.Println("df")
}
func main() {
var a A
a.Name = "hha"
var value reflect.Value = reflect.ValueOf(a)
vf := value.MethodByName("Test1")
in := make([]reflect.Value, 0)
vf.Call(in)
}
遗憾的是第一种方法事先定义好了interface,如果你加入的新方法应该是不能成功的。

[/caption]
通过上面的介绍我们了解了import的时候其实是执行了该包里面的init函数,初始化了里面的变量,_操作只是说该包引入了,我只初始化里面的 init函数和一些变量,但是往往这些init函数里面是注册自己包里面的引擎,让外部可以方便的使用,就很多实现database/sql的引起,在 init函数里面都是调用了