interface{} 使用问题??
go吧
全部回复
仅看楼主
level 1
仁仨伍 楼主
package main
import ("fmt""time")
type Interface interface {Get() int}
type State struct {Position int}
func (s *State) Get() int {return s.Position}
func test_time(max int) {t1 := time.Now()for i := 0; i < max; i++ {var v1 interface{} //define in forv1 = &State{1}if x, ok := v1.(*State); ok {x.Get()}}t11 := time.Now()fmt.Println("interface{} define in for: take time: ", t11.Sub(t1))
t2 := time.Now()var v2 interface{} //define outide forfor i := 0; i < max; i++ {v2 = &State{1}if x, ok := v2.(*State); ok {x.Get()}}t22 := time.Now()fmt.Println("interface{} defined outside for: take time: ", t22.Sub(t2))fmt.Println(`Why do "interface{}" defined in "for" take less time than outside "for"??`)}
func test_time2(max int) {
t1 := time.Now()for i := 0; i < max; i++ {var v2 Interfacev2 = &State{1}v2.Get()}t11 := time.Now()fmt.Println("Interface defined in for: take time: ", t11.Sub(t1))
t2 := time.Now()var v2 Interfacefor i := 0; i < max; i++ {v2 = &State{1}v2.Get()}t22 := time.Now()fmt.Println("Interface defined outside for: take time: ", t22.Sub(t2))}
func test_time3(max int) {
t1 := time.Now()for i := 0; i < max; i++ {var v1 intv1 = 15v1 += 1}t11 := time.Now()fmt.Println("int defined in for: take time: ", t11.Sub(t1))
t2 := time.Now()var v2 intfor i := 0; i < max; i++ {v2 = 15v2 += 1}t22 := time.Now()fmt.Println("int defined outside for: take time: ", t22.Sub(t2))}
func main() {max := 10000000test_time(max)test_time2(max)test_time3(max * 100)}
2013年09月04日 02点09分 1
level 1
仁仨伍 楼主
interface{} 定义在for中耗时最少, 为什么??
而 自定义 Interface 和 使用interface{} (多了if判断类型)用时差不多。为什么?
2013年09月04日 02点09分 3
1