golang

day 44 (作业)

我们两清 提交于 2019-12-04 12:12:00
<!DOCTYPE html> Title */ /*--> */ 用户名:二娃 年龄:保密 特长:从小与水结下不解之缘,水量特别大 #Python #Java #Golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字 公元1234年 事成之后有必有重谢 #python #java #golang 帮葫芦兄弟寻找爷爷的真实名字

golang之vscode环境配置

本小妞迷上赌 提交于 2019-12-04 08:16:53
go语言开发,选择vscode作为IDE工具也是一个不错的选择,毕竟goland收费,老是破解也挺麻烦,处了这点,不过说实话挺好用的。vscode的话相对来说就毕竟原始,适合初学者。 1、vscode首先需要安装go语言插件,在vscode扩展中搜索“go”,如下图,下载安装go插件 2、vscode环境配置 打开vscode设置,菜单File -> Preferences -> Settings,Extensions=>Go configuration找到GoPath设置项,选择Edit in setting.json 设置GoPath(go工作路径)和GoRoot(go安装包路径)路径,如下图 3、vscode会自动弹框提示安装其他插件(编写go代码时),如下图,选择InstallAll 不过由于网络限制问,基本是安装不成功 解决办法,把安装失败信息拷贝出来,然后一个个手动下载到go工作目录src对应目录下 以github.com开头的,如下这些,在src目录下创建一个目录,命名为github Installing github.com/mdempsky/gocode FAILED Installing github.com/uudashr/gopkgs/cmd/gopkgs FAILED Installing github.com/ramya-rao-a/go-outline

基于beego一键创建RESTFul应用

筅森魡賤 提交于 2019-12-04 07:56:38
API应用开发入门 Go是非常适合用来开发API应用的,而且我认为也是Go相对于其他动态语言的最大优势应用。beego在开发API应用方面提供了非常强大和快速的工具,方便用户快速的建立API应用原型,专心业务逻辑就行了。 快速建立原型 bee快速开发工具提供了一个API应用建立的工具,在gopath/src下的任意目录执行如下命令就可以快速的建立一个API应用: bee api beeapi 应用的目录结构 应用的目录结构如下所示: ├── conf │ └── app.conf ├── controllers │ └── default.go ├── models │ └── object.go └── main.go 源码解析 app.conf里面主要针对API的配置如下: autorender = false //API应用不需要模板渲染,所以关闭自动渲染 copyrequestbody = true //RESTFul应用发送信息的时候是raw body,而不是普通的form表单,所以需要额外的读取body信息 main.go文件主要针对RESTFul的路由注册 beego.RESTRouter("/object", &controllers.ObejctController{}) 这个路由可以匹配如下的规则 URL HTTP Verb Functionality

关于golang中某些包无法下载的解决方法

不想你离开。 提交于 2019-12-04 07:09:10
由于某些不可描述的原因,我们 在go module 环境下(啥?这个不知道是啥?赶紧 恶补下 )进行go get xxxx时,会发现一些依赖库无法访问(不要问为什么无法访问)。 解决办法 戳这里:https://github.com/goproxyio/goproxy 这货可以把它干到本地,当然你可以直接使用它自己的地址 懒人方法如下: 1、 创建一个环境变量 叫做GOPROXY (大小写敏感),值是https://goproxy.io (必须是https。不要自己篡改url) 2、重启你的终端(如果是windows cmd的话。Linux 则export GOPROXY=https://goproxy.io ) ,然后 再正常执行 go get xxxxx —————————————————————- 目前阿里云也开放了代理服务 戳这里 http://mirrors.aliyun.com/goproxy/ 也就是说:设置成如下变量,就可以了 export GOPROXY=https://mirrors.aliyun.com/goproxy/ 来源: https://www.cnblogs.com/sunlong88/p/11845908.html

(十三)golang--程序流程控制

随声附和 提交于 2019-12-04 07:02:12
1.顺序控制   若没有判断,没有跳转,程序由上至下依次执行 2.分支控制 单分支 if 条件表达式 {   执行代码块 } 双分支 if 条件表达式 {   执行代码块1 } else {   执行代码块2 } 多分支 if 条件表达式 {   执行代码块1 } else if {   执行代码块2 } else {   执行代码块3 } 3.循环控制 来源: https://www.cnblogs.com/xiximayou/p/11845192.html

golang实现生产者消费者模型

十年热恋 提交于 2019-12-04 06:38:59
生产者消费者模型分析 操作系统中的经典模型,由若干个消费者和生产者,消费者消耗系统资源,生产者创造系统资源,资源的数量要保持在一个合理范围(小于数量上限,大约0)。而消费者和生产者是通过并发或并行方式访问系统资源的,需要保持资源的原子操作。 其实就是生产者线程增加资源数,如果资源数大于最大值则生产者线程挂起等待,当收到消费者线程的通知后继续生产。 消费者线程减少资源数,如果资源数为0,则消费者线程挂起,等待生产者通知后继续生产。 将该模型提炼成伪代码如下: func consume(){ Lock() if count <= 0 挂起等待(解锁,并等待资源数大于0) 收到系统通知资源数大约0,抢占加锁 count-- 如果当前资源数由最大值变少则通知生产者生产 ULock() } func produce(){ Lock() if count >= 最大值 挂起等待(解锁,并等待资源数小于最大值) 收到系统通知资源小于最大值,抢占加锁 count++ 如果当前资源数由最小值0增加则通知消费者可以消耗 ULock() }    consume()消耗资源,produce()生产资源,之前实现过C版本的该模型 http://www.limerence2017.com/2017/08/08/pthreadwait/ C方式实现的是抢占式的,线程切换开销较大

深度解密Go语言之 pprof

坚强是说给别人听的谎言 提交于 2019-12-04 05:29:28
目录 什么是 pprof pprof 的作用 pprof 如何使用 runtime/pprof net/http/pprof pprof 进阶 Russ Cox 实战 查找内存泄露 总结 参考资料 相信很多人都听过“雷神 3”关于性能优化的故事。在一个 3D 游戏引擎的源码里,John Carmack 将 1/sqrt(x) 这个函数的执行效率优化到了极致。 一般我们使用二分法,或者牛顿迭代法计算一个浮点数的平方根。但在这个函数里,作者使用了一个“魔数”,根本没有迭代,两步就直接算出了平方根。令人叹为观止! 因为它是最底层的函数,而游戏里涉及到大量的这种运算,使得在运算资源极其紧张的 DOS 时代,游戏也可以流畅地运行。这就是性能优化的魅力! 工作中,当业务量比较小的时候,用的机器也少,体会不到性能优化带来的收益。而当一个业务使用了几千台机器的时候,性能优化 20%,那就能省下几百台机器,一年能省几百万。省下来的这些钱,给员工发年终奖,那得多 Happy! 一般而言,性能分析可以从三个层次来考虑:应用层、系统层、代码层。 应用层主要是梳理业务方的使用方式,让他们更合理地使用,在满足使用方需求的前提下,减少无意义的调用;系统层关注服务的架构,例如增加一层缓存;代码层则关心函数的执行效率,例如使用效率更高的开方算法等。 做任何事,都要讲究方法。在很多情况下,迅速把事情最关键的部分完成

基于 golang 和 redis 实现的简易队列 gmq

你说的曾经没有我的故事 提交于 2019-12-04 05:00:33
1. 概述 gmq 是基于 redis 提供的特性,使用 go 语言开发的一个简单易用的队列;关于 redis 使用特性可以参考之前本人写过一篇很简陋的文章 Redis 实现队列 ; gmq 的灵感和设计是基于 有赞延迟队列设计 ,文章内容清晰而且很好理解,但是没有提供源码,在文章的最后也提到了一些未来架构方向; gmq 不是简单按照有赞延迟队列的设计实现功能,在它的基础上,做了一些修改和优化,主要如下: 功能上 多种任务模式,不单单只是延迟队列;例如:延迟队列,普通队列,优先级队列 架构上: 添加 job 由 dispatcher 调度分配各个 bucket ,而不是由 timer 每个 bucket 维护一个 timer ,而不是所有bucket一个 timer timer 每次扫描 bucket 到期 job 时,会一次性返回多个到期 job ,而不是每次只返回一个 job timer 的扫描时钟由 bucket 中下个 job 到期时间决定,而不是每秒扫描一次 2. 应用场景 延迟任务 延迟任务,例如用户下订单一直处于未支付状态,半个小时候自动关闭订单 异步任务 异步任务,一般用于耗时操作,例如群发邮件等批量操作 超时任务 规定时间内 (TTR) 没有执行完毕或程序被意外中断,则消息重新回到队列再次被消费,一般用于数据比较敏感,不容丢失的 优先级任务 当多个任务同时产生时

(八)golang--复杂类型之指针

半腔热情 提交于 2019-12-04 04:24:15
首先我们要明确: (1)基本数据类型:变量存的就是值,也叫值类型; (2)获取变量的地址,用&,例如var num int,获取num的地址:&num; (3)指针类型:变量存的是一个地址,这个地址指向的空间存的才是值,例如var ptr *int = &num; (4)获取指针类型所指向的值,使用*,例如var *ptr int,使用*ptr获取ptr指向的值; package main import ( "fmt" ) func main() { var num int = 1 var ptr *int = &num fmt.Println("num的地址是:", &num) fmt.Println("ptr的值是:", ptr) fmt.Println("ptr的地址是:", &ptr) } ptr是一个指针,它的值是num的地址,同时,它自己也会有一个地址。我们可以通过地址定位到变量并改变变量的值: package main import ( "fmt" ) func main() { var num int = 1 var ptr *int fmt.Println("num的值是:", num) ptr = &num *ptr = 10 fmt.Println("num的值是:", num) } 我们还可以通过切换指针的值来改变不同变量的值

Golang的json包

随声附和 提交于 2019-12-04 04:18:46
encoding/json encoding/json 是官方提供的标准json, 实现 RFC 7159中 定义的JSON编码和解码。使用的时候需要预定义 struct ,原理是通过 reflection 和 interface 来完成工作, 性能低。 常用的接口: func Marshal(v interface{}) ([]byte, error) 生成JSON func Unmarshal(data []byte, v interface{}) error 解析JSON到 struct 示例1 生成JSON: type ColorGroup struct { ID int Name string Colors []string } group := ColorGroup{ ID: 1, Name: "Reds", Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, } b, err := json.Marshal(group) if err != nil { fmt.Println("error:", err) } os.Stdout.Write(b) Output: {"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]} 示例2 解析JSON