每日新闻

每日新闻

GoCN每日新闻资讯
有问必答

有问必答

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

文章分享

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

招聘应聘

为Gopher服务的招聘应聘平台

go实现抓妹子图片

wwdyy 发表了文章 • 4 个评论 • 1604 次浏览 • 2016-10-26 14:09 • 来自相关话题

转自csdn,作者:vspeter -------------------- ```go import ( "bytes" "fmt" "io/ioutil" "net/htt ...查看全部
转自csdn,作者:vspeter
--------------------
```go
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"os"
"regexp"
"strconv"
)

const (
PATH string = "~/meizi" //文件存储路径
STARTURL string = "http://www.mzitu.com/model" //妹子图模块列表页url
CONCURRENCY int = 3 //并发下载数
)

var (
c1 chan string //通道:负责STARTURL,以后可以做成从命令参数里读取哦
c2 chan string //通道: 负责传输所有的模块url
c3 chan []string //通道:负责传输imgUrl
c4 chan int //通道: 负责传输每张图片的下载完成状态
c5 chan int //通道:负责传输当前下载数
)

func init() {
c1 = make(chan string, 1)
c2 = make(chan string, 100)
c3 = make(chan []string, 1000)
c4 = make(chan int, 3)
c5 = make(chan int, 10)
go CgetList()
go Cdownload()
}
func main() {
c1 <- STARTURL
go CgetModel()
num := 0
for count := range c5 {
num = num + count
fmt.Println("已下载:", num)
}
}

//调度器, 拉取所有模块
func CgetModel() {
modelPage := getPage(<-c1)
for i := 1; i <= modelPage; i++ {
modelUrl := STARTURL + "/page/" + strconv.Itoa(i)
c2 <- modelUrl
}
}

//调度器拉取所有图片url,这里其实还可以多分一层
func CgetList() {
k := 0
tmp := make([]string, 3)
for modelUrl := range c2 {
imgLists := getList(modelUrl)
for _, imgList := range imgLists {
imgPage := getPage(imgList)
for j := 1; j <= imgPage; j++ {
imgUrl := imgList + "/" + strconv.Itoa(j)
if k < CONCURRENCY {
tmp[k] = imgUrl
k++
} else {
c3 <- tmp
k = 0
}
}
}
if k != 0 {
c3 <- tmp
k = 0
}
}

}

//调度器, 下载图片
func Cdownload() {
for imgUrls := range c3 {
if len(imgUrls) > 0 {
for _, imgUrl := range imgUrls {
go func() {
download(imgUrl)
c4 <- 1
}()
}
num := 0
for k := range c4 {
num = num + k
if num == len(imgUrls) {
c5 <- num
break
}
}
}
}
}

//图片列表
func getList(url string) (l []string) {
reg, _ := regexp.Compile(`

.*?

`)
_, html, _ := getHtml(url)
lists := reg.FindAllStringSubmatch(html, 1000)
for _, list := range lists {
l = append(l, list[1])
}
return
}

//下载html
func getHtml(url string) (error, string, error) {
response, err := http.Get(url)
defer response.Body.Close()
html, err1 := ioutil.ReadAll(response.Body)
return err, string(html), err1
}

//获取最大分页
func getPage(url string) (page int) {
_, html, _ := getHtml(url)
reg, _ := regexp.Compile(`(\d*)`)
s := reg.FindAllStringSubmatch(html, 200)
if len(s) < 2 {
fmt.Println("获取失败")
os.Exit(-1)
}
page, _ = strconv.Atoi(s[len(s)-1][1])
return

}

//下载图片
func download(url string) {
reg, _ := regexp.Compile(`

(.*?)

`)
reg1, _ := regexp.Compile(`http:\/\/pic\.dofay\.com/(.*)`)
_, html, _ := getHtml(url)
iterms := reg.FindAllStringSubmatch(html, 100)
for _, iterm := range iterms {
imgUrl := iterm[1]
imgPath := reg1.FindAllStringSubmatch(imgUrl, 100)
imgPaths := bytes.Split([]byte(imgPath[0][1]), []byte("/"))
path := PATH + "/" // + iterm[2]
imgResponse, _ := http.Get(imgUrl)
defer imgResponse.Body.Close()
imgByte, _ := ioutil.ReadAll(imgResponse.Body)
pInfo, pErr := os.Stat(path)
if pErr != nil || pInfo.IsDir() == false {
errDir := os.Mkdir(path, os.ModePerm)
if errDir != nil {
fmt.Println(errDir)
os.Exit(-1)
}
}
fn := path + "/" + string(imgPaths[len(imgPaths)-1])
_, fErr := os.Stat(fn)
var fh *os.File
if fErr != nil {
fh, _ = os.Create(fn)
} else {
fh, _ = os.Open(fn)
}
defer fh.Close()
fh.Write(imgByte)
}
}
```

Go 语言多版本安装及管理利器 - GVM

bingohuang 发表了文章 • 7 个评论 • 7075 次浏览 • 2016-10-25 17:58 • 来自相关话题

Go 的环境安装和配置并不复杂,首先推荐看看官网的[安装教程](https://golang.org/doc/install),介绍的非常全面详细。 如果想看中文,并拓展这方面的知识,推荐看[《Go Web 编程》](https:// ...查看全部
Go 的环境安装和配置并不复杂,首先推荐看看官网的[安装教程](https://golang.org/doc/install),介绍的非常全面详细。

如果想看中文,并拓展这方面的知识,推荐看[《Go Web 编程》](https://www.gitbook.com/book/astaxie/build-web-application-with-golang)这边开源书籍中的第一章:[Go 环境配置](https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/01.0.html),作者 [astaxie](https://github.com/astaxie) 已经讲解的非常全面直观。

但如果你有 Go 多版本的需求(比如新老版本共存),如果你想更简化 Go 环境配置(省去GOPATH、GOROOT等的配置),你还希望它支持跨平台(支持Mac和Linux),那么我特别推荐这款 Go 第三方工具:[GVM](https://github.com/moovweb/gvm)——
Go 语言多版本安装及管理利器。

GVM,类似于ruby 中的 [RVM](https://rvm.io),java 中的 [jenv](https://github.com/linux-china/jenv)(国产),可用于方便管理 Go 的版本,它有如下几个主要特性:

* 管理 Go 的多个版本,包括安装、卸载和指定使用 Go 的某个版本

* 查看官方所有可用的 Go 版本,同时可以查看本地已安装和默认使用的 Go 版本

* 管理多个 GOPATH,并可编辑 Go 的环境变量

* 可将当前目录关联到 GOPATH

* 可以查看 GOROOT 下的文件差异

尤其是前三个特性,非常实用,接下来就详细的介绍一下这款工具的安装和常用方式。

### 安装 GVM
一行脚本的事情:
```
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
```
需要**注意**的是,如果本地用的是 [zsh](http://www.zsh.org/ "zsh"),直接替换 [bash](https://www.gnu.org/software/bash/ "bash") 即可。

### 使用 GVM

直接输入 `gvm`,查看使用帮助
``` bash
☁ ~ gvm
Usage: gvm [command]

Description:
GVM is the Go Version Manager

Commands:
version - print the gvm version number
get - gets the latest code (for debugging)
use - select a go version to use (--default to set permanently)
diff - view changes to Go root
help - display this usage text
implode - completely remove gvm
install - install go versions
uninstall - uninstall go versions
cross - install go cross compilers
linkthis - link this directory into GOPATH
list - list installed go versions
listall - list available versions
alias - manage go version aliases
pkgset - manage go packages sets
pkgenv - edit the environment for a package set
```
帮助简单易懂,这里介绍其中其中几个常用的命令。

### 展示 Go 版本

展示当前所有可以安装的 Go 版本,最新的是 `go1.7.3`
```bash
☁ ~ gvm listall

gvm gos (available)

go1
go1.0.1
go1.0.2
go1.0.3
...
go1.7.3
```

展示本地安装好的 Go 版本,箭头表示默认使用的版本,我这里是 `go1.7.3`
```bash
☁ ~ gvm list

gvm gos (installed)

go1.4
go1.5
go1.6.2
go1.6.3
go1.7
go1.7.1
=> go1.7.3
```
对比本地没有的版本,我们就可以在线安装你需要的版本了。

### 安装指定的 Go 版本

如果是 `go 1.5-` 的版本,直接安装:
```bash
gvm install go1.4
gvm use go1.4 [--default]
```
它背后做的事情是先把源码下载下来,再用 C 做编译。

所以如果是 `go 1.5+` 的版本,因为至此 Go 实现了自举(用 Go 编译 Go),就需要用到 Go 1.4 来做编译

```bash
# -B 表示只安装二进制包
gvm install go1.4 -B
gvm use go1.4
export GOROOT_BOOTSTRAP=$GOROOT
gvm install go1.7.3
```

安装好之后,指定默认使用这个版本,加上 `--default` 即可,省去每次敲 `gvm use`
```bash
gvm use go1.7.3 --default
```

这个时候查看 go 环境变量:
```bash
☁ ~ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/bingo/.gvm/pkgsets/go1.7.3/global"
GORACE=""
GOROOT="/Users/bingo/.gvm/gos/go1.7.3"
GOTOOLDIR="/Users/bingo/.gvm/gos/go1.7.3/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/g_/tjrlnbjd4sl56gp0p2nk3j5h0000gn/T/go-build385345518=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"
```
全部帮你配置好了,看起来非常赞!

### 管理多个 GOPATH
GVM 还一个很实用的功能,可以管理多个 `GOPATH`(Go package),是通过 `gvm pkgset` 命令
```bash
☁ ~ gvm pkgset
= gvm pkgset

* http://github.com/moovweb/gvm

== DESCRIPTION:

GVM pkgset is used to manage various Go packages

== Usage

gvm pkgset Command

== Command

create - create a new package set
delete - delete a package set
use - select where gb and goinstall target and link
empty - remove all code and compiled binaries from package set
list - list installed go packages
```
说明的很详细,使用方法和 gvm 也类似,就不赘述

### 卸载
如果只是想卸载某个安装好的 Go 版本:
```
gvm uninstall go1.7.3
```
如果你想完全卸载掉 GVM 和 所有安装的 Go 版本(需谨慎):
```
gvm implode
```

### 注意和不足
* 在 Linux 下安装 GVM,需要安装相关依赖,详情见[官网说明](https://github.com/moovweb/gvm)
* GVM 官方显示没对 Windows 做支持,考虑到 Windows 不是程序员的标配吧(有同学回复用 git-windows客户端,自带bash功能,可以自行尝试安装下)。
* GVM 安装新版本之后,Go 环境变量会重新设置,为了节约磁盘空间和时间,建议把之前版本的 GOPATH 内容移动到新版本对应的 GOPATH 目录下,相关路径可以通过 `go env` 获取
* 在同一版本下,用 `gvm pkgset` 创建多个 GOPATH,可能会占用你比较大的磁盘空间
* 使用 `gvm implode` 需谨慎
* GVM 是用 `shell` 编写

Go 2.0要开新坑了啊

故城 回复了问题 • 15 人关注 • 11 个回复 • 19165 次浏览 • 2016-10-25 16:54 • 来自相关话题

10.25 每日早报

astaxie 发表了文章 • 0 个评论 • 1618 次浏览 • 2016-10-25 08:15 • 来自相关话题

10.25 每日早报 新闻: 1.Node.js包管理器npm 4.0发布,新增大量重要改进 2.奔驰分时租赁平台Car2Share随心开正式进驻SOHO中国,半小时租费9.9元 ...查看全部
10.25 每日早报

新闻:

1.Node.js包管理器npm 4.0发布,新增大量重要改进

2.奔驰分时租赁平台Car2Share随心开正式进驻SOHO中国,半小时租费9.9元

3.优步中国开始新App首发版内测,上线人工客服、与微信完成对接

4.原Uber中国高级副总裁柳甄加盟今日头条,具体任职暂未透露

5.分时租赁平台嗒嗒用车获得2000万人民币的A轮投资占股10%,旗下均为新能源汽车

6.滴滴快车拼车发布业务数据,日均订单已突破200万单,平均拼成率达70%

7.大疆发布禅思Z30远摄变焦云台相机,支持30倍光变,面向行业无人机应用市场

8.GeekPwn2016黑客嘉年华在上海开幕,神奇小子Geohot携自动驾驶系统Comma One 2参会

资源:

阿里&BCG:人工智能,未来制胜之道
http://www.bcg.com.cn/cn/newsandpublications/publications/reports/report20161013001.html

注:上述内容来源于互联网,由EGO整理

panic/recover工作原理

themoonstone 发表了文章 • 4 个评论 • 3760 次浏览 • 2016-10-24 15:09 • 来自相关话题

在Golang里面没有大家所熟悉的try-cache异常机制、而是用panic/recover代替 异常throw / catch和panic / recover是有些类似的,比如、recover的作用是捕获并返回panic提交的错误对象、这可以理 ...查看全部
在Golang里面没有大家所熟悉的try-cache异常机制、而是用panic/recover代替
异常throw / catch和panic / recover是有些类似的,比如、recover的作用是捕获并返回panic提交的错误对象、这可以理解为通过调用panic抛出一个值、该值可以通过调用recover函数进行捕获。
主要的区别是,即使当前goroutine处于panic状态,或当前goroutine中存在活动紧急情况,恢复调用仍可能无法检索这些活动紧急情况抛出的值。

For example:

```go
package main

import (
"fmt"
)

func main() {
defer func() {
defer func() {
fmt.Println("6:", recover())
}()
}()
defer func() {
func() {
fmt.Println("5:", recover())
}()
}()
func() {
defer func() {
fmt.Println("1:", recover())
}()
}()
func() {
defer fmt.Println("2:", recover())
}()
func() {
fmt.Println("3:", recover())
}()

fmt.Println("4:", recover())
panic(1)
defer func() {
fmt.Println("0:", recover()) // never go here
}()
}
```
上述程序中的7个恢复调用都没有恢复程序。 程序崩溃并打印出堆栈跟踪:

$ go run example1.go
1:
2:
3:
4:
5:
6:
panic: 1

goroutine 1 [running]:
...
显然,第0个恢复调用是不可达的。 对于其他recover,让我们先检查Go规范:
**如果满足以下任一条件,recover的返回值为nil:**
- 1.panic参数是nil
- 2.当前goroutine没有产生panic
- 3.recover不是由延迟函数直接调用。

让我们忽略第一个条件。 第二个条件覆盖第一/第二/第三和第四recover调用。 第三个覆盖第5个recover调用。 然而,三个条件中没有一个覆盖第六个recover调用。
怎样才能让recover调用起作用?如下 :

```go
import("fmt")
func main(){
defer func(){
fmt.Println(recover())// 1
}()
panic(1)
}
```
现在,panic值被recover调用捕获,并且程序不会崩溃。
那么,使recover调用生效的主要规则是什么?
首先,让我们学习一些概念和说明。
## 概念:延迟函数调用概念:延迟函数调用
当函数被延迟调用时,或者函数的调用使用defer关键字作为前缀,则调用被称为延迟调用。
```go
package main
func main(){
defer func(){// deferred function calling
func(){// not a deferred function calling
defer recover()// deferred function calling
}()
}()
func(){
// not a deferred function calling
defer func(){
/// deferred function calling
}()
}()
}
```
## 概念:函数调用级别和Goroutine执行级别

函数调用级别是指函数调用的深度,与主函数或者goroutine的入口函数相关。
```go
package main

funcmain(){
// level 0
go func(){
// level 0
func(){
// level 1
}()
func(){
// level 1
func(){
// level 2
}()
}()
}()
func(){
// level 1
func(){
// level 2
go func(){
// level 0
}()
}()
go func(){
// level 0
}()
}()
}
```
goroutine当前执行点的调用级别称为goroutine的执行级别。
## 说明:panic只能向上传播
是的,panic只能向上传播,沿着函数调用堆栈反向。panic从不通过深入到函数调用中传播。
```go
package main

import"fmt"
func main(){// calling level 0
defer func(){// calling level 1
fmt.Println("Now, the panic is still in calling level 0")
func(){// calling level 2
fmt.Println("Now, the panic is still in calling level 0")
func(){// calling level 3
fmt.Println("Now, the panic is still in calling level 0")
}()
}()
}()
defer fmt.Println("Now, the panic is in calling level 0")
func(){
// calling level 1
defer fmt.Println("Now, the panic is in calling level 1")
func(){// calling level 2
defer fmt.Println("Now, the panic is in calling level 2")
func(){// calling level 3
defer fmt.Println("Now, the panic is in calling level 3")
panic(1)
}()
}()
}()
}
```
The output:
Now, the panic is in calling level 3

Now, the panic is in calling level 2

Now, the panic is in calling level 1

Now, the panic is in calling level 0

Now, the panic is still in calling level 0

Now, the panic is still in calling level 0

Now, the panic is still in calling level 0

panic: 1

goroutine 1 [running]:

...
## 概念:panic级别

panic级别意味着panic传播到函数调用的哪一层级、因为panic只能向上传递、所以panic等级永远不加增加、只会减小、在goroutine中,当前panic的水平永远不会大于goroutine的执行水平。

## 说明:在同一层级上、新的panics会压制原有panics
```go
Example:
package main

import"fmt"
func main(){
defer fmt.Println("program will not crash")
defer func(){
fmt.Println(recover())// 3
}()
defer fmt.Println("now, panic 3 suppresses panic 2")
defer panic(3)
defer fmt.Println("now, panic 2 suppresses panic 1")
defer panic(2)
panic(1)
}
```
Outputs:

now, panic 2 suppresses panic 1

now, panic 3 suppresses panic 2

3

program will not crash

在以上程序中、我们最终只能看到一个panic 3、panic 3被recover捕获、因此程序不会崩溃
在一个goroutine中,在任何时候在相同的调用级别将有至多一个主动panic。 特别是,当执行点运行在goroutine的调用级别0时,在goroutine中最多只有一个活动的panic。

## 说明:多个主动panic在一个Goroutine中的共存
Example:
```go
package main

import"fmt"
func main(){// callnig level 0
defer fmt.Println("program will crash, for panic 3 is stll active")
defer func(){// calling level 1
defer func(){// calling level 2
fmt.Println(recover())// 6
}()// the level of panic 3 is 0.// the level of panic 6 is 1.
defer fmt.Println("now, there are two active panics: 3 and 6")
defer panic(6)// will suppress panic 5
defer panic(5)// will suppress panic 4
panic(4)// will not suppress panic 3, for they have differrent levels
// the level of panic 3 is 0.// the level of panic 4 is 1.
}()
defer fmt.Println("now, only panic 3 is active")
defer panic(3)// will suppress panic 2
defer panic(2)// will suppress panic 1
panic(1)
}
```
在该示例中,panic 6、两个处于active状态中的panic之一被recover捕获。 但是其他panic,panic 3,在主调用结束时仍然活动,所以程序将崩溃。
Outputs:

now, only panic 3 is active

now, there are two active

panics: 3 and 6

6

program will crash, for panic
3 is stll active

panic: 1

panic: 2

panic: 3

goroutine 1 [running]:
...
## 说明:低级的panics将会被首先捕获
Example:
```go
package main

import"fmt"
func main(){
defer func(){
defer func(){
fmt.Println("panic",recover(),"is recovered")// panic 2 is recovered
}()
defer fmt.Println("panic",recover(),"is recovered")// panic 1 is recovered
defer fmt.Println("now, two active panics coexist")
panic(2)
}()
panic(1)
}
```
Outputs:

now, two active panics coexist

panic 1 is recovered

panic 2 is recovered

那么,什么是使recover调用生效的主要规则是什么?
规则很简单

在一个goroutine中,如果recover调用的调用函数是F并且F调用的级别是L,则为了使recover调用生效,F调用必须是延迟调用,并且必须存在主动panic的水平为L-1。
相对来说、这是一个比go规格更好的描述、 现在你可以回页面检查为什么第一个例子中的第6个recover调用不会生效了

原文链接:http://www.tapirgames.com/blog/golang-panic-recover-mechanism

Go 边看边练 - 《Go 学习笔记》系列

leoliu 回复了问题 • 12 人关注 • 7 个回复 • 2124 次浏览 • 2016-10-24 10:00 • 来自相关话题

10.24 每日早报

astaxie 发表了文章 • 0 个评论 • 1473 次浏览 • 2016-10-24 08:15 • 来自相关话题

10.24 每日早报 新闻: 1.AT&T以股票加现金的形式收购时代华纳,收购总额854亿美元 2.美国DNS服务提供商Dyn遭受大规模DDoS攻击,导致诸多巨头网站停止服务 ...查看全部
10.24 每日早报

新闻:

1.AT&T以股票加现金的形式收购时代华纳,收购总额854亿美元

2.美国DNS服务提供商Dyn遭受大规模DDoS攻击,导致诸多巨头网站停止服务

3.IBM和日本证券公司SBI合作开发区块链债券交易系统

4.知识产权电商平台知呱呱宣布获得清华启迪战略投资,知识产权服务平台3.0上线

5.魅族将推出Flyme平板系统和TV 系统,以及线下用户课堂和线上直播培训等业务

6.优步与墨西哥最大网上银行Bankaool合作发行信用卡,以解决不发达地区网上交易问题

7.互联网影视公司奇树有鱼获中南文化1050万元投资占股3%

资源:

2016年中国跨境电商邮件营销市场报告
http://www.webpowerchina.com/knowledge/page.php?id=486

中国互联网汽车电商产业生态图谱2016
http://www.analysys.cn/view/report/detail.html?columnId=8&articleId=1000323

注:上述内容来源于互联网,由EGO整理

高可用架构·Learning as we Go(第5期)

itfanr 发表了文章 • 1 个评论 • 1450 次浏览 • 2016-10-22 15:04 • 来自相关话题

http://www.epubit.com.cn/book/details/4627 免费电子书
http://www.epubit.com.cn/book/details/4627

免费电子书

[转]Go 边看边练 -《Go 学习笔记》系列(一)

itfanr 发表了文章 • 2 个评论 • 1184 次浏览 • 2016-10-22 10:25 • 来自相关话题

https://hacpai.com/article/1437497122181 以下是目录: - Go 边看边练 -《Go 学习笔记》系列(一)- 变量、常量 - Go 边看边练 -《Go 学习 ...查看全部
https://hacpai.com/article/1437497122181

以下是目录:

- Go 边看边练 -《Go 学习笔记》系列(一)- 变量、常量
- Go 边看边练 -《Go 学习笔记》系列(二)- 类型、字符串
- Go 边看边练 -《Go 学习笔记》系列(三)- 指针
- Go 边看边练 -《Go 学习笔记》系列(四)- 控制流 1
- Go 边看边练 -《Go 学习笔记》系列(五)- 控制流 2
- Go 边看边练 -《Go 学习笔记》系列(六)- 函数
- Go 边看边练 -《Go 学习笔记》系列(七)- 错误处理
- Go 边看边练 -《Go 学习笔记》系列(八)- 数组、切片
- Go 边看边练 -《Go 学习笔记》系列(九)- Map、结构体
- Go 边看边练 -《Go 学习笔记》系列(十)- 方法
- Go 边看边练 -《Go 学习笔记》系列(十一)- 表达式
- Go 边看边练 -《Go 学习笔记》系列(十二)- 接口
- Go 边看边练 -《Go 学习笔记》系列(十三)- Goroutine
- Go 边看边练 -《Go 学习笔记》系列(十四)- Channel

beego log中增加request id的一种方式

edwinxie 发表了文章 • 7 个评论 • 4357 次浏览 • 2016-10-22 10:25 • 来自相关话题

有时候要在生产环境中追查问题,每个请求有一个唯一的request id对于定位问题十分有帮助。下面介绍一种非常简单的方式。 1. 继承beego.Controller,重写其Prepare方法,在其中生成request id并写入到当 ...查看全部
有时候要在生产环境中追查问题,每个请求有一个唯一的request id对于定位问题十分有帮助。下面介绍一种非常简单的方式。

1. 继承beego.Controller,重写其Prepare方法,在其中生成request id并写入到当前上下文的数据存储结构体中:
```go
requestId := uuid.NewV4().String()
this.Ctx.Input.SetData("requestId", requestId)
```
2. 其他地方使用request Id
```go
rid := this.Ctx.Input.GetData("requestId").(string)
beego.Info("profile request, request ID:", rid)
```

10.22 每日早报

astaxie 发表了文章 • 0 个评论 • 1485 次浏览 • 2016-10-22 10:13 • 来自相关话题

10.22 每日早报 新闻: 1.EMS与腾讯达成战略合作,用互联网+与社交赋能传统快递业 2.Docker借阿里云落地中国,后者获得Docker Engine商用版及Docker ...查看全部
10.22 每日早报

新闻:

1.EMS与腾讯达成战略合作,用互联网+与社交赋能传统快递业

2.Docker借阿里云落地中国,后者获得Docker Engine商用版及Docker DataCenter运营权

3.暴风正式推出语音聊天功能暴风语音Blizzard Voice,支持旗下所有游戏

4.沃尔玛战略投资新达达5千万美元,共同打造生鲜商超O2O零售模式

5.NBC环球将数字出版商BuzzFeed追加2亿美元投资,后者最新估值17亿美元

6.团贷网宣布获得3.75亿元C轮融资,品牌升级要做小型“陆金所”

7.工商总局公告有不法分子假借办理预付卡或预付消费的名义从事非法集资

资源:

从全球市值BIG5公司看未来科技发展趋势
http://www.aliresearch.com/blog/article/detail/id/21112.html

注:上述内容来源于互联网,由EGO整理

go大会资源汇总

itfanr 发表了文章 • 0 个评论 • 1743 次浏览 • 2016-10-22 10:00 • 来自相关话题

http://airjd.com/u/gopher (PPT) http://www.imooc.com/learn/407 (Gopher China 2015 上海大会视频) https://github ...查看全部
http://airjd.com/u/gopher (PPT)

http://www.imooc.com/learn/407 (Gopher China 2015 上海大会视频)

https://github.com/gopher-beijing/talks (gopher北京技术交流 PPT )

https://github.com/gopherchina/meetup/tree/master/Beijing/20160924

待补充。。。

2015-Gopher China 2015 上海大会

wwdyy 发表了文章 • 0 个评论 • 1448 次浏览 • 2016-10-21 17:40 • 来自相关话题

这是去年的开发者大会视频 视频地址:http://www.imooc.com/learn/407 有很多大牛在此演讲,演讲的题目也是目前go语言应用最广泛的地方 比如: 七牛如何做 ...查看全部
这是去年的开发者大会视频
视频地址:http://www.imooc.com/learn/407

有很多大牛在此演讲,演讲的题目也是目前go语言应用最广泛的地方

比如:
七牛如何做HTTP服务测试

Go 在分布式系统开发中的应用

使用 Docker 构建企业持续集成服务


---------------------------

我觉得这里面最有意思的是:
### 用golang写一个操作系统
视频地址:http://www.imooc.com/video/7939

演讲者很逗的,他是李四保,可以在知乎搜索他,他以前是c++程序员,写着写着掉头发了,后来碰见了golang,写着写着头发又长出来了。。。

16.10.21Docker最新动态 VMware举白旗:vSphere、vRealize、VSAN都将支持Docker

wwdyy 发表了文章 • 0 个评论 • 1554 次浏览 • 2016-10-21 12:55 • 来自相关话题

本周在巴塞罗那举行的VMworld大会上,容器成为热点话题,VMware在自己的计算、存储和管理产品组合中(vSphere、VSAN和vRealize)中支持容器用于生产环境。 VMware似乎正在采取EMC的颠覆性技术方法:证明EM ...查看全部
本周在巴塞罗那举行的VMworld大会上,容器成为热点话题,VMware在自己的计算、存储和管理产品组合中(vSphere、VSAN和vRealize)中支持容器用于生产环境。

VMware似乎正在采取EMC的颠覆性技术方法:证明EMC是全闪存阵列和超融合基础设施一体机的早期采用者。因此,VMware知道vSphere这块蛋糕要被软件初创厂商夺走,但并不排斥容器而是提供支持。

下面就让我们分别来看看vSphere 6.5、VSAN 6.5和vRealize Automation 7.2。

# vSphere 6.5

- vCenter Server Appliance让客户简化了打补丁、升级、备份和恢复,获得高可用性,vCenter Server环境的规模和性能增加了2倍。

- REST API用于控制虚拟基础设施以及实现自动化

- 基于HTML5的vSphere Client简化了管理员的体验

- 虚拟机级的加密,确保静态数据以及vMotion虚拟机的安全

- Secure Boot帮助防止图像篡改,防止将未经授权的组件加载到vSphere环境中

- vSphere Integrated Containers为应用团队提供了一个兼容Docker的接口,能够让vSphere运行容器而不用重新架构他们现有的基础设施

VMware还宣布vSphere Virtual Volumes 2.0增加了对阵列复制和业务关键应用——例如Oracle Database with Real Application Cluster——的原生支持。

# Virtual SAN 6.5

VSAN 6.5新增了5个功能特性,使其成为物理存储阵列更好的替代选择:

- 支持iSCSI,这样VSAN就可以作为针对外部物理工作负载的iSCSI目标,包括集群应用,例如在有限数量的物理服务器上进行SQL Server with Failover Clustering

- 永久数据层,通过vSphere Integrated Container针对容器化的应用

- 双节点Direct Connect,避免了ROBO站点不同VSAN系统之间对路由器和交换机的需求,帮助客户降低成本达15%-20%/站点。

- REST API和Expanded PowerCLI面向企业级自动化和类似云的灵活性,以及对VSAN环境的管理

- 支持512字节的模拟(512e)磁盘驱动器和SSD,可支持高容量驱动器,推进全闪存的超融合基础设施理念。

全闪存超融合基础设施一体机这个想法是诱人的,意味着相比基于磁盘的超融合基础设施一体机性能要提升2-5倍甚至更多。

VSAN还通过了一项认证计划。该计划最初是专注于文件服务和数据保护产品,向客户确保这些产品可以恰当地部署、运行和与VSAN实现互操作性,文件服务产品将来自于Dell EMC、NetApp和Nexenta。数据保护方面的合作伙伴则包括CommVault、Dell EMC、Veeam和Veritas。

随着时间的推移,VMware将会把更多合作伙伴的产品带入自己的VSAN生态系统。

# vRealize Automation 7.2

vRealize Automation 7.2将引入对微软Azure的开箱即用支持,目前主要是对AWS和vCloud Air的支持。此外该产品还将增加容器管理能力,及以下功能:

- Admiral,一个可扩展的、轻量级的容器管理menu,用于部署和管理容器到Docker主机

- 开发者们可以通过vRealiza Automation 7.2服务目录配置容器主机,使用统一服务蓝图或者Docker Compose给容器化的应用做建模

- 应用团队可以搭建混合式的虚拟机和容器部署

- 云管理员可以管理容器主机,并监管使用情况,包括容量配额或者审批工作流

- vRealize Log Insight 4.0将采用高级警报管理功能,和重新设计的、易于使用的界面

- vRealize Operations 6.4有更好的警报管理和度量分组,以及针对特定用户角色定制设计的新仪表板,覆盖基础设施、应用和云团队

- vRealize Log Insight 4.0和vRealize Operation 6.4将集成vSphere 6.5,以及更广泛的vRealize产品组合。

目前VMware正在测试Admiral,在VMware vSphere Integrated Containers的虚拟容器主机上部署和管理容器,并称“vRealize Automation 7.2很适合那些要求支持现有应用、同时通过采用微服务和云原生架构实现应用现代化的企业机构”。

# vCloud Air

VMware正在面向企业推出vCloud Air灾难恢复产品的测试版。

VMware表示,该产品提供了对专有云环境的安全和隔离,结合了直接集成到vSphere中的复制产品的简化性,以及针对SD-WAN技术进行了优化。

VMware还推出了测试版的VMware Cloud Foundation Service on vCloud Air,可以在完全集成的VMware服务产品使用vSphere、VSAN和NSX。

# 定价和供货

VSAN标准版将在这个季度获得基础的全闪存配置支持。

VMware vRealize Automation 7.2、vRealize Log Insight 4.0和Operations 6.4、Virtual SAN 6.5、vSphere 6.5以及vSphere Virtual Volumes 2.0都预计在今年年底供货。

vSphere 6.5的VMware vSphere Integrated Containers新功能(也在vSphere 6上支持)将面向vSphere Enterprise Plus版本的客户免费提供。vSphere的起价为每CPU 995美元。

Virtual SAN的起价为每CPU 2495美元。用于台式机的Virtual SAN起价为每个用户50美元。Virtual SAN标准本现在包含对全闪存硬件的支持。

RobotGo v0.10.0,Golang 跨平台 GUI 自动化系统,支持bitmap

veni 发表了文章 • 0 个评论 • 1305 次浏览 • 2016-10-21 12:37 • 来自相关话题

RobotGo v0.10.0 发布了。v0.10.0 是针对RobotGo优化完善的版本,用于类似于GUI自动化等场景(模拟鼠标键盘和控制bitmap以及屏幕)。 主要变更: - 增加主要的bitmap操作 ...查看全部
RobotGo v0.10.0 发布了。v0.10.0 是针对RobotGo优化完善的版本,用于类似于GUI自动化等场景(模拟鼠标键盘和控制bitmap以及屏幕)。

主要变更:

- 增加主要的bitmap操作支持
- 更新屏幕方法,增加直接返回bitmap方法
- 更新测试
- 优化内存释放
- 更新文档
- 更新C方法命名

修复BUG:

- 修复输入法导致的空指针bug.
- 修复Mac ScreenCapture模糊问题
- 修复mouse类型冲突bug


安装:
```GO
go get github.com/go-vgo/robotgo
```

项目地址:

https://github.com/go-vgo/robotgo