golang
_i_look_
默默无闻的前端开发从业者
展开
-
golang中切片的一些现象
package mainimport ( "fmt" "time")func main() { a := make([]int, 4, 5) a[0] = 1 a[1] = 2 a[2] = 3 fmt.Println(cap(a)) time.Sleep(time.Second) b := append(a, 4) fmt.Println(&b) fmt.Println(&a) fmt.Println(&b[0]) fmt.Println(&a原创 2021-10-07 22:08:12 · 126 阅读 · 0 评论 -
golang 使用 Redis 连接池
package cacheimport ( "3tee_admin/conf" "fmt" "time" "github.com/gomodule/redigo/redis" redigo "github.com/gomodule/redigo/redis")var redisPool *redis.Poolfunc init() { redisPool = PoolInitRedis(fmt.Sprintf("%v:%v", conf.Conf.Redis.Ip, conf.C原创 2021-09-28 19:49:12 · 513 阅读 · 0 评论 -
关于Golang里面的time.Time的零值
var t time.Time fmt.Println(t) fmt.Println(t.Unix()) fmt.Println(t.IsZero())结果:0001-01-01 00:00:00 +0000 UTC-62135596800true注意:t.Unix()的值为0,并不代表time.Time的值为0原创 2021-08-11 15:36:23 · 4877 阅读 · 0 评论 -
go module镜像
export GOPROXY=https://goproxy.cn给神龙许个愿原创 2021-06-03 14:57:06 · 323 阅读 · 0 评论 -
golang判断文件类型
package mainimport ( "fmt" "io/fs" "os")func main() { fi, _ := os.Stat("./abc") // 判断一个文件是否是目录 fmt.Printf("%v\n", fi.Mode()&fs.ModeDir == fs.ModeDir) // 判断一个文件是否是套接字 fmt.Printf("%v\n", fi.Mode()&fs.ModeSocket == fs.ModeSocket) // 判断一个原创 2021-03-23 17:45:51 · 2718 阅读 · 0 评论 -
golang设置go get 国内源
export GO111MODULE=onexport GOPROXY=https://goproxy.cn原创 2021-03-22 15:24:04 · 2177 阅读 · 0 评论 -
递归获取Linux目录下的文件详情
递归获取Linux目录下的文件详情包含文件名、文件修改时间、文件权限、文件拥有者func walkDir(filename string) { var files []local.File filepath.Walk(filename, func(path string, fi os.FileInfo, err error) error { depth := strings.Count(path, "/") - strings.Count(filename, "/") if depth &g原创 2021-02-25 17:10:51 · 202 阅读 · 0 评论 -
golang对结构体进行排序
package mainimport ( "fmt" "sort")type person struct { Name string Age int}type personSlice []personfunc (s personSlice) Len() int { return len(s) }func (s personSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }func (s perso原创 2021-01-22 14:20:41 · 1332 阅读 · 0 评论 -
golang 如何给Mutex添加一个TryLock
golang 如何给Mutex添加一个TryLock以下是Mutex的结构体:type Mutex struct { state int32 sema uint32}其中state字段用来表示这个Mutex的状态,即是否被锁:0 表示未锁,二进制表示为 00001 表示已锁住,二进制表示为 00012 表示已唤醒,二进制表示为 00104 表示饥饿,二进制表示为 0100package mainimport ( "fmt" "sync" "sync/atomic" "t原创 2021-01-06 20:31:28 · 1170 阅读 · 0 评论 -
golang 结构体属性顺序对结构所占内存大小的影响
golang 结构体属性顺序对结构所占内存大小的影响在golang的结构体中,属性内存的最小分配单位是4字节,不足4字节,将会补足。type struct A { a int32 b int8 c int8}上面结构体最终所占字节数为8type struct B { b int8 a int32 c int8 }上面结构体最终所占字节数为12...原创 2021-01-06 19:34:43 · 909 阅读 · 0 评论 -
golang写入文件时,覆盖前文件(将前文件清空)
os.OpenFile("../conf/.auth", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0766)原创 2020-10-28 16:20:47 · 3903 阅读 · 0 评论 -
golang正则匹配提取字符串
package mainimport ( "fmt" "regexp")func main() { flysnowRegexp := regexp.MustCompile(`^<hws>(.*)</hws>$`) params := flysnowRegexp.FindStringSubmatch("<hws>afasdfrewrqw445 fafasfsafcccccc</hws>") for _, param := range par原创 2020-10-14 17:19:18 · 6223 阅读 · 0 评论 -
golang解析只有一级的XML
package mainimport ( "encoding/xml" "fmt")func main() { str := `<a>123456</a>` var res string err := xml.Unmarshal([]byte(str), &res) fmt.Printf("res:%+v err:%v\n", res, err)}原创 2020-10-14 16:58:01 · 159 阅读 · 0 评论 -
golang关于字符串替换的建议
运行下面一段代码package mainimport ( "fmt" "regexp")func main() { tmp := "/Users/max/Downloads/test/website\\nbackup\n" buf := []byte(tmp) a := "/Users/max/Downloads/test/website\\nbackup" r := regexp.MustCompile(a + "\n") taskText := r.ReplaceAllStri原创 2020-10-09 14:22:13 · 976 阅读 · 0 评论 -
关于golang的for select case的坑
package mainimport ( "fmt" "time")func main() { a := make(chan int) go func() { time.Sleep(5 * time.Second) a <- 1 }() for { time.Sleep(1 * time.Second) select { case <-a: fmt.Println(1) case <-time.After(1 * time.Second)原创 2020-09-03 17:10:46 · 1425 阅读 · 2 评论 -
golang获取文件/目录(包含下面的文件)的大小
func DirSize(path string) (int64, error) { var size int64 err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { if !info.IsDir() { size += info.Size() } return err }) return size, err}原创 2020-09-01 18:46:18 · 1267 阅读 · 1 评论 -
golang去除字符串切片的重复
package mainimport "fmt"func main() { var a = []int{1, 2, 3, 4, 5, 2, 3} var b = []int{} for _, v := range a { if !func(v int) bool { for _, v2 := range b { if v2 == v { return true } } return false }(v) { b = append(b,原创 2020-08-30 13:30:53 · 650 阅读 · 0 评论 -
golang删除空文件
//读取文件内容bytes, err := ioutil.ReadFile("../task/compress/" + v)if err != nil { log.Error(err) return}str := string(bytes)//去除所有空格str = strings.TrimSpace(str)//如果为空字符串,则删除改文件if str == "" { os.Remove("../task/compress/" + v)}...原创 2020-08-18 17:55:16 · 293 阅读 · 0 评论 -
vscode,安装golang相关插件
好的辅助,往往会让ADC有更好的输出环境:go get -v github.com/ramya-rao-a/go-outlinego get -v github.com/rogpeppe/godefgo get -v github.com/stamblerre/gocodego get -v github.com/uudashr/gopkgs/v2/cmd/gopkgsgo get -v golang.org/x/tools/cmd/goimports...原创 2020-08-17 10:02:26 · 255 阅读 · 0 评论 -
golang保存上传的文件
保存用户上传的文件,例如用户头像、身份证照片等等,是我们在开发中经常遇到的问题。那在golang里面,如何保存用户上传的文件呢?不要慌,小刘已经把步骤写出来了。接收文件file, fileHeader, err := r.FormFile("avatar")读取文件的数据filebuf := make([]byte, fileHeader.Size) _, err = fil...原创 2020-04-04 23:39:21 · 2448 阅读 · 0 评论 -
使用go-micro创建租房网站
创建一个web服务micro new --type=web sss/IhomeWebCreating service go.micro.web.IhomeWeb in sss/IhomeWeb.├── main.go├── plugin.go├── handler│ └── handler.go├── html│ └── index.html├── Dockerfil...原创 2020-03-31 10:09:05 · 681 阅读 · 0 评论 -
意外的模块路径“golang.org/x/lint”
go: github.com/micro/go-grpc@v1.0.1 requires github.com/micro/go-plugins@v1.1.0 requires github.com/golang/lint@v0.0.0-20190313153728-d0100b6bd8b3: parsing go.mod: module decla...原创 2020-02-17 14:43:20 · 3041 阅读 · 2 评论 -
golang如何使用protobuffer
gRPC 是一个高性能、开源和通用的 RPC 框架。 基于 HTTP/2 标准设计。首先安装相关工具安装protoc下载地址protoc是protobuf文件(.proto)的编译器(参考链接),可以借助这个工具把 .proto 文件转译成各种编程语言对应的源码,包含数据类型定义、调用接口等。protoc在设计上把protobuf和不同的语言解耦了,底层用c++来实现proto...原创 2020-02-04 15:49:44 · 378 阅读 · 0 评论 -
linux安装golang
首先需要去官网下载golang的安装包https://golang.org/dl/然后将其上传到服务器scp local_file remote_username@remote_ip:remote_folder接着,在服务器上执行tar -C /usr/local -xzf go1.13.6.linux-amd64.tar.gz随后,将/usr/local/go/bin添加到环境变量中...原创 2020-01-16 10:27:37 · 545 阅读 · 0 评论 -
golang如何比较浮点数的大小
Golang浮点数比较和运算会出现误差。浮点数储存至内存中时,2的-1、-2……-n次方不能精确的表示小数部分,所以再把这个数从地址中取出来进行计算就出现了偏差。package mainimport ( "errors" "fmt" "github.com/shopspring/decimal")func FloatCompare(f1, f2 interface{}) ...原创 2019-12-24 15:25:32 · 4246 阅读 · 0 评论 -
golang发送http请求
golang发送http请求func Request(method string, url string, apiKey string, apiSecret string, body io.Reader) (result []byte, err error) { req, _ := http.NewRequest(method, url, body) req.Header.Set("ApiK...原创 2019-12-19 12:19:14 · 257 阅读 · 0 评论 -
golang值类型转换成[]uint8类型
在go语言中,byte其实是uint8的别名,byte 和 uint8 之间可以直接进行互转。目前来只能将0~255范围的int转成byte。func Int64ToBytes(num int64) []uint8 { var buffer bytes.Buffer err := binary.Write(&buffer, binary.BigEndian, num) if er...原创 2019-12-10 15:56:43 · 5468 阅读 · 0 评论 -
golang格式化代码(大道至简)
golang有一个gofmt工具,用来格式化代码,有多种用法。正所谓“大道至简”,我们这里只介绍一种,最实用的命令gofmt -w -l src,src是项目目录。-l 显示那些需要格式化的文件-w 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。-r 添加形如“a[b:len(a)] -> a[b:]”的重写规则,方便我们做批量替换-s 简化文件中的代码-d 显示...原创 2019-12-09 11:46:52 · 420 阅读 · 0 评论 -
golang调试工具Delve
本文转载于 https://www.cnblogs.com/li-peng/p/8522592.html 欢迎阅读原文 golang调试工具Delve Devle是一个非常棒的golang 调试工具,支持多种调试方式,直接运行调试,或者attach到一个正在运行中的golang程序,进行调试。 线上golang服务...转载 2019-12-05 12:20:28 · 504 阅读 · 0 评论 -
Go语言实现简单连接池(以nanomsg消息中间件为例)
Go语言实现简单连接池(以nanomsg消息中间件为例)作为一名后台码农,常常要使用到连接池,这里以nanomsg为例,实现一个简单的连接池。package nanomsgimport ( "sync" "git.cdsdjx.net/sdjx/gdserver/common/setting" "git.cdsdjx.net/sdjx/gdserver/logs" "nano...原创 2019-12-05 10:00:52 · 737 阅读 · 0 评论 -
golang学习笔记之递归
package mainimport ( "fmt")type iAdder func(int) (int, iAdder)func adder2(base int) iAdder { return func(v int) (int, iAdder) { return base + v, adder2(base + v) }}func ...原创 2019-04-04 12:22:04 · 128 阅读 · 0 评论 -
如何使用golang导出csv、xlxs的文件
我使用了"github.com/tealeg/xlsx"这个库,感觉还是挺好用的。head接收的是标题行(也可以说是表头行)。data接收的是具体内容,是一个二维的切片。GetRandomStr这个函数的主要作用是给临时文件命名,便于清理临时存储在服务器上的文件以及防止新文件覆盖掉旧文件。func GenerateCSV(head []string, data [][]string) s...原创 2019-04-12 11:42:53 · 722 阅读 · 0 评论 -
golang日期格式与时间戳相互转换
// 时间戳转日期格式 t := time.Now().Unix() fmt.Println("t:", t) t2 := time.Unix(t, 0).Format("2006-01-02 13:04:05") fmt.Println("t2:", t2) // 日期格式转时间戳 t3, _ := time.Parse("2006-01-02 13:04:05", t2) fm...原创 2019-11-28 14:35:13 · 3806 阅读 · 0 评论