• Golang net/http 性能优化 at 2021年04月25日

    默认总空闲 100 单 host 空闲 2,如果请求多个 host 呢?

  • @lesismal 如果我使用 nbhttp 代替 nethttp,我希望可以无缝替换,我理解的 nbhttp.Server 定位相当于 http.Server,长连接、分段传输、expect、h2 握手、upgrade 都算 http.Server 里面的特性吧。 Cache-Control 标准库实现在 fs.go 里面没有放在 Server,提到 nginx 一般 nginx 反向代理用的 http/1.0 没有长连接影响也不大,不知道有没有能直接使用的长连接,两处 keep-alive 处理代码我没仔细看也不太信任可以直接使用,因为长连接实现依赖传输机制。

    我调试了 example https://github.com/lesismal/nbio/blob/master/examples/http/server/server.go

    func onEcho(w http.ResponseWriter, r *http.Request) {
            w.Write([]byte(time.Now().Format("20060102 15:04:05")))
            w.Write([]byte(time.Now().Format("20060102 15:04:05")))
            w.Write([]byte(time.Now().Format("20060102 15:04:05")))
            w.Write([]byte(time.Now().Format("20060102 15:04:05")))
            for i:=0;i<500000;i++{
                    w.Write([]byte(time.Now().Format("20060102 15:04:05")))
            }
        atomic.AddUint64(&qps, 1)
    }
    

    响应:

    [root@izuf6b7o9hu1q8vzyvkyznz gateway]# curl  -I 127.0.0.1:28000/echo
    HTTP/1.1 200 OK
    Content-Length: 8500068
    Content-Type: text/plain; charset=utf-8
    Date: Wed, 17 Mar 2021 01:23:42 GMT
    

    850KB 的数据都放在内存种,没有和 http.Server 一样流式写入,我感觉可能没有对传输机制做处理,那么我返回一个我猜测返回一个文件内容会不会把所有读到内存中呢? 如果预先设置了 Content-Length 那么不会内存保存的话除外,懒了详细看源码。

  • 没找到 http 长连接实现啊 ,http 标准有 9 种少个 patch。

  • 个人资料设置报错了 at 2020年12月25日

    好像都挂了,我也没法/setting

  • 浅拷贝只复制指针的值,深拷贝复制指针指向的对象。

  • 思路清奇😀

  • GoCN 每日新闻 (2020-12-07) at 2020年12月08日

    上古版本 Go1.6?

  • 为啥 echo 用的人比 gin 少 at 2020年07月27日

    一方面 gin 用的人多些,另一方面很多人察觉不到 echo 对比 gin 的优势(或者叫 gin 的缺陷),一些细微的差别只有在某些极端场景下回察觉到。

  • golang reflect 实现原理 at 2020年04月26日

    大概是这样,不是一模一样的,还有给 flag 属性,具体参考源码。这样定义的 Type Value 只是为了方便理解。

  • 锁问题 at 2020年04月24日

    多次 goroutine 调度顺序不同,输出改 fmt.Printf("%d %d\n", i, count.Num)看结果就知道了。

  • 多线程思路 at 2020年04月23日

    根目录下面每个目录开一个线程去统计他的子目录,最后数据合并。

  • time.Before 和 time.After,time 库的时间比较函数,下面就是比较 current 在两个时间之间。

    current := time.Now()
    return current.Before(cond.Befor) && current.After(cond.After)
    
  • 实现某一个函数

    定义一个类型type Op func(int,int) int

    // add
    Op  = func(a ,b int) int{
    return a+b
    // *2
    Op  = func(a ,_ int) int{
    return a*2
    }
    

    我的代码 28 到 95 行,里面定义了 Binder 函数,然后里面有多种实现,就有_忽略参数的。

  • _ 就是不需要的变量,就相当于放弃了使用这个值,如果变量不使用就这样。

    例如

    file,_ := os.Open("xxxx")
    

    打开文件就忽略了 err,在参数里面也一样,只是定义了需要传多个而已。

  • 大佬请教一下,在 nginx 这样方案中(也是 go 一些开源的实现),fork 传递的 fd,新进程处理新来的连接,而老进程是等旧连接处理完毕或超时后结束。 但是在 Mosn 方案 (未了解和使用) 中,看介绍感觉是老连接也转移到新进程,但是两个进程的数据没有转移,那么转移的连接后续处理不会出问题吗?

  • new 创建是一个空的指针对象相当于&object{},make 创建一个对象,调用内建的特殊函数,例如 newmap newchan,hmap 和 hchan 是一个比较复杂的结构,需要使用 make 创建来执行初始。

    new 创建空指针对象 Ptr,make 创建内建基本类型对象 Map Slice Chan。

  • 当然是 casbin 拉

  • 快来看你是否打榜成功 at 2020年02月20日

    666666666666

  • 等月底 go 发布 14 版本吧,看看 14 对 gomod 有那些修改。

    我现在用的 10,开 mod 项目就无法编译了,我就一直没有升级 go 使用 gomod。

  • 哪些 Go 库让你相见恨晚? at 2020年02月14日

    都是比较偏的库,常用的不说了。

    地址 类别 理由
    github.com/jmoiron/sqlx 数据库 直接执行或绑定结构体
    github.com/kr/pretty 格式化 将对象全部信息格式化输出
    github.com/creack/pty 终端 可以启动一个 bash 终端
    github.com/chromedp/chromedp cdp cdp 实现,前端分离后可以实现 ssr
    github.com/bradfitz/gomemcache 驱动 memcache 驱动实现,简单的 tcp 编程实现网络协议