GoLang
文章平均质量分 63
go 语言 golang
abka
abka 阿布卡赫赫
展开
-
Win10/Win11 使用Wsl的Ubuntu 子系统搭建CGO环境,相当于Ubuntu下开发。GO环境CGO搭建,支持交叉编译
之前是使用Mac 开发,最近切换到win11下面。发现使用cgo编译有问题。下面记载了我的使用方法。环境:win11(win10理论一样)win10 安装了wsl2的环境,并且安装了ubuntu系统。在win11 上面安装了goland使用goland 访问wsl 中的ubuntu的环境。相当于在ubuntu下面进行go研发,编译。原创 2023-11-26 00:45:45 · 1109 阅读 · 0 评论 -
golang map 删除key后内存不会自动释放,内存泄漏问题
重置后,内存恢复120KB:101 after m = map[int]int{} 120 KB。如上所示,map的key删除后,还会占用空间,导致map的空间不断增加。针对map不会重新释放,重新创建新map可以解决,内存释放问题。全局map ,会有内存释放问题。原创 2022-10-12 11:56:24 · 3287 阅读 · 0 评论 -
golang 自定义error 坑 与 nil 比较坑
fmt.Println("mErr已赋值,errors.As(err, &pathError2), pathError2 == nil:", pathError2 == nil, ",asRet:", asRet)mErr已赋值,errors.As(err, &pathError2), pathError2 == nil: true ,asRet: false。开始以为 golang 自定义的error 类似父类概念,赋值给error 类型指针 ,指针== nil 判断一定是true。(这个就是遇到的坑)原创 2022-09-02 15:11:32 · 876 阅读 · 0 评论 -
练习:斐波纳契闭包
函数,它返回一个函数(闭包),该闭包返回一个。让我们用函数做些好玩的事情。原创 2022-08-24 14:44:51 · 278 阅读 · 0 评论 -
golang获取本周、上周 周一日期 (中国习惯 )
默认是 Sunday 开始到 Saturday 算 0,1,2,3,4,5,6 (欧美日历)time.Weekday类型可以做运算,强制转int,会得到偏差数。所以只有Monday减去Sunday的时候是正数,特殊处理下就好了。中国习惯是周一开始,周日结束, Monday to Sunday。计算周一,周日,下周一,周日代码。原创 2022-08-24 10:35:10 · 2873 阅读 · 0 评论 -
beego task
玩过 linux 的用户都知道有一个计划任务的工具 crontab,我们经常利用该工具来定时的做一些任务,但是有些时候我们的进程内也希望定时的来处理一些事情,例如定时的汇报当前进程的内存信息,goroutine 信息等。既然 beego 是基于这些模块构建的,那么它的执行逻辑是怎么样的呢?从上面的目录结构我们可以看出来 M(models 目录)、V(views 目录)和 C(controllers 目录)的结构,从上面的架构图可以看出task是相对独立的模块。加入全局的计划任务列表。原创 2022-08-24 09:55:49 · 318 阅读 · 0 评论 -
go struct 设置默认值
在 Golang 中,我们经常碰到要设置一个结构体的默认值,但 Golang 没有较好的方式实现这功能,需要通过其它方式实现,其效果也比较优雅。原创 2022-08-24 09:46:17 · 12172 阅读 · 0 评论 -
Golang 语言该用命名返回值吗?
使用命名返回值的“好处”是可以提升代码可读性,读者朋友们试想一下,当函数或方法有多个返回值时,尤其是函数体中代码比较长的函数或方法,如果我们使用普通返回值,那么我们想要知道返回值的含义,就需要先阅读函数体中完整代码。普通(匿名)返回值的“好处”是简洁,当我们写一些简短函数或方法时,使用普通返回值可以使代码更加简洁,在 Golang 语言官方标准库中,有很多使用普通返回值的函数或方法。还有就是在编写函数体代码比较长的函数时,使用普通返回值的代码,其可读性比不上使用命名返回值的代码。转载 2022-08-23 21:17:06 · 286 阅读 · 0 评论 -
golang 两个slice/map 求交集、并集,交集放在pair对象,方便后续处理
上面的工具用来计算两个slice的补集,交集测试代码:原创 2022-07-07 12:05:28 · 2121 阅读 · 0 评论 -
golang make new 区别
func make(t Type, size ...IntegerType) Typefunc new(Type) *Typemake 作用是初始化(非零值)内置的数据结构,被用来分配引用类型内存,也就是切片slice,哈希表map和channelnew的作用是根据传入类型分配一片内存空间并返回指向这片内存空间的指针,被用来分配除引用类型的所有其他类型的内存,内存置为0值(The new built-in function allocates memory. The first argument is原创 2022-06-16 11:22:32 · 248 阅读 · 0 评论 -
golang map 底层代码原理
go map 底层是hash表(hashmap),hmap结构go1.17.10.src/src/runtime/map.goNote: the format of the hmap is also encoded in cmd/compile/internal/reflectdata/reflect.go.go1.17.10.src/src/cmd/compile/internal/reflectdata/reflect.gooverflow := makefield("overflow",原创 2022-06-01 10:43:21 · 222 阅读 · 0 评论 -
Golang len 函数
go1.18.1/src/cmd/compile/internal/typecheck/universe.govar builtinFuncs = [...]struct { name string op ir.Op}{ {"append", ir.OAPPEND}, {"cap", ir.OCAP}, {"close", ir.OCLOSE}, {"complex", ir.OCOMPLEX}, {"copy", ir.OCOPY}, {"delete", ir.ODELET.原创 2022-05-31 11:11:47 · 996 阅读 · 0 评论 -
Dijkstra (1965) 信号量 demo使用 golang实现
Dijkstra (1965) 引入了信号量的概念 信号量是一个整数变量,可通过两个标准原子操作访问:等待(自旋锁,即停止阻塞并递减这些信号量)和信号量(即信号量计算它接收到的信号) 信号量是用于向进程发送共享资源状态信号的变量(信号量的值可以为 0,表示没有保存唤醒,或者如果有一个或多个唤醒处于未决状态,则为某个正值) 这是如何运作的? 如果资源不可用,则相应的信号量会阻塞任何等待该资源的进程 阻塞的进程被放入由信号量维护的进程队列中(避免忙等待!) 当进程释放资源时,它通过信号量发出信号原创 2022-05-20 10:49:38 · 263 阅读 · 0 评论 -
golang time.NewTimer ,time.After, time.NewTicker
常见问题:比如如下功能,实现goroutine 在2秒后退出。下面demo1package mainimport "time"func main() { go func() { ticker := time.NewTicker(time.Second + 1) for { select { case <-ticker.C: println("goroutine ticker") case <-time.After(2 * time...原创 2022-05-19 13:40:35 · 833 阅读 · 0 评论 -
Golang 比较slice是否包含某个值的,两个slice差值 工具类
工具类:GitHub - thoas/go-funk: A modern Go utility library which provides helpers (map, find, contains, filter, ...)doc indexdoc文档参考:funk package - github.com/thoas/go-funk - pkg.go.devIndex¶func All(objs ...interface{}) bool func AllPredicates(valu.原创 2022-05-07 11:06:19 · 806 阅读 · 0 评论 -
Go 语言学习笔记--Go介绍
Go简介和优缺点原创 2021-11-29 11:00:50 · 741 阅读 · 0 评论 -
Go语言学习 fmt包-是什么意思
fmt 包的含义是什么?开始学习go语言,就是fmt的包,这个包为啥叫fmt包呢?可以参考 go语言的文档。参考:fmt/doc.go (下面代码所示)go语言的fmt package ,实现了同C语言的printf,scanf类似formatted I/O 的functions。这个fomat 动词衍生于C语言,但是相比较更加简单。 Package fmt implements formatted I/O with functions analogous to C...原创 2021-12-13 11:02:57 · 1634 阅读 · 0 评论 -
Go 编程问题 package runtime/pprof is not in GOROOT
../../../go/pkg/mod/github.com/micro/go-micro@v1.16.0/server/rpc_server.go:8:2: package runtime/debug is not in GOROOT (/usr/local/opt/go@1.14/src/runtime/debug)../../../go/pkg/mod/github.com/micro/go-micro@v1.16.0/debug/profile/pprof/pprof.go:8:2: packa.原创 2021-12-03 10:30:11 · 1546 阅读 · 0 评论 -
Go 编程使用的一些框架、组件、名词
go modules 包管理使用 1.12 之后的 go module 方式管理代码路经,而不是 gopath 模式。gRPCprotocprotocol buffer的安装https://github.com/protocolbuffers/protobuf/releasesprotoc-gen-gogit clone https://github.com/golang/protobuf.gitcd protobufgit checkout v1.3.2cd protoc-..原创 2021-12-03 10:41:32 · 475 阅读 · 0 评论 -
GO学习笔记---Go Module详细使用教程 Vs GOPATH
Go ModulesGo 1.11 引入了新特性,一个新的依赖管理系统。Google 引入了 Go 模块作为GOPATH 的替代方案,用于版本控制和包分发。Go modules(这就是 Go 使用环境变量名称的原因GO111MODULE:表示使用 Go 1.11 模块)。模块是相关Go包的集合。modules是源代码交换和版本控制的单元。go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。原创 2021-12-01 16:22:31 · 801 阅读 · 0 评论 -
Go 语言学习笔记--基础语法、数据类型、语言变量、语言常量
第一个 Go 程序package main import "fmt"func main() { fmt.Println("Hello, World!");}要执行 Go 语言代码可以使用go run命令。执行以上代码输出:Hello, World!此外我们还可以使用go build命令来生成二进制文件:$ go build hello.go $ lshello hello.go$ ./hello Hello, World!...原创 2021-11-29 11:29:45 · 1285 阅读 · 0 评论