gin

2020全新升级版-Google资深工程师深度讲解Go语言网盘下载

荒凉一梦 提交于 2020-10-01 22:39:50
下载地址: 百度网盘 适合人群及技术储备要求 如果你已经掌握了一门编程语言,想转型Go语言工程师, 或者是对Go的基础语法有简单的认识,想更深层次的了解Go语言 那么本门课程非常适合你 技术储备要求: 至少掌握一门编程语言 具有一定项目基础和工作经验者学习效果更佳 第1章 课程介绍 欢迎大家来到深度讲解Go语言的课堂。本课程将从基本语法讲起,逐渐深入,帮助同学深度理解Go语言面向接口,函数式编程,错误处理,测试,并行计算等元素,并带领大家实现一个分布式爬虫的实战项目。 1-1 Google资深工程师深度讲解go语言 试看 1-2 安装与环境 1-3 国内镜像配置 1-4 IntelliJ Idea 的安装和配置 1-5 vscode 的安装和配置 第2章 基础语法 量,常量,类型,选择,循环,函数,指针,本章节带领大家学习一门新语言所需的必备语法知识。让大家对Go语言有一个初步的认识! 2-1 变量定义 2-2 内建变量类型 2-3 常量与枚举 2-4 条件语句 2-5 循环 2-6 函数 2-7 指针 第3章 内建容器 本章节我们来学习数组,切片,Map和字符串。在Go语言中,我们一般不直接使用数组,而是使用切片来管理线性表结构,它的语法类似python的list,不过更强大哦。当然,Map和字符串的学习也是必不可少。掌握至此,我们就可以写一些简单的算法了

Effective GO

一曲冷凌霜 提交于 2020-09-27 02:58:21
最近有人推荐Effective Go,这本书算是给初学者看的,因为已经看多很多Go方面的书了,所以再看这本书,总体收获较小,文章地址:https://learnku.com/docs/effective-go/2020 讲述的知识里,有几点印象深刻一些,在这里分享出来 格式化 go fmt:https://www.jianshu.com/p/104b33439ac2 new和make区别 new:用来分配内存的内建函数, 但与其它语言中的同名函数不同,它不会 初始化 内存,只会将内存 置零 。 也就是说, new(T) 会为类型为 T 的新项分配已置零的内存空间, 并返回它的地址,也就是一个类型为 *T make:只用于创建切片、映射和信道,并返回类型为 T (而非 *T )的一个 已初始化 (而非 置零 )的值。 出现这种用差异的原因在于,这三种类型本质上为引用数据类型,它们在使用前必须初始化 数组和切片的关系 切片是对数组的引用 如果切片范围没有超过数组长度,则两者可以认为是完全相同的东西 如果切片范围超过数组长度,会自动创建一个新的底层数组,取消对原数组的引用,数组和切片便分隔开了 type type File struct/type Integer int:这是结构体,也是类型,实现了函数便是类 type IFile interface:这是接口

PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL) (包含SQL优化内容)

北城余情 提交于 2020-09-24 13:25:55
目录 背景 一、安装pg_stat_statements 二、加载pg_stat_statements模块 三、配置pg_stat_statements采样参数 四、创建pg_stat_statements extension 五、分析TOP SQL pg_stat_statements输出内容介绍 最耗IO SQL 最耗时 SQL 响应时间抖动最严重 SQL 最耗共享内存 SQL 最耗临时空间 SQL 六、重置统计信息 慢SQL到底慢在哪里? 七、慢SQL、TOP SQL优化示例 八、常见优化点汇总 参考 背景 数据库是较大型的应用,对于繁忙的数据库,需要消耗大量的内存、CPU、IO、网络资源。 SQL优化是数据库优化的手段之一,优化什么SQL效果最佳呢?首先要了解最耗费资源的SQL,即TOP SQL。 从哪里可以了解数据库的资源都被哪些SQL消耗掉了呢? 资源分为多个维度,CPU,内存,IO等。如何能了解各个维度层面的TOP SQL呢? pg_stat_statements插件可以用于统计数据库的资源开销,分析TOP SQL。 一、安装pg_stat_statements 如果您使用的是云数据库,跳过安装,到create extension 部分。 pg_stat_statements是PostgreSQL的核心插件之一。可以在编译PostgreSQL时安装,也可以单独安装。

vue-element-admin 后台动态加载菜单

纵饮孤独 提交于 2020-08-18 20:53:21
dynamic-router 项目地址 gitee 前端: 基于 vue-element-admin 延用公司 【用户中心】那一套自己魔改的版本,在此基础之上重构。 后端: Go 的语法简洁,开发速度快,所以后端使用了 Go 结合 Gin 框架,做了一个简单的 CURD 服务。(主要是因为没人手协助,也只好自己写一个了。)这里不过多介绍后端。 前言 动态路由 由于公司业务需要,在权限验证与安全方面,要求是菜单根据权限动态控制。 在现有的项目当中,通过基于 vue-element-admin 项目提供的菜单权限控制,无法满足公司的具体业务需要。 实际上主要的目的是通过后端控制菜单权限。 因此也迭代出了两个版本, 版本二 也只是提供一个设计思路,具体复杂实现基于此套是是可以满足的。这里只做简单的阐述,具体实现可以结合源码。 版本一 在公司项目 【用户中心】 中,我采用的是通过后端菜单列表以及权限标识,做深度递归和匹配。这么写一部分原因是因为是在现有的接口文档基础之上做 魔改 ,第二点也是因为代码耦合度比较高,重构的话周期长(前后端都需要改,前端工作量会很大)。 Interceptor router.beforeEach(async (to, from, next) => { NProgress.start(); if (getToken()) { if (to.path ===

gin教程

随声附和 提交于 2020-08-18 04:51:32
Golang Gin 实战(十)| XML渲染 Golang Gin 实战(九)| JSONP跨域和劫持 Golang Gin 实战(八)| JSON渲染输出 Golang Gin 实战(七)| 分组路由源代码分析 Golang Gin 实战(六)| 获取Form表单参数和原理分析 Golang Gin 实战(五)| 接收数组和map Golang Gin 实战(四)| URL查询参数的获取和原理分析 Golang Gin 实战(三)| 路由参数 Golang Gin 实战(二)| 简便的Restful API 实现 Golang Gin 实战(一)| 快速安装入门 来源: oschina 链接: https://my.oschina.net/u/4324558/blog/4302204

图神经网络的表达能力,究竟有多强大?

≯℡__Kan透↙ 提交于 2020-08-16 08:44:21
     作者 | Mr Bear   编辑 | 丛 末   近年来,随着图神经网络在各个领域的火热应用,越来越多的学者试图从图论的角度对图神经网络的表达能力进行理论分析,并基于这些理论分析开发出了性能强大的模型。然而,在实际应用中,这些在理论上非常强大的模型的性能往往会受到计算复杂度等因素的限制。   本文作者 Michael Bronstei n 是一名来 自帝国理工学院的教授,同时也是 Twitter 图机器学习项目组的负责人。在本文中,他深入浅出地介绍了近年来分析图神经网络表达能力的工作,并介绍了他们对于该领域未来发展方向的思考。    1    图神经网络和 WL 图同构测试之间的关系      众所周知,传统的前馈神经网络(多层感知机)是一种通用函数近似器:它们能够以任意的准确率逼近任意的平滑函数。对于近期兴起的图神经网络来说,其表征性质还不太为人所知。在实验中,我们经常可以看到图神经网络在某些数据集上性能优异,但同时又在另一些数据集上表现令人失望。   为了探究造成这种现象的根本原因,我们不得不思考一个问题:图神经网络究竟有多强大?   在探究这一问题的过程中,我们所面临的一个挑战是:实际应用场景下使用的图往往是连续结构和离散结构(节点、边特征、连通性)的组合。因此,该问题可以被表述为不同的形式。一种可能的形式化定义是:图神经网络是否能够区分不同类型的图结构。在图论中

[Go] gin-jwt 业务逻辑中使用实例化的 middleware 的方式

纵然是瞬间 提交于 2020-08-16 02:07:07
依然需要按文档所示实例化一个 authMiddleware。 在路由组中使用的方式是 authMiddleware.MiddlewareFunc()。 通过追踪 MiddlewareFunc 可以知道一个大概的处理逻辑。 在具体的业务逻辑代码中,注意依然需要使用同一个 authMiddleware 实例以便使用相同的配置。 调用链是:MiddlewareFunc() -> middlewareImpl() -> GetClaimsFromJWT() 所以在代码中使用 GetClaimsFromJWT 即可,伪代码如下: authMiddleware := middleware.GinJwtMiddleware() _, err := authMiddleware.GetClaimsFromJWT(c) if err != nil { log.Println("no permission") } [Go] gin-jwt 中间件的请求流程与使用思路 Link: https://www.cnblogs.com/farwish/p/12989294.html 来源: oschina 链接: https://my.oschina.net/u/4400968/blog/4295428

postgresql的一些参数优化值

主宰稳场 提交于 2020-08-15 04:53:40
9.5的常用的一些设置,自己mark一下防止丢失;参数用途的说明,不做说明,仅为自己记录 <pre> max_connections = 3000 work_mem = 8MB shared_buffers = 1GB fsync = off synchronous_commit = off commit_delay = 500 commit_siblings = 25 checkpoint_completion_target = 0.9 autovacuum = on bgwriter_delay=10ms full_page_writes=off wal_writer_delay=10ms max_wal_size=32GB hot_standby=on wal_receiver_status_interval=1s hot_standby_feedback=on random_page_cost=1.0 maintenance_work_mem=64MB autovacuum_work_mem=64MB archive_mode=off enable_nestloop=off </pre> 9.6的并行查询参数,黑体标明, 官方说明: <pre> <b>Parallel query execution is not (yet) enabled by default. To

Gin框架-[WARNING] Headers were already written. Wanted to override status code 400 with 200

只愿长相守 提交于 2020-08-15 02:28:12
Gin框架编写PUT接口使用BindJSON绑定参数报错,当结构体绑定参数有误时, 状态码为400,强制返回200,结果code还是400. 原因 : BindXXX方法都return c.MustBindWith(obj, binding.XXX)。如果绑定错误,则c.AbortWithError(http.StatusBadRequest, err).SetType(ErrorTypeBind)。这将响应状态码设置为400,并将Content-Type标题设置为text/plain; charset=utf-8。如果强制修改成200,就会警告[WARNING] Headers were already written. Wanted to override status code 400 with 200。 解决方法 : 绑定结构体的方法把BindJSON改为ShouldBind。 来源: oschina 链接: https://my.oschina.net/muze/blog/4437606

[Go] Golang练习项目-web客服系统即时通讯websocket项目go-fly

限于喜欢 提交于 2020-08-14 15:54:46
基于GO语言实现的web客服即时通讯与客服管理系统。 1.使用gin http框架实现restful风格的API 2.使用jwt-go配合gin中间件实现无状态的jwt登陆认证 3.使用casbin配合gin中间件实现权限控制 4.使用gin以及template包的模板语法进行展示界面 5.使用go modoule解决依赖问题 6.使用go-imap实现邮件的列表展示和读取 7.使用go-smtp实现发送邮件 8.使用github.com/gorilla/websocket实现即时通讯 9.使用gorm配合mysql实现数据存储 10.充分实践了struct,interface,map,slice,for range,groutine和channel管道等基础知识 安装使用 先安装和运行mysql , 创建go-fly数据库,并导入*.sql创建表结构与数据 在go get github.com/taoshihan1991/go-fly ,进入$GOPATH/src/github.com/taoshihan1991/go-fly 目录 在config目录mysql.json中配置数据库 { "Server": "127.0.0.1", "Port": "3306", "Database": "go-fly", "Username": "go-fly", "Password":