0%

func Select(cases []SelectCase) (chosen int, recv Value, recvOK bool)

Args

  • cases []SelectCase 使用此参数之前要设置SelectCase,告诉Select目的。

Return

  • chosen int 返回选择的channel序号
  • recv Value 返回信道的值,类型是reflect.Value
  • recvOk bool 返回false,如果信道被关闭。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main
import (
"fmt"
"reflect"
)

func main(){
var n int = 1
var chs = make([]chan int, n)

var worker = func(n int, c chan int){
for i:=0;i<n;i++{
c<-i
}
close(c)
}

//不定数量的channel数组
for i:=0;i<n;i++{
chs[i]=make(chan int)
go worker(3+i, chs[i])
}


var selectCase = make([]reflect.SelectCase, n)
//将channel绑定到SelectCase
for i:=0;i<n;i++{
selectCase[i].Dir = reflect.SelectRecv //设置信道是接收,可以为下面值之一
/*
const (
SelectSend SelectDir // case Chan <- Send
SelectRecv // case <-Chan:
SelectDefault // default
)
*/
selectCase[i].Chan = reflect.ValueOf(chs[i])
}

numDone := 0
//从所有channel中取出最先到达的N个值
for numDone < n {
chosen, recv, recvOk := reflect.Select(selectCase)
if recvOk {
fmt.Println(chosen, recv.Int(), recvOk)
}else{
numDone++
}
}
}

最近入职公司需要用到OpenVPN连接工作网络,因为程序员都是懒惰的,所以折腾发现了一些技巧可以提高效率(其实是少点几下鼠标…),废话不多说,下面开始正题。

安装

这个没什么说的,官网地址下载安装即可,记得用管理员权限运行。
https://openvpn.net/index.php/open-source/downloads.html

运行

公司采用公钥认证,所以把公司给你的配置文件统统拷贝到 C:\Program Files\OpenVPN\config 目录下,其中包括证书,key,配置文件,如果有多个VPN网络记得改动文件名,然后也得修改OpenVPN配置文件中的文件名,这个网上有一大堆教程。
这时候你打开OpenVPN-GUI应该就可以连接到公司内网了。

免密码

公司的私钥使用了密码进行加密,所以连接时会提示输入密码,这个当然不能忍,首先新建一个key.txt,里面贴上你的密钥,然后打开你的OpenVPN配置文件,就是前面拷贝进config目录以.ovpn为后缀的文件,在最后添加一行askpass key.txt,保存重新打开客户端连接就不会提示输入密钥了。

同时使用多个连接

  • 安装完默认只有一个虚拟网卡,如果需要同时连接多个VPN需要添加多个TAP虚拟网卡,你想要多少个网络就要添加多少个网卡,进入TAP网络目录,默认是C:\Program Files\TAP-Windows,不一样的自己找到对应目录,打开cmd运行命令bin\tapinstall.exe install driver\OemVista.inf tap0901,最后的tap0901对应于driver目录下的文件名,不一致自行修改。最后打开系统网络连接看看是否有两个TAP虚拟网卡,有即操作成功了,然后可以重命名网卡名称,如TAP01,没有自己检查下是否权限问题。这时候就可以测试下多个网络连接了。
  • 修改VPN的配置文件,找到dev-node这一行,给每个网络分配好网卡,不能有冲突,如A.ovpn中为dev-node TAP01,B.ovpn中为dev-node TAP02

双击自动连接

打开OpenVPN快捷方式属性,在目标一栏最后加上--connect A.ovpn,可以指定多个配置文件同时拨号,如--connect A.ovpn --connect B.ovpn,注意和前面的路径有个空格,确定以后双击即可直接连接上两个VPN,如果还想开机启动的把快捷方式丢到启动目录吧。

初次接触Hexo,用Github免费托管,Markdown写作,程序员必备,以后就用来记录点点滴滴了。来个猫咪老师的萌照! :)

Cat