go语言视屏解决方案

有问必答mintzhao 回复了问题 • 5 人关注 • 3 个回复 • 462 次浏览 • 2016-11-02 11:32 • 来自相关话题

gopkg.in是什么?

有问必答astaxie 回复了问题 • 3 人关注 • 2 个回复 • 657 次浏览 • 2016-11-01 21:41 • 来自相关话题

dev模式下的render函数宕机问题

有问必答astaxie 回复了问题 • 3 人关注 • 2 个回复 • 640 次浏览 • 2016-11-01 21:32 • 来自相关话题

FakeGit:一个自欺欺人的好玩意

开源程序SuperFashi 发表了文章 • 0 个评论 • 522 次浏览 • 2016-11-01 21:21 • 来自相关话题

这个项目一开始使用Python实现,发在了V2论坛上,后来接触了Golang以后就把这个用新语言重写了一遍。

查看全部

这个项目一开始使用Python实现,发在了V2论坛上,后来接触了Golang以后就把这个用新语言重写了一遍。


Github 页面 | 博客页面 | 原 Python 版本




rcard


FakeGit 是一个自欺欺人的好玩意,它会修改你的本地 git 配置文件,让 git 以为你是另外一个提交者。


你可以将其用于你自己的项目,当然也可以用于任何你具有写权限的 git 仓库。


示例


FakeGit Demo


举个栗子,jQuery 之父和 PHP 之父在我的项目里提交了一些好玩的玩意。当然,我对两位充满敬意且无意冒犯。


这些都是真实的提交,并且会被 Github 和基本上所有 git 代码托管网站识别成其用户,只要这个用户存在。


安装


go get -u github.com/hanbang-wang/FakeGit-Go/cmd/fakegit

用法


fakegit <command> [--user] [--help|-h]

FakeGit 会把所有的参数传递给原 git 命令行程序,除了以下的:


change       永远更改你的本地身份
recover 快速删除本地 git 配置文件内的 user 关键字
--help, -h 一个简单的帮助

FakeGit 会拦截--user和紧接着的一个参数,就是提交者的信息。


身份格式


如果你要钦定某个人,使用姓名 <邮箱> 这样的格式,比如:


--user 'John Doe <johndoe@example.com>'

或者你不想填写邮箱地址,留空即可:


--user 'No Email <>'

我同时也给 Github 用户做了个身份查询,填写用户名即可:


--user 'example'

例子


fakegit commit -a -m "A example." --user "SuperFashi"

程序将会使用 Github API 查询使用相应 id SuperFashi的用户,也就是我,查询我的提交历史和提交记录中的邮箱,生成一个类似于SuperFashi <admin@superfashi.com>的格式,用这个信息来进行提交。


但是我还是推荐指定用户信息:


fakegit commit -a -m "A example." --user "SuperFashi <admin@superfashi.com>"

当然你也可以用 FakeGit 执行任何 git 有的命令:


fakegit push --user "whateveryoulike <>"
# 和 `git push` 一样

因为只有 commit 命令会使用 user 关键字,所以都一样。


附加


fakegit change会永久更改你的本地身份,所以必须跟着--user,否则会抛出个错误。


fakegit recover是一个快速重置你本地 git 配置文件的小工具,预防你后悔或者想在突然退出程序后恢复。


授权 & 一些东西


这个小项目用的是 Unlicense ,去 LICENSE 了解更多。但是你应该详细阅读一下下面的东西:


这个项目和其他人的身份有关,所以最后有可能成为个身份盗贼,或者发生损害他人名誉权等这类犯法的事情。


我不承担任何责任,同时我希望各位只用其来开一些无伤大雅的玩笑,或者用来做教育或学术研究。

请教大家golang操作mysql问题

有问必答sryan 回复了问题 • 3 人关注 • 2 个回复 • 639 次浏览 • 2016-11-01 18:04 • 来自相关话题

关于channel的问题

有问必答lake 回复了问题 • 4 人关注 • 4 个回复 • 469 次浏览 • 2016-11-01 17:03 • 来自相关话题

RobotGo v0.20.0,Golang跨平台控制鼠标键盘位图屏幕,增加全局事件监听

文章分享veni 回复了问题 • 3 人关注 • 4 个回复 • 807 次浏览 • 2016-11-01 16:45 • 来自相关话题

orm.Fielder接口问题

回复

有问必答eric 发起了问题 • 1 人关注 • 0 个回复 • 432 次浏览 • 2016-11-01 16:18 • 来自相关话题

好玩的github项目-科大讯飞语音linux在线语音合成后台服务

Go开源项目wwdyy 发表了文章 • 2 个评论 • 1107 次浏览 • 2016-11-01 13:53 • 来自相关话题

转自github用户imroc

ontts:

ontts 是go写的语音合成服务(文本转语音),原理是cgo调用的科大讯飞的在线语音合成linux SDK(用go封装SDK)。支持单次合成与后台合成服务两种模式,后台合成服... 查看全部

转自github用户imroc


ontts:


ontts 是go写的语音合成服务(文本转语音),原理是cgo调用的科大讯飞的在线语音合成linux SDK(用go封装SDK)。支持单次合成与后台合成服务两种模式,后台合成服务是订阅redis中的数据(业务系统可将待合成文本发布到redis),一有数据立马合成并存储到磁盘


安装:


go get github.com/imroc/ontts


运行:


需要将libmsc.so加入环境变量


cp xf/lib/x64/libmsc.so /usr/local/lib/
vi ~/.bashrc
export LD_LIBRARY_PATH = /usr/local/lib

使用示例:


单次合成:


./ontts -t "云喇叭快递,快递小管家,您的快递到了,请于下午6点前到学校后门申通快递取件" -o test.wav -lp "appid = 5808ae7e, work_dir = ."


启动合成后台服务:


./ontts -r ":6379" -d /tmp/out -lp "appid = 5808ae7e, work_dir = ."


redis数据:


后台合成的服务是订阅的redis中"tts"的通道中的数据,redis发布数据示例:


redis-cli>publish tts "{\"id\":\"245671051\",\"txt\":\"这是一段测试语音\"}"
注:生成的语音文件名是id加".wav"后缀


命令参数:


讯飞语音参数选项:



  • -tp TTS合成参数[有默认值]

  • -lp 登录参数


单次合成模式选项:



  • -t 待合成的文本

  • -o 音频输出路径


合成服务模式选项:



  • -d 音频保存的目录

  • -s 合成速度级别(1-10),数值越小速度越快,越耗CPU[默认为1]

  • -r redis连接地址

  • -rp redis密码


日志选项:



  • -l 日志输出路径[默认./ontts.log]

  • -ll 日志输出级别(debug,info,warn,error)


其他:



  • -h 查看帮助


目录:


── ontts
├── glide.yaml (glide依赖配置)
├── main.go (程序入口)
├── README.md
├── server (TTS合成主体逻辑的package)
│ └── server.go
├── speed_test.go (速度测试)
└── xf (讯飞SDK的Go封装)
├── doc (讯飞语音linux SDK相关参考)
├── include (cgo需要用到的头文件)
├── lib (动态链接库 SDK)
├── README.md
└── xf.go

Github地址:https://github.com/imroc/ontts

要是用几个关键词/包名来表达go的精髓,你会用什么???

有问必答九命猫 回复了问题 • 3 人关注 • 3 个回复 • 425 次浏览 • 2016-11-01 11:39 • 来自相关话题

reflect.DeepEqual 效率如何?

技术讨论edwinxie 发表了文章 • 3 个评论 • 645 次浏览 • 2016-11-01 10:00 • 来自相关话题

假如有两个map,内容一样但顺序不一样,譬如:

map1:=map[string]int{"a":1,"b":2,"c":3}... 			查看全部
					

假如有两个map,内容一样但顺序不一样,譬如:


map1:=map[string]int{"a":1,"b":2,"c":3};
map2:=map[string]int{"a":1,"c":3,"b":2};

如果我们需要判断两个map是否一致,最直观的做法是:循环map1,看看每个key是否都在m2中存在,再比较map1[key]是否和map2[key]相等,如果都ok,再依次循环map2。


func compareMap(map1, map2 map[string]int) bool {
for k1, v1 := range map1 {
if v2, has := map2[k1]; has {
if v1 != v2 {
return false
}
} else {
return false
}
}
for k2, v2 := range map2 {
if v1, has := map1[k2]; has {
if v1 != v2 {
return false
}
} else {
return false
}
}
return true
}

如上的代码看起来还挺麻烦的,原来,go的反射包中有一个reflect.DeepEqual可以方便帮助我们解决这个问题:


fmt.Println("compareMap(map1,map2) = ", compareMap(map1, map2))
fmt.Println("reflect.DeepEqual(map1,map2) = ", reflect.DeepEqual(map1, map2))
fmt.Println()
map3 := map[string]int{"a": 1, "b": 2, "c": 3, "d": 1}
fmt.Println("compareMap(map1,map3)=", compareMap(map1, map3))
fmt.Println("reflect.DeepEqual(map1,map3) = ", reflect.DeepEqual(map1, map3))

output:


compareMap(map1,map2) =  true
reflect.DeepEqual(map1,map2) = true

compareMap(map1,map3)= false
reflect.DeepEqual(map1,map3) = false

是不是方便太多~由于是反射操作,我们再来比较一下两者的效率:


start := time.Now()
for i := 0; i < 100000; i++ {
compareMap(map1, map2)
}
end := time.Now()
duration := end.Sub(start)
fmt.Println("100000 call compareMap(map1,map2) duration=", duration)

start = time.Now()
for i := 0; i < 100000; i++ {
reflect.DeepEqual(map1, map2)
}
end = time.Now()
duration = end.Sub(start)
fmt.Println("100000 call reflect.DeepEqual(map1,map2) duration=", duration)

output:


100000 call compareMap(map1,map2) duration= 22.499392ms
100000 call reflect.DeepEqual(map1,map2) duration= 163.500884ms

由此可见,大约相差8倍。但在实际开发过程中,若无大量类似的compare操作,这种效率的差距是可以忽略不计的。另外,在我们不知道欲比较的值的类型的情况下,用reflect更是不可或缺。

大家都有哪些 golang code 的 debug 的神器推荐?

有问必答tupunco 回复了问题 • 16 人关注 • 11 个回复 • 1479 次浏览 • 2016-11-01 09:58 • 来自相关话题

关于golang写的web服务,大家都是怎么调试的

有问必答larry 回复了问题 • 13 人关注 • 9 个回复 • 1285 次浏览 • 2016-11-01 09:58 • 来自相关话题

go中如何连接两个slice

有问必答xiayf 回复了问题 • 5 人关注 • 4 个回复 • 1185 次浏览 • 2016-11-01 09:14 • 来自相关话题

怎么分析和理解golang的pprof

有问必答tupunco 回复了问题 • 4 人关注 • 2 个回复 • 1188 次浏览 • 2016-11-01 09:11 • 来自相关话题