![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Golang
实例生产
cloud-笔记
这个作者很懒,什么都没留下…
展开
-
golang 通过context设置接口请求超时时间
通过ctx 设置接口超时时间,提高接口请求速率原创 2023-08-30 14:29:57 · 418 阅读 · 0 评论 -
beego http改为https
笔记记录,Beego 常涉及的问题原创 2022-10-17 11:15:30 · 279 阅读 · 0 评论 -
Golang 解决 golang.org/x/ 下的包下载不下来的问题
golang.org/x/ 下的包下载不下来的问题go在下载golang.org的包时会出现访问不了的情况。从github.com上把代码clone到创建的golang.org/x目录上就OK了git clone https://github.com/golang/sys.gitgit clone https://github.com/golang/net.gitgit clone https://github.com/golang/text.gitgit clone https://gith原创 2021-12-30 17:46:57 · 1316 阅读 · 0 评论 -
go生成uuid
获取 UUID一,开源包生成uuid "github.com/satori/go.uuid"func main() { // 创建 u1, _ := uuid.NewV4() fmt.Printf("UUIDv4: %s\n", u1)}二,手动生成"crypto/rand"func getUuid() string { b := make([]byte, 16) io.ReadFull(rand.Reader, b) b[6] = (b[6] &原创 2021-12-30 17:29:29 · 3722 阅读 · 1 评论 -
go环境搭建,以及vscode工具配置
笔记一, centos 搭建 Go环境go env :https://goproxy.cn/yum install golanggo versionmkdir gocd gomkdir src mkdir pakmkdir bin#go modexport GO111MODULE=on#go proxyexport GOPROXY=https://goproxy.cn#go install pathexport GOROOT=/usr/lib/golang#works原创 2021-12-29 13:45:04 · 952 阅读 · 0 评论 -
vscode支持 go mod
linux 开通 go mod 之后 vscode 找不到包的问题?原因:因为 linux上 开通go mod :所需要的第三方依赖包下载到 go/pkg 下,而vscode依旧是在 GOPATH 和 GOROOT下寻找所以是找不到的,但是linux 编译你的项目也不会报错!解决方法有二:更改 go mod GO111MODULE="off" 或者auto这样就是 在 GOPATH 和 GOROOT下寻找包。虽然更改 GO111MODULE 可以实现 但是有的项目硬性要求就是要用 “原创 2021-02-03 17:01:30 · 4755 阅读 · 6 评论 -
go的目录结构pkg
src: 源码文件bin: 编译生成的而可执行文件pkg: 平台相关目录(目标操作系统目录),编译后生成的文件pkg:保存归档文件(扩展名为 .a 的文件,即 archive 文件)这是程序编译后生成的静态库文件。注意:在 pkg 下实际上还有一个平台相关目录(目标操作系统对应的目录),所有的归档文件都在这个目录下当前出现了三个子目录[root@localhost pkg]# lslinux_amd64 mod sumdb第一个目录 linux_amd64因为该go环境是在Linu原创 2021-01-22 16:14:39 · 5860 阅读 · 0 评论 -
vscode函数不能跳转以及函数跳转慢
vscode 是最好的IDE 接受反驳!像很多同志一样也遇到了 安装vscode函数跳转问题很烦恼! 一 , 首先你需要一个go环境,去访问它看看 https://goproxy.cn/二 ,vscode 官网 下载后用于远程连接 linux 开发安装几个必备的插件Chinese //汉化Go //goC/C++ // 代码自动跳转Remote-SSH //远程连接点击左下角的绿色条选择 Addssh root@192.168.100.100 -原创 2021-01-13 16:45:46 · 19280 阅读 · 2 评论 -
go语言之channel如何使用
1,ChannelGo语言的并发模型是CSP:提倡通过通信共享内存而不是通过共享内存而实现通信如果说goroutine是Go程序并发的执行体,channel就是它们之间的连接。channel是可以让一个goroutine发送特定值到另一个goroutine的通信机制。Go语言中的通道(channel)是一种特殊的类型。通道像一个传送带或者队列,总是遵循先入先出的规则,保证收发数据的顺序。每一个通道都是一个具体类型的导管,也就是声明channel的时候需要为其指定元素类型.2,声明channelv原创 2020-12-11 18:12:59 · 1516 阅读 · 1 评论 -
go语言byte与uint32之间的转换
字节与整形之间的转换func Uint16(b []byte) uint16 { _ = b[1] return uint16(b[0]) | uint16(b[1])<<8}func BytesToUint32(b []byte) uint32 { _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 return uint32(b[0]) | ui原创 2020-12-11 11:06:32 · 4822 阅读 · 0 评论 -
go线程池实现百万级高并发
实例代码解析package mainimport ( "fmt" "runtime" "time") type Job interface { Do()}//----------------------------------------------//workertype Worker struct { JobQueue chan Job}//新建一个 worker 通道实例func NewWorker() Worker {.原创 2020-12-10 11:04:52 · 6669 阅读 · 4 评论 -
go mod机制详解
go mod 机制详解官方的定义:A module is a collection of related Go packages that are versioned together as a single unit. 一组package的集合,一起被标记版本,即是一个module一个项目中可以包含多个package,不管有多少个package,这个package都将随项目一起发布一个module的版本号规则必须遵循语义化规范(https://semver.org/)版本号必须使用格式v(majo原创 2020-11-13 13:43:19 · 15047 阅读 · 0 评论 -
go语言之命令行参数解析
#第一种:func main() { if len(os.Args)<0{ return } fmt.Printf("====%s====\n", os.Args[1]) fmt.Printf("====%s====\n", os.Args[2]) fmt.Printf("====%s====\n", os.Args[3]) fmt.Printf("%s\n原创 2020-08-11 15:27:10 · 966 阅读 · 0 评论 -
go语言之并发Select深度理解
select的使用方法很像switch语句,但是select没有输入值,只用于信道操作。select用于多个信道的发送或者接收信道的操作中进行选择。语句会阻塞直到其中有信道可以操作,若有多个信道可以操作,会随机选择其中一个case执行。func service1(ch chan string) { time.Sleep(2 * time.Second) ch <- "from service1"} func service2(ch chan string) { time.原创 2020-08-07 14:26:34 · 437 阅读 · 0 评论 -
go语言之并发-信道深度理解
------------------------------信道是协程之间通信的管道,从一端发送数据,另一端接收数据----------------------------创建信道var c chan int // 方式一c := make(chan int) // 方式二使用关键字 chan 创建信道,声明时有类型,表明信道只允许该类型的数据传输。信道的零值为 nil。方式一:就声明了 nil 信道。nil 信道没什么作用,既不能发送数据也不能接受数据。方式二:使用 make 函数创建原创 2020-08-07 12:22:34 · 318 阅读 · 0 评论 -
go语言之并发协程
GO 的终极武器 - 并发协程并行:其实很好理解,就是同时执行的意思,在某一时间点能够执行多个任务。最简单的方式就是借助多线程或多进程,这样才可在同一时刻执行多个任务。单线程是永远无法达到并行状态的。并发:是在某一时间段内可以同时处理多个任务。它允许多个任务同时执行,这个同时指的就是一段时间内。单线程中多个任务以间隔执行实现并发。**总结:**多线程或多进程是并行的基础,但单线程也通过协程实现了并发。go通过协程实现并发,协程间靠信道通信。协程(Goroutine)可以理解成轻量级的线程,但与原创 2020-08-07 10:16:24 · 322 阅读 · 0 评论 -
go语言之可变参函数的深度理解
可变参函数的深度理解:函数接收的参数数目都是确定的。而可变参数函数的参数数目是不确定的如果一个函数的最后一个参数的表示形如:…Type,则该参数(形参)可以接受不同数目的参数(实参)func f(elems ...Type)需要注意的一点,只允许最后一个参数是可变参数Go 中的一些内置函数都是可变参数函数:例如:append()函数:func append(slice []Type, elems ...Type) []Types := []int{1,2,3}s = append(s,4原创 2020-08-05 15:54:01 · 480 阅读 · 0 评论 -
go语言之匿名函数
匿名函数:函数可以作为一个值,可以将函数赋给一个变量或者返回一个函数变量创建了一个匿名函数,赋给了一个全局变量add。Go 编译器会自动判别变量add的类型,这里是func(int, int) intvar add = func(a,b int) (r int) { r = a + b return}func main() { fmt.Println("a + b =",add(1,2))}匿名函数可以赋值,也可以立即执行:func main() { sum := func(原创 2020-08-05 15:01:48 · 280 阅读 · 0 评论 -
go语言之数组的深度理解
数组指针和指针数组:数组指针:我们可以声明一个指针变量,指向一个数组arr := []int{1,2,3}// 数组指针var ptr *[]int = &arr// 简写 ptr := &arr 指针数组:就是一个数组里面存放的都是指针x,y := 1,2var arrPtr = [5]*int{1:&x,3:&y} // 没有手动初始化的元素,已经自动初始化指针类型对应的零值 nilfmt.Println(*arrPtr[1]) // 输出原创 2020-08-05 14:39:22 · 139 阅读 · 0 评论 -
go语言之slice深度理解
创建空切片var s []intfmt.Println(s == nil) // 输出 truefmt.Println(len(s),cap(s)) // 输出:0 0//声明了一个nil切片s,其实,切片的零值就是nil//因为切片就是一个数组的引用。切片的类型在初始化时已经确认,就是[]Type,//上面的代码就声明了[]int类型的nil切片s。nil切片的指向底层数组的指针为nil------------------------------------------ 创建 空切片原创 2020-08-05 11:17:47 · 179 阅读 · 0 评论 -
go语言之map深度理解
Map存储的是无序的键值对集合//创建mapm := make(map[keyType]valueType)一,初始化mapmonth := make(map[string]int)month["January"] = 1month["February"] = 2month["March"] = 3------------------------------------------------- map 初始化 ---------------------------------------原创 2020-08-05 10:21:07 · 259 阅读 · 0 评论 -
go语言之进程锁
程序开发的时候,为了避免程序多次启动,都会来个进程所的管制,保证你的程序只运行了一个程序启动会在指定的位置生成程序的.pid文件,程序结束该文件自动删除。但当程序多次启动就会检测到这个文件并报错代码如下: /*lock process*/ func lockProcess(){ lockFile := "/var/run/xxxxxx.pid" lock, err := os.Create(lockFile) if err != nil { log.E.原创 2020-07-23 11:16:58 · 1147 阅读 · 0 评论 -
git clone下的包不能直接加载到项目中
git问题描述:golang 的开发是以包引用的机制,所以经常会用到第三地方的包。当你 git get/clone xxx 第三方的包时 编译无误,但是git push 却是一个空文件 提交代码到gitlab上 却是个空 的文件夹 导致别人pull下来编译报错原因:因为别人的包是一个项目,你自己的也是一个项目。解决方案:你把它当作包使用 应该把其 .git删掉,它是项目依赖。一个项目中只能有一个。...原创 2020-07-13 18:39:23 · 483 阅读 · 0 评论 -
go语言之程序中获取环境变量
“–————人与人之间还是直接点好——————”go如何通过程序中获取环境变量到达控制效果~如下是个测试程序,主要是用户通过启动程序前 设置环境变量root$ export LOG_NUMBER=3进而达到控制日志的等级的效果!其它功能可同理!func init() { if fileNumber := os.Getenv("LOG_NUMBER"); fileNumber != "" { toInt, err := strconv.Atoi(fileNumber) if e原创 2020-07-07 18:17:01 · 866 阅读 · 0 评论 -
mqtt客户端
“–————人与人之间还是直接点好——————” eclipse paho 是一个 Mqtt客户端库代码路径:git clone https://github.com/eclipse/paho.mqtt.c.git编译: cd paho.mqtt.c make安装: sudo make installTest paho_c_pub -t my_topic --connection localhost:1883 paho_c_sub -t my_topic --connection lo原创 2020-07-07 18:07:38 · 172 阅读 · 0 评论 -
go语言之日志,按文件大小日期轮询rotatelogs
“–————人与人之间还是直接点好——————”**为go的log 增加轮询的功能** 使日志自动 保存,清理 实现轮询的机制! 包地址: https://github.com/gggwvg/logrotate 具体参数信息如程序所示!package mainimport ( "time" "github.com/gggwvg/logrotate" "github.com/sirupsen/logrus")func main() { opts := []logrotat原创 2020-07-07 18:04:00 · 2288 阅读 · 3 评论 -
go语言之日志,按日期轮询file-rotatelogs
“–————人与人之间还是直接点好——————”1.go语言本身的日志系统是很强大的,例如: "log" "github.com/sirupsen/logrus" 但,go语言本身并没有日志轮询机制,(就是将日志定期清理,保存,使之不会不停涨大) 2.此处使介绍了一个 file-rotatelogs 包 "github.com/lestrrat-go/file-rotatelogs" ****它可以和标准的日志结合使用**** 具体参数,程序描述的够清晰了! 利弊看程序解析!pack原创 2020-07-07 17:55:08 · 8152 阅读 · 0 评论 -
go语言之面向对象
"——————人与人之间还是简单点好————————"handler1.go // 这个文件处理几几的事情 package handler1//定义了一个接口函数type FatherAction interface { ToEat() Work() Sleep() bool}//定义了一个继承的结构类型(此方法又叫 匿名组合)type Father struct { FatherAction //继承接口函数 成员函数 sing str原创 2020-07-03 18:20:38 · 166 阅读 · 0 评论 -
go语言之接口函数
“函数接口的使用方式”//接口方法type Client interface { IsConnected() bool IsClose() bool}type client struct { I bool Miss string You int32 //...anything else !}//结构体实现的方法func (c *client) IsConnected() bool {//...}func (c *clie原创 2020-07-03 17:19:10 · 764 阅读 · 0 评论 -
go语言之类型与接口的关系
go语言的类型和接口的之间是一对多(或多对一)的关系以下为概念实例生产理解,便于以后在复杂的类型与接口环境中使用一,一个类型可以实现多个接口 而接口间彼此独立,不知道对方的实现。type HandlerInterface interface { OnRequset() IsRequestOk() bool}type Test2 struct{//... } type Test struct{ ID int //普通结构 start()string原创 2020-07-03 17:06:21 · 456 阅读 · 0 评论 -
go语言之文件读写
创建文件1.os.Create()file, err := os.Create("./demo.txt")//绝对路径 如果文件已存在,会将文件清空。//创建失败!路径不存在,权限不足(root),打开文件数量超过上限,磁盘空间不足等func main() {file, err := os.Create("./demo.txt")fmt.Printf("%T", file)// *os.File 文件指针类型if err != nil {fmt.Println(“文件创建失败。”)re原创 2020-06-29 12:22:11 · 488 阅读 · 0 评论 -
go语言之定时器
“–————人与人之间还是直接点好——————”package mainimport ( "fmt" "math/rand" "os" "os/signal" "syscall" "time")const defaultInterval = time.Duration(time.Second * 5) //5秒一次type timer struct { Interval time.Duration Ch chan struct{} //任类型通道}原创 2020-06-22 11:18:43 · 611 阅读 · 0 评论 -
go语言之复杂数组初始化
一,常用配置的JSON结构初始化:使用make 创建二,使用protobuf定义的定义如下:json结构中添加一动态数组生成是这样色的 `初始化使用方式:需要使用make创建数组,再使用 append() 函数原创 2020-06-18 19:05:26 · 1970 阅读 · 0 评论 -
go语言之日志
完全兼容golang标准库日志模块:logrus拥有六种日志级别:debug、info、warn、error、fatal和panic,这是golang标准库日志模块的API的超集。如果您的项目使用标准库日志模块,完全可以以最低的代价迁移到logrus上logrus内置了两种日志格式,JSONFormatter和TextFormatter,如果这两个格式不满足需求,可以自己动手实现接口Formatter,来定义自己的日志格式。logrus鼓励通过Field机制进行精细化的、结构化的日志记录,而不是通过冗长的原创 2020-06-09 19:16:06 · 471 阅读 · 0 评论 -
go语言之JSON转换
一,定义一个结构:type RouteMsg struct { Type string `json:"type"` DstNetwork string `json:"dst_network"` Gatway string `json:"gatway"` ID uint `json:"vrf_id"`}二,JSON与字符串之间的转换func putRouteEtcd(etcdValue, gatway string, ID uint) error原创 2020-06-09 18:42:48 · 390 阅读 · 0 评论 -
go语言之数组与字符串之间的相互转换
一,字符串如何转换为数组1.数组的创建:var endpoint = []string{"0.0.0.0:2379"} //直接初始化数组2.直接写进空的数组里面: etcd :="sdfsdferf" stringarr := make([]string, 0) //创建空数组 stringarr = append(stringarr, etcd) /*stringarr = append(stringarr, "456")*/ println("*****") for _,原创 2020-06-09 18:36:56 · 22012 阅读 · 2 评论 -
go mod 的简介与使用
若不需要了解太深可按如下使用: 1. #cd 项目名 //进入项目 2. #go mod init //初始化项目 3. #ps //查看初始化效果 4. #go build //编译,拉取必要包 前导:Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题。Go.mod其实就是一个Modules官方定义为:Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Mo原创 2020-05-22 18:18:01 · 1788 阅读 · 0 评论 -
golang.org/x/net/trace重复性错误
go语言编译或者执行二进制文件的特殊报错panic: /debug/requests is already registered. You may have two independent copies of golang.org/x/net/trace in your binary, trying to maintain separate state. This may involve a vendored copy of golang.org/x/net/trace.如上所示:我的代码在编译时没原创 2020-05-21 11:54:03 · 825 阅读 · 0 评论