go
Venvis
后端&&全栈工程师
展开
-
go map排序执行封装
通过一个简单的案例给展示处理,其中map类型可以根据需要自行调整,原本想封装的通用所有类型,考虑类型断言性能问题,感觉还是分开封装好些。众所周知,go的map是无序的,我们在遍历map的时候经常会出现各种问题,现在封装一个函数,用于排序后遍历使用。......原创 2022-07-29 17:53:56 · 297 阅读 · 0 评论 -
go-package作用域细节
go中package包细节原创 2022-07-04 16:04:38 · 277 阅读 · 0 评论 -
redis开启多实例配置
redis安装这里就不说了,网上教程很多,自行下载,这里主要给大家看下多实例案例1.拷贝一份redis配置文件到新的文件目录cp -r redis-6379 redis-6377不知是否会有疑问,一开始我也在想,这样会不会占用文件很大,后面验证多个版本,其实配置文件目录总共就4k,所以无需担心2.修改redis-6377目录下的redis.conf文件以下参数pidfile /var/run/redis_6377.pid #pid文件名port 6377 #调整启动端口logfile "原创 2022-04-22 10:48:13 · 942 阅读 · 0 评论 -
go 内存泄漏查找
前言内存泄漏是我们在生产环境中必须面临的问题,现在我们来讲解一下go内存泄漏查找方式-runtime/trace包通过代码快速学习怎么使用1.使用runtime/trace包放在mian函数里package mainimport ( "os" "runtime/trace")func main() { f, _ := os.Create("trace.out") defer f.Close() trace.Start(f) defer trace.Stop()}原创 2022-04-20 11:56:36 · 1486 阅读 · 0 评论 -
go syncmap使用案例&&并发优势
前言平时我们使用map是非线程安全的,这时候我们会想到go官方的sync.map ,今天介绍一下sync.map优势以及通过一个案例来快速入门sync.map先通过一个案例来入门代码:package mainimport ( "fmt" "sync")// 原子操作mapfunc main() { var a sync.Map a.Store("key1",1111) fmt.Println(a.Load("key1")) a.Delete("key1")}优势1.传原创 2022-04-20 11:41:59 · 160 阅读 · 0 评论 -
go 主线程n秒后通知goroutine退出案例
案例:package mainimport ( "fmt" "time")func main() { ch:=make(chan int) fmt.Println(time.Now().Format("2006 01 02 15 4 05")) go Hello(ch) time.Sleep(time.Second*3) close(ch) fmt.Println(time.Now().Format("2006 01 02 15 4 05"))}func Hello(ch原创 2022-04-20 11:20:10 · 207 阅读 · 0 评论 -
go 解决并发下map资源竞争问题
go并发下解决map资源竞争问题的两种方式原创 2022-04-20 11:02:24 · 534 阅读 · 0 评论 -
go 快速入门channel案例
不要通过共享内存来通信,而应该通过通信来共享内存从架构上来讲,降低共享内存的使用,本来就是解耦和的重要手段之一。既然能来到次,那大家应该都是goer,都应该听过go社区经典的一句话“不要通过共享内存来通信,而应该通过通信来共享内存”,于是channel就浮现在我们面前,现在通过一个简单的案例,来学习一下channel在go并发编程中的使用案例package mainimport ( "fmt")func main() { ch := make(chan int ,100) extCh原创 2022-04-19 11:11:39 · 251 阅读 · 0 评论 -
go 随机数生成
go 随机数生成原创 2022-04-15 17:29:29 · 785 阅读 · 0 评论 -
go 通过flag实现运行时带参数
前言:小编在学习一门语言的时候,经常喜欢自己动手搭建一个框架,一个完成的框架,肯定具备指定生产环境、测试环境、开发环境配置,当我们需要在运行go语言的时候指定环境变量,就需要用到flag这个包了。通过案例来快速学习:首先创建一个main.go 文件package mainimport ( "flag" "fmt")func main() { var env string flag.StringVar(&env,"env","","-env 后面的值") flag原创 2022-04-15 17:11:53 · 1067 阅读 · 0 评论 -
go 获取用户输入的两种方式
方式一代码:package mainimport ( "fmt")func main() { var name string var age int fmt.Println("请输入name:") fmt.Scanln(&name) fmt.Println("请输入age:") fmt.Scanln(&age) fmt.Printf("输入的name:%v,age:%v \n",name,age)}结果:方式二代码:package原创 2022-04-15 16:52:29 · 1786 阅读 · 0 评论 -
go defer执行顺序及注意细节
我们先通过一个实例简单的说明:package mainimport ( "fmt")func main() { a:=1 fmt.Printf("当前a的值为:%v \n",a) defer fmt.Printf("defer打印了a的值为: %v \n",a) defer fmt.Println("执行了defer输出") a=2 fmt.Printf("改变了a的值后打印为: %v \n",a)}运行结果如下:总结:1.defer 只会在当前函数和方原创 2022-04-15 16:26:45 · 257 阅读 · 0 评论 -
go跨平台编译
实际项目开发中,我们的开发环境可能是win、mac,甚至很多大佬用linux开发,我们有时候需要编译的目标可执行文件与我们的开发环境不符,可以通过设置以下三个参数来实现:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 当然我们不可能每次都敲这么长的命令,所以我们可以借助Makefile来帮忙我们快速编译各种版本,现在就带大家实战一个案例!1.首先我们在目录下创建一个main.go文件package mainimport "fmt"func main() {原创 2022-04-15 16:08:26 · 2653 阅读 · 0 评论 -
go获取文件名&&后缀
不废话,直接上代码哈:package mainimport ( "fmt" "path" "strings")func main() { filePath:="/data/www/aaa/bbb/name.html" // 文件路径 baseName:=path.Base(filePath) // 输出 name.html ext := path.Ext(baseName) // 输出 .html name := strings.TrimSuffix(baseNa原创 2022-04-15 15:48:09 · 2183 阅读 · 0 评论