- package main
-
- import (
- "fmt"
- )
-
- func main(){
- var x *int =nil
- var y interface{} =x
- fmt.Println(x==y) //true
- fmt.Println(x==nil) //true
- fmt.Println(y==nil) //false
- }
- package main
-
- import (
- "fmt"
- "net"
- "runtime/pprof"
- "sync"
- )
-
- var threadProfile = pprof.Lookup("threadcreate")
-
- func main() {
- fmt.Printf("协程执行之前的线程数:%d\n", threadProfile.Count())
- var wg sync.WaitGroup
- wg.Add(100)
- for i := 0; i < 100; i++ {
- go func() {
- defer wg.Done()
- //runtime.LockOSThread() //强制回收线程
- for j := 0; j < 100; j++ {
- _, err := net.LookupHost("www.baidu.com")
- if err != nil {
- fmt.Println("err=", err)
- }
- }
- }()
- }
- wg.Wait()
- fmt.Printf("协程执行之后的线程数:%d\n", threadProfile.Count())
- }
结果:
- 协程执行之前的线程数:6
- 协程执行之后的线程数:108
暂时不会回收,go还没解决此问题
- package main
-
- import "fmt"
-
- //少于1024双倍扩容,大于1024是1.25倍扩容
- //单个append
- // 1024*1.25=1280
- // 1024*1.25*8=10240 查runtime/sizeclasses.go 表 10240/8=1280
-
- // 批量
- // 1025*8=8200 查runtime/sizeclasses.go 表 9472/8=1184
- func main() {
- var arr []int64
- var arr1 []int64
- for i := 0; i < 1025; i++ {
- arr = append(arr, int64(i))
- }
- fmt.Printf("len=%d,cap=%d\n", len(arr), cap(arr))
- arr1 = append(arr1, arr...)
- fmt.Printf("len=%d,cap=%d\n", len(arr1), cap(arr1))
- }
难留少年时,总有少年来!
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!