每日新闻

每日新闻

GoCN每日新闻资讯
有问必答

有问必答

Go相关的问题,技术相关的问题
文章分享

文章分享

技术文章分享,让知识传播给更多的人
招聘应聘

招聘应聘

为Gopher服务的招聘应聘平台

go语言视屏解决方案

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

gopkg.in是什么?

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

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

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

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

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

这个项目一开始使用`Python`实现,发在了V2论坛上,后来接触了`Golang`以后就把这个用新语言重写了一遍。 [Github 页面](https://github.com/hanbang-wang/FakeGit-Go) | ...查看全部
这个项目一开始使用`Python`实现,发在了V2论坛上,后来接触了`Golang`以后就把这个用新语言重写了一遍。

[Github 页面](https://github.com/hanbang-wang/FakeGit-Go) | [博客页面](https://www.superfashi.com/fakegit.html) | [原 Python 版本](https://github.com/hanbang-wang/FakeGit)

***

[![rcard](https://goreportcard.com/badge/github.com/hanbang-wang/FakeGit-Go)](https://goreportcard.com/report/github.com/hanbang-wang/FakeGit-Go)

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

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

# 示例

![FakeGit Demo](https://superfashi.b0.upaiyun.com/wp-content/uploads/2016/07/fakegitdemo.png)

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

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

# 安装

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

# 用法

```bash
fakegit [--user] [--help|-h]
```
FakeGit 会把所有的参数传递给原 git 命令行程序,除了以下的:

```bash
change 永远更改你的本地身份
recover 快速删除本地 git 配置文件内的 user 关键字
--help, -h 一个简单的帮助
```
FakeGit 会拦截`--user`和紧接着的一个参数,就是提交者的信息。

## 身份格式

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

```bash
--user 'John Doe '
```
或者你不想填写邮箱地址,留空即可:

```bash
--user 'No Email <>'
```
我同时也给 Github 用户做了个身份查询,填写用户名即可:

```bash
--user 'example'
```
## 例子
```bash
fakegit commit -a -m "A example." --user "SuperFashi"
```
程序将会使用 Github API 查询使用相应 id `SuperFashi`的用户,也就是我,查询我的提交历史和提交记录中的邮箱,生成一个类似于`SuperFashi `的格式,用这个信息来进行提交。

但是我还是推荐指定用户信息:
```bash
fakegit commit -a -m "A example." --user "SuperFashi "
```
当然你也可以用 FakeGit 执行任何 git 有的命令:
```bash
fakegit push --user "whateveryoulike <>"
# 和 `git push` 一样
```
因为只有 commit 命令会使用 user 关键字,所以都一样。

## 附加

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

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

# 授权 & 一些东西

这个小项目用的是 Unlicense ,去 [LICENSE](https://github.com/hanbang-wang/FakeGit-Go/blob/master/LICENSE) 了解更多。但是你应该详细阅读一下下面的东西:

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

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

请教大家golang操作mysql问题

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

关于channel的问题

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

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

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

orm.Fielder接口问题

回复

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

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

Go开源项目wwdyy 发表了文章 • 2 个评论 • 6057 次浏览 • 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 个回复 • 1528 次浏览 • 2016-11-01 11:39 • 来自相关话题

reflect.DeepEqual 效率如何?

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

假如有两个map,内容一样但顺序不一样,譬如: ```go map1:=map[string]int{"a":1,"b":2,"c":3}; map2:=map[string]int{"a":1,"c":3,"b":2}; ...查看全部
假如有两个map,内容一样但顺序不一样,譬如:
```go
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。
```go
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**可以方便帮助我们解决这个问题:
```go
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:
```go
compareMap(map1,map2) = true
reflect.DeepEqual(map1,map2) = true

compareMap(map1,map3)= false
reflect.DeepEqual(map1,map3) = false
```
是不是方便太多~由于是反射操作,我们再来比较一下两者的效率:
```go
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:
```go
100000 call compareMap(map1,map2) duration= 22.499392ms
100000 call reflect.DeepEqual(map1,map2) duration= 163.500884ms
```
**由此可见,大约相差8倍。但在实际开发过程中,若无大量类似的compare操作,这种效率的差距是可以忽略不计的。另外,在我们不知道欲比较的值的类型的情况下,用reflect更是不可或缺。**

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

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

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

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

怎么分析和理解golang的pprof

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

如何解析未知结构的xml

有问必答stevewang 回复了问题 • 3 人关注 • 2 个回复 • 4474 次浏览 • 2016-10-31 23:41 • 来自相关话题