golang学习笔记
go语言学习心得,记录。
gerrylon007
这个作者很懒,什么都没留下…
展开
-
golang 1.22特性之for loop
go1.22版本对于for循环中的每个循环变量, 每轮循环都是都是使用新的变量.原创 2024-07-02 18:43:27 · 468 阅读 · 0 评论 -
golang之channel学习总结
概述本篇目的是对go中的channel做一个总结。主要参考https://www.jianshu.com/p/76acce09da09环境$ uname -aLinux gl.com 5.4.50-amd64-desktop #74 SMP Mon Aug 24 20:15:37 CST 2020 x86_64 GNU/Linux$ go versiongo version go1.15.2 linux/amd64channel的用途主要用于goroutine之间通信channel的原创 2020-10-21 22:30:05 · 898 阅读 · 0 评论 -
golang之interface学习总结
概述本篇目的是对go中的interface做一个总结。主要参考https://qcrao91.gitbook.io/go/interface,环境说明$ uname -aLinux gl.com 5.4.50-amd64-desktop #74 SMP Mon Aug 24 20:15:37 CST 2020 x86_64 GNU/Linux$ go versiongo version go1.15.2 linux/amd64一个例子func basic() { var i inte原创 2020-10-21 10:45:20 · 488 阅读 · 2 评论 -
golang执行系统命令,并不断获取输出
使用exec.Command执行后, 可以等命令执行结束后, 一次性获取所有输出.也可以在命令执行的同时, "实时地"获取其输出.下边的代码演示了两种获取输出的方式.由于是在windows上执行, 引入了golang.org/x/text/encoding/simplifiedchinese来解决乱码问题(不得不说中国的程序员真的累, 学啥编程语言都要解决这种问题).package mai...原创 2019-07-27 10:01:17 · 5347 阅读 · 0 评论 -
gops尝鲜
定义gops官方对其定义为:A tool to list and diagnose Go processes currently running on your system安装gerrylon@kali:~$ go get -u github.com/google/gops...省略安装细节# 如果你的PATH环境变量包含了GOBIN, 就可以直接调gops命令了gerrylon@kali:~$ gops5033 4417 gops go1.14.4 /home/gerrylon原创 2020-09-13 11:12:26 · 466 阅读 · 0 评论 -
正则表达式命名分组的实际应用一例
在前面的文件golang正则之命名分组中介绍了如何在go语言中使用正则命名分组。最近的工作中也用到了这个知识点, 结合实际例子, 看看如何使用它。问题描述简单来说, 就是对几种路由器的ping的结果提取。以Cisco的某型号的ping结果为例子来看下:cisco设备 ping结果成功时:Success rate is 100 percent (1000/1000), round-trip min/avg/max = 1/1/4 ms失败时Success rate is 0 percent原创 2020-09-12 09:16:58 · 550 阅读 · 0 评论 -
golang之unsafe包
环境go version go1.14.4 linux/amd64go语言中指针类型的限制要说unsafe.Pointer, 不得不说这个话题.学过c语言的同学都知道, p++, p--, p1 == p2这种代码在c语言太过常见.但是go中的指针有很多的限制:不能进行数学运算i := 3p := &ip++ // Invalid operation: p++ (non-numeric type *int) p = &i + 5 // Invalid operation:原创 2020-07-26 16:05:08 · 1153 阅读 · 0 评论 -
golang之两个结构体复制字段
实际工作中可能会有这样的场景:两个结构体(可能类型一样), 字段名和类型都一样, 想复制一个结构体的全部或者其中某几个字段的值到另一个(即merge操作),自然想到可以用反射实现.package mainimport "fmt"import "reflect"// 用b的所有字段覆盖a的// 如果fields不为空, 表示用b的特定字段覆盖a的// a应该为结构体指针func...原创 2020-02-11 14:31:52 · 9106 阅读 · 5 评论 -
ldap之move操作
最近疫情严重, 从2019.01.22号从深圳回到老家后再没出过门.今天是2020.02.09, 本来明天的机票, 老家的路封了, 就把机票退了.在每天关注疫情的同时, 也会看各种揭示人心, 批评这个, 赞扬那个, 一会CTM, 一会了不起.在科技发达的今天, 人类依然会因为各种困难而生活艰苦, 甚至付出生命.可以说, 人类在自然面前是非常渺小的, 我们一定要敬畏自然, 和大自然和谐相处,...原创 2020-02-09 09:59:32 · 624 阅读 · 0 评论 -
golang template使用变量
go语言中template API中变量的使用:package mainimport ( "html/template" "os")type ST struct { Status []StatusST}type StatusST struct { Status string `json:"status"` Num int `json:"sum"`}fu...原创 2019-11-08 18:03:58 · 6038 阅读 · 0 评论 -
golang之pprof
测试环境: go version go1.11.2 windows/amd64go语言中自带pprof包来做代码性能的监控, 不过本篇说的不是自带的pprof怎么用, 而是一个第三方的包: github.com/pkg/profile.话不多说, 实际使用下看看效果.假如写了一个main.go, 内容如下(内容无实际意义, 仅测试用):package mainimport ( "fm...原创 2019-02-27 09:16:56 · 465 阅读 · 0 评论 -
golang之heap学习
测试环境go version go1.11.2 windows/amd64概述heap, 即堆, 是一种用数组实现的完全二叉树.堆有大根堆和小根堆, 分别是说: 对应的二叉树的树根结点的键值是所有堆节点键值中最大/小者。为了方便叙述, 以小根堆为例说下概念.堆常见的实现方法: 在数组(arr)中存储若干个元素, 如果数组第一个元素为哨兵(如果是小根堆, 则arr[0]为可以放...原创 2019-02-11 23:46:01 · 4252 阅读 · 0 评论 -
golang之list与LRU
测试环境:go version go1.11.2 windows/amd64list是go语言自带的双循环链表实现.源码位置: $GOPATH/src/container/list/list.go其中两个核心数据结构:一个是节点的定义:// 节点的定义type Element struct { next, prev *Element // 后继, 前驱指针 list *Lis...原创 2019-02-11 21:08:41 · 530 阅读 · 0 评论 -
golang读取文件总结
使用go语言读取文件和各种方式整理。一次性加载到内存中// * 整个文件读到内存,适用于文件较小的情况func readAllIntoMemory(filename string) (content []byte, err error) { fp, err := os.Open(filename) // 获取文件指针 if err != nil { return nil, err ...原创 2019-01-23 16:21:13 · 4137 阅读 · 5 评论 -
golang执行系统命令
代码测试环境:Centos 6.10 64位go version: go1.11概述执行系统命令对程序而言是一个重要的操作,因为有时我们需要调用系统中现有的命令来完成任务, 比如调用ffmpeg来对视频裁剪, 转码等.像常见的, PHP中的system()函数, C语言中的system()函数、exec函数族等,Nodejs中的child_process.exec()方法…, 这些在...原创 2019-01-22 17:50:03 · 15937 阅读 · 0 评论 -
区间合并问题(merge-intervals)
这是leetcode上的一道题目,原题目表述如下:给定一组区间,合并所有有重叠的区间.例子1:Input: [[1,3],[2,6],[8,10],[15,18]]Output: [[1,6],[8,10],[15,18]]解释: 由于[1,3] 和 [2,6] 有重叠区域, 合并为 [1,6].例子2:Input: [[1,4],[4,5]]Output: [[1,5]]解释...原创 2018-10-31 22:41:19 · 8565 阅读 · 1 评论 -
golang之排序使用
golang标准库实现了许多常用的排序方法,比如对整数序列排序:sort.Ints(),那么如果对自定义的数据结构排序怎么做呢?比如对一个用户列表,按他们的积分排序:首先定义数据结构,为了能清楚说明问题,只给两个字段。type User struct { Name string Score int}type Users []Usergolang中想要自定义排序,自己的结构要...原创 2018-10-31 20:30:01 · 2279 阅读 · 2 评论 -
golang之defer理解
defer调用是一个栈结构defer会在函数退出前执行,而且满足后进先出,类似栈.直接调用deferCommon会输出:9,8,…,0, done.func deferCommon() { for i := 0; i < 10; i++ { defer fmt.Println(i) } fmt.Println("done")}defer的作用域是一个函数,不是一个语句块...原创 2018-10-29 20:57:31 · 2775 阅读 · 0 评论 -
go test打印无输出
有一个测试文件: cat utils/utils_test.gopackage utilsimport ( "fmt" "testing")func TestGetProjAbsPath(t *testing.T) { projPath := GetProjAbsPath("github.com", "GerryLon&a翻译 2018-10-29 10:45:31 · 27036 阅读 · 2 评论 -
golang并发求和
使用golang并发求和,作为对golang并发的一个练习.为了验证结果的正确性,要给出最传统的版本:func sum1(data []int) int { s := 0 l := len(data) for i := 0; i < l; i++ { s += data[i] } return s}第二种方法,使用N个goroutine, 然后将N个分段的各写入N个...原创 2018-10-24 11:27:02 · 3166 阅读 · 1 评论 -
golang之map并发访问
golang中的map不是并发安全的,并发对map读写可能会有问题,如:// N太小时不会(比如10),因机器而异// fatal error: concurrent map read and map writefunc mapDemo1() { m := make(map[string]int) go func() { for i := 0; i < N; i++ { ...原创 2018-10-23 23:00:34 · 7037 阅读 · 3 评论 -
golang判断系统是大端还是小端存储
在看goim源代码时看到这样一段代码:func IsLittleEndian() bool { var i int32 = 0x01020304 u := unsafe.Pointer(&i) pb := (*byte)(u) b := *pb return (b == 0x04)}这段代码是为了判断系统是大端存储还是小端存储。如何区分大端存储还是小端存储?以0x01...原创 2018-10-23 11:24:34 · 3450 阅读 · 0 评论 -
golang之jsonrpc
rpc, 个人理解就是调用不在一个机器上的方法。jsonrpc就是调用过程中使用json格式的数据通信。golang对jsonrpc有相应的标准库支持,记录一下如何使用。代码结构测试代码结构(请根据自己实际目录调整):[root@gl jsonrpc]# tree.├── client│ └── client.go├── main.go└── server ├── ...原创 2018-10-22 18:24:39 · 4020 阅读 · 7 评论 -
golang判断平台是32位还是64位
在看go语言圣经时,文中提到可以利用下面的表达式获取系统是32位还是64位的.bit := 32 << (^uint(0) >> 63)开始看到这式子, 感觉很奇怪, 后面自己找了些资料, 搞明白了.首先是^uint(0), uint类型并不是一个固定长度的类型,^uint(0)在32位系统上返回的是0XFFFFFFFF, 也就是2322^{32}232, 在6...原创 2018-10-09 17:30:01 · 4608 阅读 · 1 评论 -
golang利用反射设置结构体变量的值
如果需要动态设置struct变量field的情况下, 可以利用reflect来完成.代码如下:package mainimport ( "fmt" "reflect")// 定义结构体Persontype Person struct { Name string Age int}func main() { pe原创 2018-10-08 12:58:45 · 5794 阅读 · 0 评论 -
golang正则之命名分组
正则中有分组这个功能,在golang中也可以使用命名分组。一次匹配的情况场景还原如下: 有一行文本,格式为:姓名 年龄 邮箱地址 请将其转换为一个map代码实现如下:str := `Alice 20 alice@gmail.com`// 使用命名分组,显得更清晰re := regexp.MustCompile(`(?P<name>[a-zA-Z...原创 2018-09-08 20:41:53 · 11584 阅读 · 0 评论 -
golang简单爬虫示例
golang最简单的爬虫示例,爬取笔者的博客列表第一页面的数据。 仅为入门练习示例。代码如下:package mainimport ( "encoding/json" "io/ioutil" "log" "net/http" "os" "regexp" "strconv" "stri原创 2018-08-26 22:09:43 · 1440 阅读 · 0 评论 -
golang正则使用总结
正则表达式的语法可以说基本和编程语言无关,大同小异,不过就是调用的方法不同而已。 以一个案例总结下golang的正则常用方法。注: * 下面的regObj指regexp.Compile后的值,可理解为正则实例 *regexp.MatchString (测试是否匹配,类似js的regObj.test(str)方法)sourceStr := `my email is gerrylon@1...原创 2018-08-25 09:29:10 · 7714 阅读 · 1 评论 -
golang中的close函数
close函数是用于关闭通道的。 官方解释(摘自close函数源代码注释): The close built-in function closes a channel, which must be either bidirectional or send-only. It should be executed only by the sender, never the rec...原创 2018-08-19 22:18:53 · 10488 阅读 · 2 评论 -
golang中函数数组使用
今天(2018-08-04)在学习cache2go时发现其回调只是一个函数, 而不是一个队列, 所以想写一个函数队列(其实就是一组函数), 简单实现如下:package main import ( &amp;quot;fmt&amp;quot; ) // 简单echo函数生成器, 生成的函数可打印任意值func makeEchoFunc(echoWhat interface{}) func(){ ...原创 2018-08-04 23:20:11 · 6703 阅读 · 0 评论 -
golang之grpc入门
环境go版本要求: go 1.6及以上C:\> go versiongo version go1.12 windows/amd64设置goproxy及go mod开启(win cmd)set GOPROXY=https://goproxy.ioset GO111MODULE=on安装protoc编译工具(protobuf转成相应语言代码的工具)下载: http...原创 2019-09-17 09:08:34 · 598 阅读 · 0 评论