Golang-Maps有序化遍历

Go的map元素遍历顺序(使用range关键字)是随机的,而不是遵循元素的添加顺序,为解决这一问题,可使用下面的遍历方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
"fmt"
"sort"
)

func main() {
map1 := map[int]string{
0: "java",
1: "golang",
2: "python",
}

var keys []int
for key := range map1 {
keys = append(keys, name)
}
sort.Ints(keys)
for _, key := range keys {
fmt.Printf("%s\t%d\n", key, map1[key])
}
}

可以看到,其关键思路就是先把所有Key拿出来排序,再按照排序后的进行遍历,主要用到了sort包的东西

关于sort还有些更个性化的用法,再看下面一个例子:

Linux查找指定文件并批量删除

在本地的Maven仓库中由于网络原因产生了很多*.lastUpdated文件,需要将其批量删除。

1
find . -name "*.lastUpdated" -type f -exec rm -vrf {} \;

Golang-modules包管理

golang原始的包管理方式非常low,相当low,终于在go version 1.1.1之后,官方推出了模块概念,但是目前该功能还在试验阶段,有些地方还需要不断的进行完善。在官方正式宣布之前,打算不断修正这种支持。到时候就可以移除对GOPATHgo get命令的支持。

初始化

目前modules机制仍在早期阶段,golang提供了一个环境变量“GO111MODULE”,默认值为auto

auto 如果当前目录里有go.mod文件,就使用go modules,否则使用旧的GOPATH和vendor机制
on 如果你想直接使用modules而不需要从GOPATH过度,那么需要设置为on

modules和传统的GOPATH不同,不需要包含例如src,bin这样的子目录,一个源代码目录甚至是空目录都可以作为module,只要其中包含有go.mod文件。

Golang-全平台交叉编译

Golang的交叉编译要保证golang版本在1.5以上,我的环境是go1.11.5 darwin/amd64

交叉编译

1
2
3
4
5
6
7
8
9
10
11
# mac上编译linux和windows二进制
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

# linux上编译mac和windows二进制
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

# windows上编译mac和linux二进制
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go

Golang-遍历二叉树实现

二叉树的几种遍历方式

1)先序遍历

1)访问根节点;2)采用先序递归遍历左子树;3)采用先序递归遍历右子树;

image.png
(注:每个节点的分支都遵循上述的访问顺序,体现“递归调用”)

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×