golang 泛型

https://draveness.me/whys-the-design-go-generics/ 泛型困境 泛型困境使我们必须在开发效率、编译速度和运行速度三者中选择两个; 目前社区中的 Go 语言方案都是有缺陷的,而 Go 团队认为泛型的支持不够紧急; 对于泛型编程的通常有以下三种处理方式: 1.(C语言)放弃泛型。这样苦了程序员,但是也降低了语言的复杂性。 2.(C++语言)编译期特化或者大量地展开代码。这样苦了编译器。编绎器生成一堆代码,而大部分是无用的,需要一个很好的链接器去清除重复的...阅读全文

简书 2021-02-16 13:32:34 小幸运Q

利用 go/ast 语法树做代码生成

需求概述go.uber.org/zap 日志包性能很好,但是用起来很不方便,虽然新版本添加了 global 方法,但仍然别扭:zap.S().Info()。现在我们的需求就是将 zap 的 sugaredLogger 封装成一个包,让它像 logrus 一样易用,直接调用包内函数:log.Info()。我们只需要找到`SugaredLogger这个 type 拥有的 Exported 方法,将其改为函数,函数体调用其同名方法:func Info(args ...interface{}) { _g...阅读全文

Segmentfault 2021-02-19 22:53:02 无风

2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都...

2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。 福哥答案2021-02-15: 这道题直接背,用自然智慧很难想到,平时需要锻炼敏感度。 1.递归。有代码。 先手 依赖 后手递归加数组元素的最大值。 后手 依赖 先手递归的最小值。 为了方便记忆,先手选大的,后手被迫选小的。实际上,先手和后手都是尽自己的努力选大的。这表...阅读全文

简书 2021-02-16 10:32:37 福大大架构师每日一题

golang 读写锁 sync.RWMutex

golang 读写锁 sync.RWMutex 之前的博客讲了使用互斥锁 sync.Mutex 来保证同一个时刻只有一个goroutine可以访问临界区(内部有共享变量)。当时更多时候,goroutine不是要修改共享变量,只是要读取就行,而互斥锁是完全互斥的。针对这种情况,golang中提供了读写锁 **sync.RWMutex ** ——它 不限制资源的并发读,但是读写、写写操作无法并行执行,这种锁叫作“多读单写”锁(multiple readers, single writer lock)...阅读全文

简书 2021-02-16 10:32:36 阿斯顿法

Ubuntu配置Golang

下载golang安装包,解压后在安装包目录下输入命令 sudo cp -r ./go usr/local 在home目录创建 gowork文件夹 cd /home mkdir gowork cd gowork mkdir bin src pkg 配置 ~/.bashrc 和 /etc/profile 在最后一行加入以下内容(发现只配置/etc/profile只在当前窗口有效,配置完成后source一下,重启确认一下): # golang setting export GOROOT=/usr/lo...阅读全文

简书 2021-02-16 10:32:35 _沉默的疯子

Golang学习笔记for循环语句

title: "Golang学习笔记for循环语句" date: 2021-02-09T23:33:13+08:00 draft: true tags: ['go'] author: "dadigang" author_cn: "大地缸" personal: "http://www.real007.cn" 关于作者 http://www.real007.cn/about Golang学习笔记(九)for循环语句 Golang的for相较于java,并不需要使用()括起来,基础for循环格式为fo...阅读全文

简书 2021-02-16 10:32:35 大地缸

手撸golang 基本数据结构与算法 栈

手撸golang 基本数据结构与算法 栈 缘起 最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一) 本系列笔记拟采用golang练习之 栈 栈(也叫堆栈)也是一种数据呈线性排列的数据结构, 不过在这种结构中, 我们只能访问最新添加的数据。 栈就像是一摞书, 拿到新书时我们会把它放在书堆的最上面, 取书时也只能从最上面的新书开始取。 像栈这种最后添加的数据最先被取出, 即“后进先出”的结构, 我们称为Last In First Out,简称LIFO。 摘自 <<我的第一本算法书>>(【日...阅读全文

简书 2021-02-16 10:32:34 老罗话编程

手撸golang 基本数据结构与算法 栈

手撸golang 基本数据结构与算法 栈缘起最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一)本系列笔记拟采用golang练习之栈栈(也叫堆栈)也是一种数据呈线性排列的数据结构, 不过在这种结构中, 我们只能访问最新添加的数据。 栈就像是一摞书, 拿到新书时我们会把它放在书堆的最上面, 取书时也只能从最上面的新书开始取。 像栈这种最后添加的数据最先被取出, 即“后进先出”的结构, 我们称为Last In First Out,简称LIFO。 摘自 <<我的第一本算法书>>(【日】石田保辉...阅读全文

Segmentfault 2021-02-19 22:53:22 ioly

手撸golang 基本数据结构与算法 链表

手撸golang 基本数据结构与算法 链表 缘起 最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一) 本系列笔记拟采用golang练习之 链表 链表是数据结构之一,其中的数据呈线性排列。 每个数据节点都有1个“指针”,它指向下一个数据的内存地址。 访问数据时,我们需要从链表头部开始查找(线性查找), 如果目标数据在链表最后的话,需要的时间就是O(n)。 另外,添加数据只需要更改两个指针的指向,所以耗费的时间与n无关。 如果已经到达了添加数据的位置,那么添加操作只需花费O(1)的时间。 ...阅读全文

简书 2021-02-15 20:33:25 老罗话编程

手撸golang 基本数据结构与算法 链表

手撸golang 基本数据结构与算法 链表缘起最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一)本系列笔记拟采用golang练习之链表链表是数据结构之一,其中的数据呈线性排列。 每个数据节点都有1个“指针”,它指向下一个数据的内存地址。 访问数据时,我们需要从链表头部开始查找(线性查找), 如果目标数据在链表最后的话,需要的时间就是O(n)。 另外,添加数据只需要更改两个指针的指向,所以耗费的时间与n无关。 如果已经到达了添加数据的位置,那么添加操作只需花费O(1)的时间。 删除数据同...阅读全文

Segmentfault 2021-02-19 22:53:29 ioly

2021-02-14:假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2,开始时机器人在其中的M位置上(M 一定是 1~N 中的一个)。如果机器人来到1位置,那么下一步只能往右来到2位...

2021-02-14:假设有排成一行的N个位置,记为1~N,N 一定大于或等于 2,开始时机器人在其中的M位置上(M 一定是 1~N 中的一个)。如果机器人来到1位置,那么下一步只能往右来到2位置;如果机器人来到N位置,那么下一步只能往左来到 N-1 位置;如果机器人来到中间位置,那么下一步可以往左走或者往右走;规定机器人必须走 K 步,最终能来到P位置(P也是1~N中的一个)的方法有多少种?给定四个参数 N、M、K、P,返回方法数。 福哥答案2021-02-14: 自然智慧即可。 1.递归。有...阅读全文

简书 2021-02-15 12:32:36 福大大架构师每日一题

Rust 内存管理

主要的内存管理方法 主要针对堆内存的管理。 手动管理(c/c++),容易触发内存安全问题,以及内存泄露。 自动管理(GC,java/golang),运行时对性能有影响,并不能完全避免内存泄露。 运行时使用 Drop trait 来回收资源,利用所有权规则在编译期间避免内存安全问题。 内存安全: 悬垂指针,指向内存已经被释放。 空指针。Option<T> 避免了空指针。 未定义内存。编译器确保所有分配内存的变量都完成了初始化。 缓冲区溢出。 非法释放未分配的指针或者已经被释放的指针。 通用概念 栈...阅读全文

简书 2021-02-15 12:32:35 西门早柿

tidb-lite: 用于 Golang 数据库相关代码的单元测试

使用 tidb-lite 可以在 Golang 代码中运行 mocktikv 模式的 TiDB。 tidb-lite 可以用于数据库相关代码的单元测试,如果你的应用使用到了 MySQL/TiDB,就会有大量的数据库相关的代码要进行单元测试。 另外,有的应用希望在本地持久化一些数据,并且以数据库的方式存储,方便对数据进行管理。这种场景下也可以使用 tidb-lite,开发者使用兼容 MySQL 协议的 SQL 对数据进行本地处理。 本文主要介绍如何使用 tidb-lite 进行数据库相关代码的单元...阅读全文

简书 2021-02-15 12:32:35 new_xiang

Go 语言 协程和管道讲解

参考链接: 角度6-管道Go 语言 协程和管道讲解 一、进程和线程基本说明: 进程是程序在操作系统中一次执行过程,是系统进行资源分配和调度的基本单位;线程是进程的一个执行实例,是程序最小单元,它是比进程更小的能独立运行的基本单位;一个进程可创建和销毁多个线程,同一个进程的多个线程可以并发执行;一个程序至少有一个进程,一个进程至少有一个线程; 举个栗子: 使用的迅雷客户端,打开迅雷就是开启了一个进程,而下载多个视频,就是多个线程在工作; 二、并发、并行简单说明: 1.并发: 多线程程序在单核上运行...阅读全文

51CTO博客 2021-02-14 16:55:20 wx592a7561e9493

手撸golang 基本数据结构与算法 数组

手撸golang 基本数据结构与算法 数组 缘起 最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一) 本系列笔记拟采用golang练习之 数组 数组是一种线性数据结构, 数据按顺序存储在内存的连续空间内。 每个数据的内存地址(在内存上的位置)都可以通过数组下标算出, 我们也就可以借此直接访问目标数据(这叫作“随机访问”)。 访问数据时使用的是随机访问(通过下标可计算出内存地址), 所以需要的运行时间仅为恒定的O(1)。 但另一方面,想要向数组中添加新数据时,必须把目标位置后面的数据一个...阅读全文

简书 2021-02-14 19:32:36 老罗话编程