golang

golang time包

白昼怎懂夜的黑 提交于 2019-11-27 16:08:12
time类型 和 时间戳 的转换 timestamp := time.Now().Unix() //timestamp为时间戳类型 tm := time.Unix(timestamp, 0) //tm为Time类型 时间戳或time类型 转 字符串(格式化) tm := time.Now() //tm为Time类型 timestamp := time.Now().Unix() //timestamp为时间戳类型 time.Now().String() //没有格式化 fmt.Println(tm.Format("2006-01-02 03:04:05 PM")) //格式化 fmt.Println(tm.Format("02/01/2006 15:04:05 PM")) //24小时制 也可以直接输出 fmt.Println(time.Now()) output:2017-02-27 01:20:00.567634365 +0800 CST 指定时间的time类型 time.Date(2017, 02, 27, 20, 20, 20, 20, time.Local) 字符串 转 time类型或时间戳 x := "2017-02-27 17:30:20" p, _ := time.Parse("2006-01-02 15:04:05", x) //p为time类型 p.Unix()

golang配置镜像站点

纵饮孤独 提交于 2019-11-27 15:21:49
In Linux or macOS, you can execute the below commands. Bash / # Enable the go modules feature export GO111MODULE=on # Set the GOPROXY environment variable export GOPROXY=https://goproxy.io Or, write it into the .bashrc or .bash_profile file. 原文: https://goproxy.io/ 来源: https://www.cnblogs.com/jiftle/p/11368260.html

Golang内存泄漏问题和处理方法

喜欢而已 提交于 2019-11-27 13:23:16
1、给系统打压力,内存占用增大,但停止打压后,内存不能降低,则可能有内存泄漏。 2、top不能实时反映程序占用内存,因Go向系统申请内存不使用后,并不立即归还系统。 3、程序占用系统内存、Go的堆内存、实际使用内存:从系统申请的内存会在Go的内存池管理,整块的内存页,长时间不被访问并满足一定条件后,才归还给操作系统。又因为有GC,堆内存也不能代表内存占用,清理过之后剩下的,才是实际使用的内存。 4、调用runtime.ReadMemStats可以看到Go的内存使用信息 5、使用go tool pprof -inuse_space http://127.0.0.1:6060/debug/pprof/heap?debug=2得到更细信息,其中HeapInuse为实际内存使用量 6、第一条原则是,绝对不能由消费者关channel,因为向关闭的channel写数据会panic。正确的姿势是生产者写完所有数据后,关闭channel,消费者负责消费完channel里面的全部数据 func produce(ch chan<- T) { defer close(ch) // 生产者写完数据关闭channel ch <- T{} } func consume(ch <-chan T) { for _ = range ch { // 消费者用for-range读完里面所有数据 } } ch :=

Golang框架beego和bee的开发使用

≡放荡痞女 提交于 2019-11-27 13:11:45
Golang语言简洁、明细,语法级支持协程、通道、err,非常诱惑人。平时也看了看Golang的语法,正苦于没有需求,我想把beego的源码搬过来看看。 首先,第一步:beego环境的搭建 在我之前看书的时候,有自己build package的过程,所以有过GOPATH的配置,本人电脑的go env 如下: GOARCH="amd64" GOBIN="" GOCHAR="6" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/lishuming/go" GORACE="" GOROOT="/usr/local/go" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" TERM="dumb" CC="gcc" GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common" CXX="g++" CGO_ENABLED="1" 所以我就在GOPATH/src下下载了beego源码 本来是git clone beego呢,可发现在beego源码里默认package了"github.com/astaxie/beego",所以只能使用教程的方法(参考:http://beego.me/quickstart) $

一个小事例,了解golang通道阻塞模式

删除回忆录丶 提交于 2019-11-27 12:30:54
在学习golang中,channel真的是让人捉摸不透的东西,本来我自以为我理解了协程阻塞的用法了,结果就下面这个小例子,我还是在打印输出后才搞明白到底怎么回事? 当然了,这也是我自身对协程这块不太熟造成的呀,另外,学习还真不能想当然,尤其是编程这块,真是要多实践,有时候你不经意的一点小举动,可能都会让你学到东西,甚至让你受益非浅的。 下面就是那个小例子,通过输出调试看结果后,也让我比以前更了解这个channel阻塞模式了。 package main import ( "fmt" "sync" ) var wg sync.WaitGroup var printChar chan int func prinNums() { defer wg.Done() for i:=0;i < 2; i++ { printChar <- 1111 fmt.Println(<-printChar) } } func printChars(){ defer wg.Done() for i:=0;i < 2; i++ { fmt.Println("阻1") fmt.Println(<-printChar) fmt.Println("阻2") fmt.Println("出来1") printChar <- 1222 fmt.Println("出来2") } } func main(){ printChar

深入研究 VS Code for Golang

a 夏天 提交于 2019-11-27 10:30:43
1. 前提 Visual Studio Code (以下简称: VS Code) 是微软的跨平台的开源IDE,目前已经进入了 1.0 的正式版本. 由于功能强大,预设就能 debug python, node.js 和 java script .玩了一两天,将所有与 Golang 相关常用到的情境加以记录下来,希望能够帮助到正在学习的朋友。 2. 语言预定 第一次安裝VS Code,会发现它有一个非常贴心的功能.就是他会把你的IDE UI安装成中文界面. 首先,先修改 locale 将 “中文” VS Code 改回英文界面: 按下 F1键 选择“配置语言”(找不到请使用搜索) locale 改成 “en-US” 重启 VS Code 3. 安装 vscode-go 安裝 VS Code 1.0.0 以上版本 cmd + shift + p Install Extension Go 4. vscode-go 基本配置 cmd + , 如果你使用 homebrew 可以设置 "go.goroot": "/usr/local/opt/go/libexec", 如果不是,请将该目录指向 $GOROOT 5. 常用快捷键 (F1 或是 Shift + cmd + p / Ctrl + Shift + p) command palette: 打开命令列,可以跑一些 IDE 的指令:比如安装

vscode/golang

十年热恋 提交于 2019-11-27 10:14:43
先配置环境变量 gopath goroot go111module=on goproxy=https://goproxy.io Go:VSCode官方的Golang插件 Todo Tree:搜索代码中的//TODO和//FIXME注释,集中显示 koroFileHeader:生成文件头部注释 vscode-proto3:Protobuf文件的语法高亮显示 插件 https://github.com/Microsoft/vscode-go/wiki/Go-tools-that-the-Go-extension-depends-on dlv: https://github.com/go-delve/delve/blob/master/Documentation/installation/windows/install.md 在内嵌的terminal(默认powershell)中操作 ls env: 显示所有环境变量 ls env:$VAR 显示指定环境变量 env:$VAR=val 设置环境变量 来源: https://www.cnblogs.com/dablyo/p/11358590.html

golang中,slice的几个易混淆点

对着背影说爱祢 提交于 2019-11-27 10:11:40
slice在golang中是最常用的类型,一般可以把它作为数组使用,但是比数组要高效呀。不过,我感觉这个东西用的不好坑太多了。还是需要了解下他底层的实现 slice的结构定义 type slice struct { array unsafe.Pointer len int cap int } 看结构定义,就三个字段,那个指针指向的就是底层数组,所以说slice的底层结构就是数组。 slice的声明 第一种方式 var s []int #和数组差不多,[]中间不要数字 第二种方式 s :=[]int{} 第三种方式 s :=make([]int,len,cap) len 表示元素的实际数量 cap 表示可以容纳元素的最大个数 以上三种定义是有区别的,第一种定义的s值为nil slice,其它两种为empty slice.要编码时要加以区分 slice扩容逻辑 如果slice容量足够容纳新增的元素,那么不会扩容。 如果新增元素后容量不足,则会扩容为原容量的 2 倍大小,如果原 slice 容量大于1024,那扩容后的容量等于每次扩容前增加 1/4。同时将原来的数据拷贝到新的数组中,所以还是要合理使用扩容。 slice的几个混淆点 一、slice作参数传递 slice作参数传递时,虽然是值传递(拷贝一份),但是slice的内部指针,指向的还是同一个数组是引用,所以会有影响。 func

golang--安装golang并安装grpc-grpcgateway环境

隐身守侯 提交于 2019-11-27 09:59:59
安装goland环境 下载golang安装包,国内环境打开 https://studygolang.com/dl ,国外环境打开 https://golang.google.cn/dl/ 下载对应系统的安装包,这里以linux环境为例。 wget https://dl.google.com/go/go1.12.8.linux-amd64.tar.gz tar xvf go1.12.8.linux-amd64.tar.gz 来源: https://www.cnblogs.com/peilanluo/p/11357539.html

golang逃逸分析

一笑奈何 提交于 2019-11-27 09:58:45
带GC语言给我们程序的编写带来了极大的便利,但是与此同时屏蔽了很多底层的细节,比如一个对象是在栈上分配还是在堆上分配。对于普通的代码来说虽然不需要关心这么多,但是作为强迫症程序猿,还是希望能让自己写出来的代码性能最优,所以还是需要了解什么是逃逸,以及如何判断是否发生了逃逸。 什么是堆和栈? 首先需要知道,我们说的堆和栈是啥。这个可不是数据结构里面的"堆"和"栈",而是操作系统里面的概念。 栈 在程序中,每个函数块都会有自己的内存区域用来存自己的局部变量(内存占用少)、返回地址、返回值之类的数据,这一块内存区域有特定的结构和寻址方式,大小在编译时已经确定,寻址起来也十分迅速,开销很少。这一块内存地址称为栈。栈是线程级别的,大小在创建的时候已经确定,所以当数据太大的时候,就会发生"stack overflow"。 堆 在程序中,全局变量、内存占用大的局部变量、发生了逃逸的局部变量存在的地方就是堆,这一块内存没有特定的结构,也没有固定的大小,可以根据需要进行调整。简单来说,有大量数据要存的时候,就存在堆里面。堆是进程级别的。当一个变量需要分配在堆上的时候,开销会比较大,对于go这种带GC的语言来说,也会增加gc压力,同时也容易造成内存碎片。 为什么有的变量要分配在堆,有的要分配在栈? 这个问题要从C++说起了。在C++中,假设我们有以下代码: ```c++ int* f1() { int