首页   注册   登录
 guonaihong 最近的时间轴更新
guonaihong's repos on GitHub
Go · 194 人关注
gout
做github最好用的流式http client库,让你体会到还没有爽完,活已经干玩
Go · 48 人关注
flag
专为命令行爱好者设计,方便写出类似于git或者coreutils中的命令接口(ls, mv, cat)
Go · 40 人关注
coreutils
Reimplement the gnu coreutils package with the go language. Coreutils contains many basic commands
Go · 22 人关注
gurl
Gurl is a performance testing tool. The supported protocols are http, websocket, tcp. Of course, it also supports access in non-bench mode. gurl是性能测试工具,支持的协议有http, websocket,tcp。当然也支持非bench模式下的访问
Go · 5 人关注
ChinaDNSGo
C · 5 人关注
threadpool
A very simple thread pool
Go · 5 人关注
wav
目前主要功能是给pcm文件加wav头,提供的命令行工具可以把pcm转成wav
Go · 4 人关注
log
log库,集文件滚动,压缩,分级输出,定制多输出源功能于一身
C · 2 人关注
cflag
cflag is a command line option parsing library written by c,cflag是c写的命令行选项解析库,非常简单好用,没有任何第三方依赖。
Go · 2 人关注
cutbyte
cutbyte是个http 反向代理服务,正在开发中(先暂停,玩别的)
Go · 2 人关注
go-soxr
Go bindings for the libsoxr audio down and up sample library (go包装的soxr音频升降采样库)
C · 2 人关注
recycle_bin
存放一些失败的项目,正所谓失败是成功母,额。。。
Go · 1 人关注
gin
Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.
Go · 1 人关注
glua
导给lua用的库
Go · 1 人关注
go-bench-code
本项目试图找到最优解,当在go里面做一件事有多种方法时
Go · 1 人关注
gutil
维护一些工具函数
C · 1 人关注
streem
prototype of stream based programming language
C++ · 0 人关注
ccflag
ccflag is a command-line option parsing library written in C++11. It is very simple and easy to use, without any third-party dependencies. ccflag是c++ 11写的命令行选项解析库,非常简单好用,没有任何第三方依赖。
C++ · 0 人关注
cclog
只支持c++11,正在缓慢开发中(暂停)
C · 0 人关注
ckv
key-value store and a bit like redis
Go · 0 人关注
go
The Go programming language
0 人关注
images
我的图床
Go · 0 人关注
jianshu-example
Go · 0 人关注
jm
json marshal工具
Go · 0 人关注
kingshard
A high-performance MySQL proxy
Go · 0 人关注
onefs
暂停
Go · 0 人关注
sysbench2
延后,有时间继续玩下去
Go · 0 人关注
websocket
A WebSocket implementation for Go.
Go · 0 人关注
weedclient
存放seaweedfs go客户端代码
ONLINE

guonaihong

V2EX 第 400152 号会员,加入于 2019-04-10 09:13:02 +08:00
今日活跃度排名 1636
熟悉golang
golang: gout callback 使用示例
程序员  •  guonaihong  •  8 小时 38 分钟前
golang cgo 小心 C.Bytes 函数
程序员  •  guonaihong  •  23 小时 2 分钟前  •  最后回复来自 guonaihong
12
golang 检测 cgo 内存泄露
程序员  •  guonaihong  •  2 天前  •  最后回复来自 guonaihong
2
如何看待 xorm 开源项目归档
程序员  •  guonaihong  •  7 天前  •  最后回复来自 guonaihong
10
golang 1.13 errors 包 新函数介绍
  •  1   
    程序员  •  guonaihong  •  8 天前  •  最后回复来自 guonaihong
    7
    golang 1.13 Value.IsZero 值得期待的地方
    程序员  •  guonaihong  •  12 天前  •  最后回复来自 guonaihong
    4
    golang 字符串技巧分享(1)--分割
    程序员  •  guonaihong  •  12 天前  •  最后回复来自 guonaihong
    9
    guonaihong 最近回复了
    23 小时 2 分钟前
    回复了 guonaihong 创建的主题 程序员 golang cgo 小心 C.Bytes 函数
    @reus 用 append 还要依赖传参 空间是否够。觉得这个方式不是最优,可以用类型转换。
    23 小时 32 分钟前
    回复了 guonaihong 创建的主题 程序员 golang cgo 小心 C.Bytes 函数
    @fuis "为啥 C.Bytes 就节约内存了,没看懂"。
    如果 C.Bytes 可以用,只是把内存分配的过程从两次变为 1 次。你可以看下

    改进方法([]byte 到*C.char) --->(1 次分配内存)
    极致省内存方法(不推荐) ---->(0 次分配内存)

    这两个标题下面的方法,把内存分配从 1 次,变为 0 次。当然推荐 1 次的方法,不容易出错。

    ## 内存两次分配的原因如下

    要把 go 里面的[]byte 转成 c 里面的 char *。常规做法有两步[]byte-->string-->char *。每一步都有 malloc 内存的操作。

    * 第一步 []byte--> string。(需要重新分配内存, 比如 string(bytes 类型的变量))
    * 第二步 string --> char *。(需要重新分配内存,C.CString(s))
    1 天前
    回复了 guonaihong 创建的主题 程序员 golang cgo 小心 C.Bytes 函数
    @reus 加 0 的思路是好的。但是 append 发现空间不够还是会重新 malloc 内存。可以控制[]byte,留空一位专门放 0。
    打印下面的代码证实, append 重新分配内存。
    ```go
    package main

    import "C"

    import "fmt"

    func main() {
    b := []byte("我是小妖怪,逍遥又自在,杀人不眨眼,吃人不放盐。")
    b1 := append(b, 0)
    cstr := C.CBytes(b1)
    fmt.Printf("b(%p):append address(%p):cbytes(%p)\n", b, b1, cstr)
    }

    ```
    1 天前
    回复了 guonaihong 创建的主题 程序员 golang cgo 小心 C.Bytes 函数
    @fuis 在 go 里面 []byte 到 string 是有一次内存拷贝的。想把 go 里面的[]byte 转成 c 的*C.char 常见做法有两次拷贝
    []byte-->string-->*c.char

    本来想用 C.Bytes 节约[]byte->string 的一次拷贝,发现没加'\0‘。后面用强制类型转化搞定了。
    package main

    import (
    "fmt"
    )

    func main() {
    s := "wowowo"
    b := []byte(s)
    fmt.Printf("%p:%p\n", &s, b)
    }
    1 天前
    回复了 guonaihong 创建的主题 程序员 golang cgo 小心 C.Bytes 函数
    @reus 你的入参是[]byte。[]byte 到 string 要拷贝一次内存的。
    2 天前
    回复了 guonaihong 创建的主题 程序员 golang 检测 cgo 内存泄露
    @NoobPhper go1.14 版本?那还要等大半年。还挺期待的。
    @love js 是挺不错的语言。我后面也打算玩下。
    @Daath 厉害厉害,可否分享下 nginx 的做法。。。
    @sunny352787 哈哈。。sunny 兄让我不知道说什么好。难道一篇让人开箱即用的技巧。非要扯得高深点才好。非要告诉别人 http 除了是基于 tcp 的。http2 加入 tcp 多路复用,优化 http1.1 pipeline 的问题。http3 将要 使用 udp,解决 tcp 协议栈在内核开销大的问题。这种一堆细节,除了抬高自己,对读者没有任何好处。我喜欢站在大众读者角度,讲些开箱即用的东东。。。尽理追求复杂的事情说简单,简单的东西直接使用。。。 如果你觉得不舒服,我下一篇尽量用更平谈的标题。我无意在这种小事上继续讨论,这种非技术的讨论实在没意思。你下个回答,我也不回答了(特此说明)。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3656 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 10:11 · PVG 18:11 · LAX 03:11 · JFK 06:11
    ♥ Do have faith in what you're doing.