golang

Golang开山

房东的猫 提交于 2019-11-30 12:36:29
Golang 开发工具:vscode(暂定) (1) go文件的后缀名是 .go (2) 每个go文件的开头都要 package xx,以此来声明属于哪个包,也就是说go语言里的每个go文件都必须属于一个包。 (3) import “fmt” ​ 表示引入一个包,包名为 fmt,引入该包后,就可以使用这个包里的函数,比如:fmt.Println() (4) func main(){ ​ } ​ func 是一个关键字,表示一个函数。 ​ main 是函数名,是一个主函数,即我们程序的入口。 (5) fmt.Println("hello") ​ 表示调用 fmt 包的函数,输出内容。 通过 go build 命令对该 go 文件进行变异,生成 .exe 文件。 ​ 注:先切换到你的main文件夹下,然后用 dir 命令可以看见这个文件夹下的所有文件,调用 go build +文件名的命令,就会生成一个exe文件。 这样就执行了这个文件,打印出了我们要的内容。 也可以直接用 go run +文件名的方式运行文件,虽然不用编译生成exe文件,但是运行速度变慢了,其实他在底层还是经历了一次编译,因为计算机无法识别你的go代码。 在真正的工作过程中,依然是使用 go build 命令。 Golang 执行流程分析 以下是两种方法执行文件方式的执行流程 两种执行流程的方式区别 ​ 1)

Golang Daily - Common

℡╲_俬逩灬. 提交于 2019-11-30 12:05:26
生成随机数 func RandStringRunes(n int) string { // 数字/小写字母/大写字母 var letterRunes = []rune("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") rand.Seed(time.Now().UnixNano()) b := make([]rune, n) for i := range b { b[i] = letterRunes[rand.Intn(len(letterRunes))] } return string(b) } rand.Seed - 填入随机数种子,一样的种子产生一样的随机数 rand.Intn - rand.Intn(n int)得到的随机数int i,0 <= i < n 备注: 可以使用go test测试以上代码,但在go playground无效。 来源: https://www.cnblogs.com/neen/p/11583657.html

[golang]在Go中处理时区

☆樱花仙子☆ 提交于 2019-11-30 11:55:48
许多新手开发人员在处理时区时感到困惑。 如何将它们存储在数据库中 如何在Go中解析它们 当将时区存储在数据库中时,请始终遵循一个标准时区,理想的做法是保存UTC时间,并在显示时区时根据需要将其转化为各种时区。 以MYSQL作为存储时间的示例 以下解决方案与DB无关。根据MySQL文档,有两种可以在MySQL存储时间的方法。 DATETIME --DATETIME类型用于包含日期和时间部分的值。MYSQL检索DATETIME并以 'YYYY-MM-DD hh:mm:ss' 格式显示值。支持的范围是 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' 。 TIMESTAMP -TIMESTAMP数据类型用于同时包含日期和时间部分的值。 UTC TIMESTAMP 的范围是 UTC。 '1970-01-01 00:00:01' '2038-01-19 03:14:07'。 在本文中,我将使用DATETIME为例。 现在,另一个也是最重要的事情是读取并将其转化为其他时区。 Go时间时区的转换 下面的代码是展示我们如何在Go语言中做时区的转换. 首先让我们来定义地区和时区的的字典. 时区列表IANA时区标识可以从这里得到 Time Zones , package main import ( "fmt" "errors" "time" ) type

[golang]A modern, fast and scalable websocket framework with elegant API written in Go

对着背影说爱祢 提交于 2019-11-30 11:54:12
A modern, fast and scalable websocket framework with elegant API written in Go http://bit.ly/neffos-wiki https://github.com/kataras/neffos About neffos Neffos is a cross-platform real-time framework with expressive, elegant API written in Go . Neffos takes the pain out of development by easing common tasks used in real-time backend and frontend applications such as: Scale-out using redis or nats * Adaptive request upgradation and server dialing Acknowledgements Namespaces Rooms Broadcast Event-Driven architecture Request-Response architecture Error Awareness Asynchronous Broadcast Timeouts

golang 并发demo 写入 redis

…衆ロ難τιáo~ 提交于 2019-11-30 10:32:11
原文链接: golang 并发demo 写入 redis 源代码: package main import ( "fmt" "runtime" "strconv" "time" "gopkg.in/redis.v3" ) var ( jobnum = runtime.NumCPU() //每次写入redis的数量 //除以 jobnum 为了保证改变了任务数, 总量不变, 便于测试 procnum = 100000 / jobnum ) type Job struct { ID string Client *redis.Client Result chan<- string } func waitJobs(dones <-chan struct{}, results chan string) { working := jobnum done := false for { select { case result := <-results: println(result) case <-dones: working-- if working <= 0 { done = true } default: if done { return } } } } func initClient(poolSize int) *redis.Client { client := redis

阿里云CentOS服务器下安装Golang1.13并配置代理

一个人想着一个人 提交于 2019-11-30 10:03:28
下载到 /usr/local 位置并解压 cd /usr/local wget https://studygolang.com/dl/golang/go1.13.linux-amd64.tar.gz tar -xzvf go1.13.linux-amd64.tar.gz 在 $HOME 位置创建 go 工作目录 cd mkdir go 配置环境变量并设置代理 vim /etc/profile export PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/go export GO111MODULE=auto export GOPROXY=https://goproxy.cn,direct source /etc/profile 安装 git yum update yum install -y git 注 :在 root 下或添加 sudo 命令运行以上。 来源: https://www.cnblogs.com/GaiHeiluKamei/p/11577788.html

golang框架

霸气de小男生 提交于 2019-11-30 09:23:22
来自:码农网,译者:小峰 链接:www.codeceo.com/article/golang-framework-ide-tools.html 自推出以来,Google的Go编程语言(Golang)越来越受主流用户的欢迎。在2016年12月的一份调研中,3,595名受访者中有89%表明他们在工作中或工作以外用Go语言编程。 此外,在编程语言中,Go语言在专业知识和偏好方面排名最高。2017年7月,在Tiobe的年度编程语言排名中,Go语言从去年的第55名一跃跳到了第10名。 显然,Go语言吸引了来自不同学科的许多程序员和软件开发外包专业人士。可以这么说,这全都是因为Go语言的易用性。 作为一种编译型的开源编程语言,Go语言能使开发人员轻松构建简单可靠又高效的软件。它是更保守的语言,如C和C ++的创新和演变的产物。 使用Go语言,可以减少代码输入量,并且编写稳健的API而不牺牲性能变得更加容易。 Go语言旨在实现可扩展性和并发性,从而实现优化。编译器可以在运行时前执行所有代码检查工作。 我们收罗了Golang的顶级框架、IDE和工具列表,以供大家快速参考。建议添加到浏览器书签中,以便随时查看! Golang框架 Web框架可以帮助开发人员尽可能方便快捷地构建应用程序。Go语言还比较新,所以使用的框架带有充足的文档很重要。 这里有9个框架可帮助你使用Go语言构建项目。 1、Revel

golang rpc demo

安稳与你 提交于 2019-11-30 07:18:06
RPC工作流程图 1.调用客户端句柄;执行传送参数 2.调用本地系统内核发送网络消息 3.消息传送到远程主机 4.服务器句柄得到消息并取得参数 5.执行远程过程 6.执行的过程将结果返回服务器句柄 7.服务器句柄返回结果,调用远程系统内核 8.消息传回本地主机 9.客户句柄由内核接收消息 10.客户接收句柄返回的数据 Go语言提供对RPC的支持: HTTP、TCP、JSPNRPC ,但是在 Go 中 RPC 是独一无二的,它采用了 GoLang Gob 编码,只能支持Go语言! GoLang Gob:是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。 HTTP RPC Demo 服务端的代码 package main import ( "errors" "fmt" "net/http" "net/rpc" ) type Arith int func rpcDemo() { arith := new(Arith) fmt.Println("arith===", arith) rpc.Register(arith) //HandleHTTP将RPC消息的HTTP处理程序注册到Debug服务器 /

Go语言(golang)新发布的1.13中的Error Wrapping深度分析

元气小坏坏 提交于 2019-11-30 07:14:45
Go 1.13发布的功能还有一个值得深入研究的,就是对Error的增强,也是今天我们要分析的 Error Wrapping. 背景 做Go语言开发的,肯定经常用 error ,但是我们也知道 error 非常弱,只能自带一串文本其他什么都做不了,比如给已经存在的 error 增加一些附加文本,增加堆栈信息等都做不了。如果我们想给 error 增加一些附加文本怎么做呢?有两种办法: 第一种: newErr:=fmt.Errorf("数据上传问题: %v", err) 通过 fmt.Errorf 函数,基于已经存在的 err 再生成一个新的 newErr ,然后附加上我们想添加的文本信息。这种办法比较方便,但是问题也很明显,我们丢失了原来的 err ,因为它已经被我们的 fmt.Errorf 函数转成一个新的字符串了。 第二种: func main() { newErr := MyError{err, "数据上传问题"}}type MyError struct { err error msg string}func (e *MyError) Error() string { return e.err.Error() + e.msg} 这种方式就是我们自定义自己的 struct ,添加用于存储我们需要额外信息的字段,我这里是 err 和 msg ,分别存储原始 err 和新附加的出错信息

GoLang中面向对象的三大特性

喜欢而已 提交于 2019-11-30 06:18:00
有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的;继承,就是指 class 之间可以相互继承属性和函数;多态,主要就是用统一的接口来处理通用的逻辑,每个 class 只需要按照接口实现自己的回调函数就可以了。   作为集大成者的 Go 语言,自然不会在面向对象上面无所作为。相比较 java、C#、C++ 等面向对象语言而言,它的面向对象更简单,也更容易理解。下面,我们不妨用三个简单的例子来说明一下 go 语言下的面向对象是什么样的。 封装特性 package main import "fmt" type data struct { val int } func (p_data *data) set(num int) { p_data.val = num } func (p_data *data) show() { fmt.Println(p_data.val) } func main() { p_data := &data{4} p_data.set(5) p_data.show() } 继承特性 package main import "fmt" type parent struct { val int } type child struct {