初级会员
  • 第 25122 位会员
  • darren3126
  • Darren
  • 2018-11-08 17:21:02
  • Offline
  • 21 70

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • #3 @Chopin 可以简单的理解,传参有取地址符,传参本身是数组结构体,类似C的指针的指针,Elem()就类似指针指向的内容, Elem().Elem()就是Student结构体了。
  • #1 @zhqu1148980644 我看描述应该有误吧。 字符串的内容可以用类似于数组下标的方式获取,但与数组不同,字符串的内容不能在初始化后被修改
  • #1 @darren3126 由于传入的参数加了取地址符,所以将s := reflect.TypeOf(i).String()改成s := reflect.TypeOf(i).Elem().Elem().Name()
  • 将s := reflect.TypeOf(i).String()改成s := reflect.TypeOf(i).Elem().Name()
  • 我的理解是这样的,不知道是否合理。 为了效率,对内存的写入一般会在每一个处理器中缓冲,并在必要时一起flush到主存。而f2没有Sleep,导致一直没有时间片去flush到主存,f1有Sleep,就会flush到主存,所以x值会变化,y的值没变化。 如果runtime.GOMAXPROCS(1),都不会有打印信息出来。被f2独占 可以这样修改,就会变化 package main import ( "fmt" "runtime" "time" ) var x, y int func main() { fmt.Println(runtime.NumCPU()) runtime.GOMAXPROCS(3) go f1(&x) go f2(&y) for { time.Sleep(time.Second * 1) fmt.Println("x:", x, "y", y) } } func f1(x *int) { for { *x = *x + 1 time.Sleep(time.Second * 1) } } func f2(y *int) { for { *y = *y + 1 } }