二分查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func main() {
arr := []int{0, 1, 2, 3, 4, 5, 6}
fmt.Println(BinarySearch(arr, 5))
}
func BinarySearch(s []int, k int) int {
lo, hi := 0, len(s)-1
for lo <= hi {
m := (lo + hi) >> 1
if s[m] < k {
lo = m + 1
} else if s[m] > k {
hi = m - 1
} else {
return m
}
}
return -1
}

阅读全文

自动化部署shell脚本

script
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash
# quick start: aicloud server

# rns008 popular env
# go
# export GOROOT=/usr/lib/go
# export GOPATH=/home/iot/aicloud_dev
# export PATH="$GOROOT/bin:$GOPATH/bin:$PATH"

# beego
# export ProPort=8000
# export RunMode=prod

# database
# export dbhost=
# export dbuser=
# export dbname=
# export dbpassword=

# nlu
# export PROJECTPATH=$GOPATH/src/aicloud
# export RNS_ENTITY_HOME=/home/iot/Entity/
# export PATH="$PROJECTPATH:$PROJECTPATH/nlu/w2v/corpus/trunk:$PATH"

# flag
# export MQTT_FLAG=false
# export MONITOR_FLAG=true

# xunfei
# export LD_LIBRARY_PATH=/home/iot/xunfei_voice/libs/x64
# export PATH="/home/iot/xunfei_voice/bin:$PATH"

# specail
# export Localhost=

# you can input project path
project_dir=$1
[ -z $project_dir ] && project_dir=$PWD
[ -d $project_dir ] || project_dir=$PWD

# Step 1
# git pull current branch
branch=$(git rev-parse --abbrev-ref HEAD)
git pull --quiet origin $branch 1>/dev/null || $(echo "git pull failed" >&2 && exit 1)

# Step 2
# build server exec file
basename=aicloud-build
exec_file=$(mktemp /tmp/$basename.$$.XXXXXXXXXX)
go build -o $exec_file $project_dir/main.go 1>/dev/null || $(echo "build aicloud failed" >&2 && exit 1)

# Step 3
# kill aicloud progress
pids=$(ps -ef | grep $basename | grep -v grep | awk '{print $2}')
[ ! -z "$pids" ] && kill -9 $pids || echo "kill aicloud progress failed"

# Step 4
# run server exec file
error_log_file=$project_dir/error.log
nohup $exec_file 1>/dev/null 2>>$error_log_file &
if [ $? == "0" ]; then
echo -e "aicloud is running\nPID: $!"
else
echo "start aicloud failed" >&2
exit 1
fi

# Step 5
# test server base api
basename="aicloud-$server_name-test"
test_file=$(mktemp /tmp/$basename.XXXXXXXXXX)
go test -v -o $test_file aicloud/test -timeout 30s

exit

阅读全文

var 和 init 的执行顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import "fmt"

var a = test()

func init() {
fmt.Println("init 执行了")
}

func test() int {
fmt.Println("var 执行了")
return 0
}

func main() {}

阅读全文

英文缩写

  • IPC = Inter-Process Communication = 内部进程通信
  • IPCS = Inter-Process Communication Service = 内部进程通信服务
  • LAN = Local Area Network = 局域网

阅读全文

内存和硬盘

内存是通过电信号来保存数据的。而磁盘是通过磁效应来保存的。

获取电信号比获取磁信号快很多。

阅读全文

goland使用指南-5故障排除

1、goland打开后,总是显示Scaning files to index... 导致代码没有提示,测试函数无法执行

这个是在加载项目,项目比较大或则计算机处理能力此时比较差,真的需要等待。

2、为什么有些时候打开项目无法看到项目下的文件夹

阅读全文

goland使用指南-4快捷键

文件相关快捷键:

CTRL+E,打开最近浏览过的文件。

CTRL+SHIFT+E,打开最近更改的文件。

CTRL+N,可以快速打开struct结构体。

CTRL+SHIFT+N,可以快速打开文件。

阅读全文

goland使用指南-3常用设置

1.Ctrl+s后自动格式化代码

File –> Settings Tools –> File Watchers –> + –> go fmt

阅读全文

goland使用指南-2安装

下载

Windows下载地址:https://download.jetbrains.com/go/goland-2018.2.1.exe

阅读全文

goland使用指南-1介绍

GoLand 是 JetBrains 公司推出的 Go 语言集成开发环境。

Goland官方地址:http://www.jetbrains.com/go/

阅读全文