![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
weixin_42094764
这个作者很懒,什么都没留下…
展开
-
golang 打包文件成zip,并提供下载
压缩文件为zip需要用到 "archive/zip"这个包。首先使用os.Create创建一个名为aaa.zip的文件。接着使用zip.NewWriter来创建一个写入的参数。然后遍历你想要压缩的文件,将所有的内容复制到zip文件里。原创 2023-04-23 12:32:30 · 535 阅读 · 0 评论 -
golang 复制某一个文件里的所有内容到新建的另外一个文件夹
filepath.Walk 需要穿两个参数,第一个是你要遍历目录路径,第二个是传一个函数,里面是你要对目录下文件的处理逻辑。这里需要使用到一个函数filepath.Walk,它的作用是遍历目录下的所有文件和子目录以及子目录中的所有内容。现在我们的需求是要将目标文件夹里面的所有内容copy到另外一个文件夹。函数有三个参数,都是固定的,你需要做的就是在里面写逻辑。原创 2023-04-23 11:33:21 · 540 阅读 · 0 评论 -
内存逃逸学习
内存逃逸定义:在一段程序中,每一个函数都会有自己的内存区域存放自己的局部变量、返回地址等,这些内存会由编译器在栈中进行分配,每一个函数都会分配一个栈桢,在函数运行结束后进行销毁,但是有些变量我们想在函数运行结束后仍然使用它,那么就需要把这个变量在堆上分配,这种从"栈"上逃逸到"堆"上的现象就成为内存逃逸。...转载 2021-11-03 18:26:50 · 112 阅读 · 0 评论 -
golang grpc
https://blog.csdn.net/fwhezfwhez/article/details/90475510转载 2021-10-14 16:39:07 · 53 阅读 · 0 评论 -
golang各种类型如何进行比较
1.基础类型布尔型,数字类型(int,unit,float,complex),byte,rune,字符串类型这些直接在同类型的情况下直接 == 比较值是否相等即可,不同类型不可比较2.值为内存地址非指针类型chan,func,UnsafePointer直接 == 比较值是否相同3.数组和切片类型首先通过反射比较type是否相同,再比较长度len是否相同,最后循环比较值是否相同array1 := []int{123,456}array2 := []int{123,457}array1Val原创 2021-10-09 15:25:19 · 1006 阅读 · 0 评论 -
转 golang context
1. 为什么需要context在并发程序中,由于超时、取消操作或者一些异常情况,往往需要进行抢占操作或者中断后续操作。举个例子:在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务,用来处理一个请求的 goroutine 通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。 当一个请求被取消或超时时,所有用来处理该请求的 go转载 2021-09-29 16:39:58 · 45 阅读 · 0 评论 -
golang reflect学习
首先是定义reflect是golang中运行时动态的调用对象的方法和属性的包然后是使用reflect最基础的使用就是获取对象的值和类型,方法是reflect.ValueOf和reflect.TypeOftype aaa struct { A int B string C *time.Time}func main() { aa := aaa{ A: 12, B: "haha", } //结构体struct ReflectValue := reflect.ValueOf(aa原创 2021-09-28 16:30:42 · 103 阅读 · 0 评论 -
golang make和new的区别
new和其他语言中的同名函数一样:new(t)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*t类型的值。它并不初始化内存,只是将其置零。*t指向的内容的值为零(zero value)。注意并不是指针为零。make(t, args)与new(t)的功能区别是,make只能创建slice、map和channel,,并且返回一个初始化的(而不是置零),类型为t的值(而不是*t)。...原创 2021-09-28 14:57:06 · 57 阅读 · 0 评论 -
golang rune
官方文档里 写的//int32的别名,几乎在所有方面等同于int32//它用来区分字符值和整数值type rune = int32他有什么用呢?用处就将中文转为一个只占一个字节的数字。大家都知道中文在utf-8编码里占3个字节,而go语言默认编码格式就是golang。当你想获取一个中文字符串的实际长度而不是字节长度的时候就可以用到rune这个类型了。func main() { test := "哈哈呵 hahaha" fmt.Println(len(test)) fmt.Println("R原创 2021-09-26 18:00:43 · 69 阅读 · 0 评论 -
golang defer 学习链接
https://my.oschina.net/henrylee2cn/blog/505535转载 2021-09-26 15:11:30 · 30 阅读 · 0 评论 -
golang data race
数据竞争(data race)是指在非线程安全的情况下,多线程对同一个地址空间进行写操作。原创 2021-09-26 13:42:44 · 93 阅读 · 0 评论 -
golang 报错 fatal error: concurrent map read and map writ
错误原因,map是线程不安全的,当有并发读写的时候就会报错解决办法:使用读写锁sync.RWMutex:原创 2021-09-26 10:52:24 · 335 阅读 · 0 评论 -
gorm postgresql学习
时隔两个月,终于又开始写文章了,这两个月母亲去世,去世前我辞职回家照顾,到后面办丧事等等一直都没碰过代码。今天入职了新公司,继续代码之路吧。 首先是什么是gorm,gorm是golang里的一个用来操作数据库的包,帮你集成了很多的数据库操作方法,还有一些比如钩子,关联等方法。然后postgresql是一种对象关系数据库系统,简单来说就是mysql的升级版,性能更加强大,运行更加稳定,字段类型更加丰富,就是学起来有点头秃,我也才刚开始学所以知道的不多。那么就开始学习gorm吧。一.安装环境和软件就先跳.原创 2021-09-24 16:31:44 · 3098 阅读 · 0 评论 -
转 GO接收GET/POST参数以及发送GET/POST请求
GO接收GET/POST参数以及发送GET/POST请求go作为21世纪的新C语言,还是应该学习一下的,本文主要介绍net/http包相关用法GO发送HTTP请求发送GET请求直接放代码var client = http.Client{ Timeout: 10 * time.Second,}func HttpGetRequest(url string, result interface{}) error { resp, err := client.Get(url) if err !=转载 2021-09-24 15:07:03 · 2033 阅读 · 0 评论 -
转 golang json包的运用
已知需要编码解码类型的编码json.NewEncoder().encode(v)json.Marshal(&v)解码json.NewDecoder().decode(&v)json.Unmarshal([]byte, &v)使用示例package mainimport ( "encoding/json" "fmt" "bytes" "strings")type Person struct { Name string `转载 2021-09-23 17:32:38 · 104 阅读 · 0 评论 -
golang https服务端和客户端
首先下载windows编译版的openssl,下载地址如下:http://slproweb.com/products/Win32OpenSSL.html,选择64位版;安装配置好之后就可以开始生产秘钥和证书了1、生成RSA密钥的方法openssl genrsa -des3 -out CA/key.pem 2048这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码,如果你不想要每次都输入密码,可以改成:openssl genrsa -out CA/key.pem 2048建议用原创 2021-09-23 13:41:07 · 374 阅读 · 0 评论 -
gin-vue 前后端共用一个域名nginx配置
upstream zp_server2{ #后端端口 server 127.0.0.1:8080; }server{ listen 80; server_name your.host; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/go/web/dist;#前端文件路径 proxy_co.原创 2021-07-06 18:57:39 · 834 阅读 · 0 评论 -
golang Printf 格式转
/* %v 输出结构体 {10 30} %+v 输出结构体显示字段名 {one:10 tow:30} %#v 输出结构体源代码片段 main.Point{one:10, tow:30} %T 输出值的类型 main.Point %t 输出格式化布尔值 true %d 输出标准的十进制格式化 100 %b 输出标准的二进制格式化 99 对应 1100011 %c 输出定整数的对应字符 99 对应 c %x 输出十六进制编码 99 对应 63 %f 输出十.转载 2021-07-05 17:59:17 · 79 阅读 · 0 评论 -
golang ,冒泡排序,快速排序,选择排序
package mainimport ( "fmt" "os" //router "goproject1/router")func main() { aa := []int{ 5,8,7,6,7,5,1,2,3,8,79,11,2,55,77,99,66,32,48,4654,12, } fmt.Println(len(aa)) fmt.Println(SortSelect(aa))}//冒泡排序func SortInt(aa []int)[]int{ var tmp原创 2021-06-21 18:44:05 · 44 阅读 · 0 评论 -
golang 参数后面加...
golang参数后面跟…有两种情况也就是两种用法,首先是函数的命名参数加…,意思是这个参数是多变参数,可以接收多个同类型的参数func main() { doSomeThing(1, 2, 3, 4) return}func doSomeThing(arg ...int) { fmt.Println(arg)}输出结果是一个int类型的切片[1 2 3 4]然后是第二种用法,第二种用法的在本来声明为某一类型的多变参数上直接传入该类型的切片func main()原创 2021-06-21 16:59:59 · 865 阅读 · 0 评论 -
golang,hyperf部署supervisor实现监测日志,自动重启
今天想把自己写的golang项目布置到线上试试,同时想用个插件帮忙管理,实现服务死了自动重启,和日志输出,这里的话由于以前用过hyperf,文档中有说supervisor的使用,所以这里就一起使用了。首先把你的go项目传到线上,然后安装部署golang的各种配置,最后在目录下运行go build -o test然后yum 安装supervisoryum install supervisor安装好之后cp /etc/supervisord.conf /etc/supervisord.d/sup原创 2021-06-18 12:11:53 · 664 阅读 · 0 评论 -
docker file 学习
dockerfile 的作用是将本地文件打包成docker镜像以供使用,这里详细说下他的个个参数首先是FORMFORM 是指定你的镜像是基于那个镜像之上运行的,一般来说就是写各种服务器的镜像名,比如nginx,ubuntu,apche等等。FROM nginx然后MAINTAINER,就是写作者,这里就可以写下你的大名了MAINTAINER "hahahah"接着 WORKDIR,WORKDIR指令为Dockerfile中的任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD指令原创 2021-06-11 18:16:42 · 74 阅读 · 0 评论 -
golang 类型转换
var s1,s2 string = "AbcD","1234"//转字节bs1 := []byte(s1); bs2 := []byte(s2)//字节数组转字符串s11 := string(bs1); s22 := string(bs2)//单个字节转字符串ss := string(bs1[0])fmt.Println(s11, s22, ss)//s2转数字 ,err 表示是否能转换成功,比如s1就会转换失败i, err := strconv.Atoi(s2)//数字转字符串原创 2021-06-11 15:15:14 · 77 阅读 · 0 评论 -
转 golang中.([]byte)和 []byte()
今天用redis遇到了.([]byte)的情况,所以转载一篇文章记录下fmt.Println(string(re.([]byte))).([]byte)value, ok := var.([]byte)这是标准的golang类型断言(Type Assertion)。这里的val一般是一个interface{}类型的变量。这句的字面含义是“我认为val这个interface{}类型变量的underlying type是[]byte,如果是,请将其值赋给变量value,并且ok =true,如果不是转载 2021-06-10 15:36:43 · 670 阅读 · 0 评论 -
自己写的golang常用函数,正则验证,过滤词,时间戳
package controllerimport ( "regexp" "strconv" "strings" "time")//获取int型时间戳func GetIntTimestamp() int { strInt64 := time.Now().Unix() id16,_ := strconv.Atoi(strconv.FormatInt(strInt64,10)) return id16}//获取string型时间戳func GetSringTimestamp() st原创 2021-06-07 10:54:14 · 444 阅读 · 0 评论 -
golang gorm 初学
文档地址https://learnku.com/docs/gorm/v2/about-mirror-image/9754首先让我们建立目录项目根目录创建main.go,然后执行go mod init接着创建config,controller,model等目录然后再model目录下新建mysql.gopackage modelimport ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm")var MyDb *gorm.DBvar M原创 2021-06-04 19:04:19 · 131 阅读 · 0 评论 -
gin 解决跨域问题
要想解决gin跨域的问题就需要给请求加上一个跨域请求中间件,代码如下package mainimport ( "fmt" "github.com/gin-gonic/gin" "net/http" "strings")var ( engine = gin.Default())func main() { engine.Use(Cors()) engine.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gi原创 2021-03-02 11:56:43 · 442 阅读 · 0 评论 -
golang基本操作
搭建一个http服务package main import ( "io" "log" "net/http") func HelloServer(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "hello ,this is from HelloServer func ")} func main() { http.HandleFunc("/hello", HelloServer) log.Fatal(http原创 2021-02-03 17:19:03 · 60 阅读 · 0 评论