golang

解决go mod同步包失败的问题

有些话、适合烂在心里 提交于 2020-01-30 00:10:31
go mod同步包,很多时候会用到github和golang的包,在国内会被墙掉,这个时候,golang提供了goproxy来解决这个问题。 使用环境变量解决 $env:GO111MODULE="on" $env:GOPROXY="https://goproxy.io" 如果使用goland 可以在go modules(vgo)中,设置proxy地址: http://goproxy.io 这个是官方提供的代理地址,也可以使用阿里云提供的代理地址: https://mirrors.aliyun.com/goproxy/ 来源: https://www.cnblogs.com/xiaohunshi/p/12241865.html

Golang数组类型转换

烂漫一生 提交于 2020-01-29 23:31:16
最近写代码的时候会遇到类型转换,有时候对单独的变量强制转换没有问题,但要是对复杂的变量(例如数组)进行强制转换就会出现问题。 问题1:可以将[]T1转换为[]T2吗?T1和T2底层类型是一样的。 答案是不能,看一下例子: type T1 int type T2 int var t1 T1 var x = T2(t1) // OK var st1 []T1 var sx = ([]T2)(st1) // NOT OK 在Go中,类型与方法紧密相关,因为每个命名类型都有一个(可能为空)方法集。一般规则是,您可以更改要转换的类型的名称(从而可能更改其方法集),但不能更改复合类型的元素的名称(和方法集)。 Go要求您明确说明类型转换。那golang中的复合类型指的是?复合类型包含指针、数组、切片、Map、结构体。所以数组类型进行强制转换是有问题的。但是可以遍历数组,对每个元素进行转换,来达到想要的想过即[]T1转换为[]T2 问题2:可以将[]T强制转换为[]interface{}吗? 答案:不行。可以遍历数组,单个元素进行转换,但是直接对数组整体做转换会报错 语言规范不允许这样做,因为这两种类型在内存中的表示方式不同。有必要将元素分别复制到目标切片。此示例将int的一部分转换为interface {}的一部分: t := []int{1, 2, 3, 4} s := make([

Golang logrus 日志包及日志切割

坚强是说给别人听的谎言 提交于 2020-01-29 09:36:31
Golang logrus 日志包及日志切割 本文主要介绍 Golang 中最佳日志解决方案,包括常用日志包 logrus 的基本使用,如何结合 file-rotatelogs 包实现日志文件的轮转切割两大话题。 Golang 关于日志处理有很多包可以使用,标准库提供的 log 包功能比较少,不支持日志级别的精确控制,自定义添加日志字段等。在众多的日志包中,更推荐使用第三方的 logrus 包,完全兼容自带的 log 包。logrus 是目前 Github 上 star 数量最多的日志库,logrus 功能强大,性能高效,而且具有高度灵活性,提供了自定义插件的功能。 很多开源项目,如 docker,prometheus,dejavuzhou/ginbro 等,都是用了 logrus 来记录其日志。 logrus 特性 完全兼容 golang 标准库日志模块:logrus 拥有六种日志级别:debug、info、warn、error、fatal 和 panic,这是 golang 标准库日志模块的 API 的超集。 logrus.Debug(“Useful debugging information.”) logrus.Info(“Something noteworthy happened!”) logrus.Warn(“You should probably take a look

Golang ETCD包的安装使用

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-29 09:23:40
ETCD 日志收集项目 为什么要自己写不用ELK? ELK: 部署的时候麻烦每一个filebeat都需要配置一个配置文件 使用etcd来管理被收集的日志项。 项目的架构 上节课项目进度 kafka:消息队列 tailf:从文件里读日志 go-ini:解析配置文件 今日内容 etcd etcd介绍 详见群文件:etcd.pdf http://www.5lmh.com/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C/go%E6%93%8D%E4%BD%9Cetcd/%E6%93%8D%E4%BD%9Cetcd.html 安装etcd 详见:https://docs.qq.com/doc/DTndrQXdXYUxUU09O Ubuntu安装etcd 下载: etcd-v3.3.18-linux-amd64 解压文件即可使用,无需安装 go操作etcd 命令行操作:使用自带的 etcdctl 注意一定要使用V3版本的API 先设置环境变量: SET ETCDCTL_API=3 // Windows export ETCDCTL_API=3 // Mac&Linux 启动服务端 进入安装目录中 /usr/local/etcd-v3.3.18-linux-amd64 root@haima-PC:/usr/local/etcd-v3.3.18

aslist,gloang线程安全可排序的list

↘锁芯ラ 提交于 2020-01-29 05:23:13
aslist aslist(A Sorted List)是golang语言实现的线程安全可排序的list。便捷的调用方式,使开发者快速入门使用。 前言 近来有喷子喷我,说golang有排序框架何苦要自己造轮子。我只想说中国的拿来主义思想就是导致今天中国为何终始没有自主研发的操作系统,没有自己的芯片。你跟我说这句话就像问"已经有了Java为什么还要学Golang、为什么男人有了老婆还想有小三"。因为需求嘛。各种各样的需求,有人在乎性能,有人在乎便捷,有人在乎二者都在乎。你要是觉得我造的轮子不好,你自己就去造一个更好的。不要在这里说一些显得你很浅薄的话。aslist就是给在乎便捷、不想了解底层算法的人使用。不喜欢你可以走。 为什么要设计aslist? 如果你是从java转golang开发,你就会发现golang中对数组(array)、切片(slice)的封装比较原生。这对开发者来说过去java日常对List方便操作放在golang中是非常痛苦的。如排序(sort)、栈(stack)操作、先进先出(FIFO)、左进右出(LIRI)......本人深耕java多年深刻体会到你的痛苦,所以借鉴java对list体验设计的思路封装了这个轻量级的aslist。使你在golang中能找回java的感觉。 为什么Range、ClearTargets、Pop不能像Java一样使用泛型? 没有办法

GOLANG IMPORT使用入门

时光怂恿深爱的人放手 提交于 2020-01-28 13:27:24
总结的很好,《golang web 编程》作者维护的golang博客: http://beego.me/ 。。。。。。。。。。。。。。。。 我们在写Go代码的时候经常用到import这个命令用来导入包文件,而我们经常看到的方式参考如下: import( "fmt" ) 然后我们代码里面可以通过如下的方式调用 fmt.Println("hello world") 上面这个fmt是Go语言的标准库,他其实是去goroot下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块: 1.相对路径 import “./model” //当前文件同一目录的model目录,但是不建议这种方式来import 2.绝对路径 import “shorturl/model” //加载gopath/src/shorturl/model模块 上面展示了一些import常用的几种方式,但是还有一些特殊的import,让很多新手很费解,下面我们来一一讲解一下到底是怎么一回事 1.点操作 我们有时候会看到如下的方式导入包 import( . "fmt" ) 这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的 fmt.Println("hello world") 可以省略的写成 Println("hello world") 2.别名操作

Golang:线程 和 协程 的区别

ぐ巨炮叔叔 提交于 2020-01-28 12:44:21
目录 前言 协程 和线程的整体对比 协程的特点 第 1 和 第 2 点 特点中的第 3 和 第 4 点 前言 19年也快结束了。现在的总结更多是放在了草稿 而没有发出,这次详细分享下在 Go 中,线程和协程的区别及其关系。 协程 协程,英文名Coroutine。但在 Go 语言中,协程的英文名是:gorutine。它常常被用于进行多任务,即并发作业。没错,就是多线程作业的那个作业。 虽然在 Go 中,我们不用直接编写线程之类的代码来进行并发,但是 Go 的协程却依赖于线程来进行。 下面我们来看看它们的区别。 线程的基础介绍,这里请自行网上搜索文章,因为关于线程的优秀介绍文章已经很多。 协程的特点 这里先直接列出线程的特点,然后从例子中进行解析。 多个协程可由一个或多个线程管理, 协程的调度 发生在其所在的线程中。 可以被调度, 调度策略 由应用层代码定义,即可被高度自定义实现。 执行效率高。 占用内存少。 上面 第 1 和 第 2 点 我们来看一个例子: func TestGorutine ( t * testing . T ) { runtime . GOMAXPROCS ( 1 ) // 指定最大 P 为 1,从而管理协程最多的线程为 1 个 wg : = sync . WaitGroup { } // 控制等待所有协程都执行完再退出程序 wg . Add ( 2 ) //

golang刷题之连续子数组的最大和

佐手、 提交于 2020-01-28 04:55:38
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)----------------剑指offer 思路:设置两个值,一个max保存遍历数组中最大的值,一个sum,遍历数组之和,每遍历一次比较一次,max<sum,max=sum 代码: func maxArraySum(nums []int)int { max := nums[0] sum := 0 for _, num := range nums{ //fmt.Print(n) if sum > 0{ sum += num }else{ sum = num } if max < sum{ max = sum } } return max } 来源: CSDN 作者: 十二年蝉 链接: https://blog.csdn.net/qq_34859228/article/details/104047927

Golang Import使用入门

[亡魂溺海] 提交于 2020-01-28 00:38:54
我们在写Go代码的时候经常用到import这个命令用来导入包文件,而我们经常看到的方式参考如下: import( "fmt" ) 然后我们代码里面可以通过如下的方式调用 fmt.Println("hello world") 上面这个fmt是Go语言的标准库,他其实是去goroot下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块: 相对路径 import “./model” //当前文件同一目录的model目录,但是不建议这种方式来import 绝对路径 import “shorturl/model” //加载gopath/src/shorturl/model模块 上面展示了一些import常用的几种方式,但是还有一些特殊的import,让很多新手很费解,下面我们来一一讲解一下到底是怎么一回事 点操作 我们有时候会看到如下的方式导入包 import( . “fmt” ) 这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名, 也就是前面你调用的fmt.Println(“hello world”)可以省略的写成Println(“hello world”) 别名操作 别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字 import( f “fmt” ) 别名操作的话调用包函数时前缀变成了我们的前缀,即f.Println(