golang
pardon110
这个作者很懒,什么都没留下…
展开
-
单词搜索详解
题面给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 fa原创 2020-12-21 11:31:42 · 624 阅读 · 0 评论 -
Go小根堆 数组中的第K个最大元素
题面在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4小根堆小根堆确保堆的长度为ktype IntHeap []intfunc (h IntHeap) Len() int { return len(h) }func (h IntHeap) Less(i, j int) bool { return h[i] <原创 2020-12-05 19:29:18 · 354 阅读 · 1 评论 -
go 自定义最大堆 实现频率排序
题面给定一个字符串,请将字符串里的字符按照出现的频率降序排列。输入:"tree"输出:"eert"解释:'e’出现两次,'r’和’t’都只出现一次。因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-characters-by-frequency堆排序实现go 堆的 heap.Interface 接口自定义依据重复次数实现最大堆排序规则原创 2020-12-05 13:31:28 · 198 阅读 · 0 评论 -
golang 二进制链表转整数
题面给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)解法 type ListNode s原创 2020-07-23 11:25:37 · 191 阅读 · 0 评论 -
golang希尔排序
概述思路 先将整个待排序的记录序列分割成为若干子序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。希尔排序亦称之为增量递减排序,是对插入排序的改进,因此有必要先了解下插入排序。插入排序工作原理 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法主要在于移动有序序列位置,寻找被插入数据在有序数据中的位置点,其golang 与 python 算法如下func insertSort(arr []int) []int {原创 2020-07-16 13:10:11 · 194 阅读 · 0 评论 -
golang快速排序详解
合理假设对于任意无序数组中的任意一个元素,如何确定它在排序后的索引位置?通常思路是先对无序数组排序,后遍历该有序数组,比较与给定的元素值,得到有序索引值。那么,是否存在一种不对无序数组排序,就可知其指定元素在排序后的索引位置?不排序求排序后位置有序的基础,是按照一定顺序有规律排序。假定是升序,那么排序必为如 a < b <c ,即,只要找到该值比其前面元素大,比后面的元素小,就可确定它在有序数组中的位置arr = [25, 84, 21, 46, 13, 27, 68, 35,原创 2020-07-15 17:09:33 · 615 阅读 · 0 评论 -
迭代 VS 递归
迭代通常是有序的水平扩张,而递归层层嵌套,先进后出,以始为终通常来说递归都可用迭代来演绎,但前者更易理解,对心智负担比较轻迭代以目录文件查找器为例,只关注文件的情况下,迭代更有优势// 关注同类问题的退出// 收集目录对象,处理目录对照func scanFile(dir string) []string { // 文件结果集 var result []string // 目录收集器 dirList := []string{dir} // 将层级目录,变成同一级下所有目录遍历 f.原创 2020-07-12 09:39:57 · 190 阅读 · 0 评论 -
colly 自动抓取资讯
colly 在golang中的地位,比之scrapy在python的作用,都是爬虫界的大佬。本文用其抓取博文资讯, 从收集器实例配置,goQuery进行dom节点数据抓取,自动分页访问,到csv数据持久化,json控制台输出,全程简单直观。Code抓取数据入口为社区用户博客列表页,比如 https://learnku.com/blog/pardonpackage mainimport...原创 2019-12-20 16:19:20 · 611 阅读 · 0 评论 -
defer vs return
defer 看起来与try…catch 类似,其实有许多不为人知的小技巧defer官方行文defer先进后出,对return进行一些扫尾工作。这意味着使用该函数在返回值之前,defer函数内是可以访问使用defer的函数内任意变量。那么问题来了,在defer函数内对所在函数变量进行修改,会影响返回的结果吗?码说示例展示了两个使用defer的函数。用匿名返回类型,与具名返回类型函数,猜猜...原创 2019-12-05 12:23:49 · 82 阅读 · 0 评论 -
golang无缓冲通道
chan类似队列版管道,无缓冲chan看起来好像是全局变量,通过它可让多个goroutine间通信。 这其实隐含一个事实,chan阻塞会引发goroutine上下文切换,而切换到哪一个可执行goroutine由go调度器决定(与阻塞chan相关)。go当前能够使用的goroutine,必须在其待命队列中,否则会产生死锁。上下文切换多进程多线程都具备上下文切换,即保存恢复现场的能力。goro...原创 2019-10-08 11:27:11 · 484 阅读 · 0 评论 -
golang 之匿名结构体解析JSON数据
package mainimport ( "encoding/json" "fmt")// 定义手机屏幕type Screen struct { Size float32 ResX, ResY int}// 定义电池type Battery struct { Capacity int}// 生成json数据func getJsonData() []...原创 2019-06-04 13:21:45 · 1842 阅读 · 0 评论 -
Typescript go graphql
最近学习graphql,发现语法大同小异。就变量声明而言,有的也叫类型检查。上代码,Typescript 是JavaScript的一个类型的超集,编译为JavaScriptvar message:string = "Hello World" console.log(message)编译时会生成如下,javascript代码//Generated by typescript 1.8.10var ...原创 2018-05-30 09:27:57 · 556 阅读 · 0 评论 -
Golang 值,指针与引用类型
好的代码会说话,见码package main// beego go常用框架// &取地址 *解引用// 值在传递给函数或者方法的时候会被复制// 通道、函数、方法、映射、切片是引用变量,它们持有的都是引用,也即保存指针的变量。import ( "fmt")// 解构赋值,无需使用第三方临时变量交换// 声明三个持有指针的变量func swap1(x,...原创 2018-07-18 12:26:09 · 6348 阅读 · 0 评论 -
Golang 数组与切片
好的代码会说话,见码// 数组// 按值传递的(即是传递的副本,定长// [length]Type// [N]Type{value1, value2, ..., valueN}// [...]Type{value1, value2, ..., valueN}// 切片// 引用类型,不定长// 会创建一个隐藏的初始化为零值的数组,返回一个引用该隐藏数组的切片// ma...原创 2018-07-18 13:06:24 · 174 阅读 · 0 评论 -
Golang入门
go 基础基础目录结构src pkg bin,gopath是工作目录环境变量,查看go envmain.main() 函数(这个函数位于主包)是每一个独立的可运行程序的入口点。除了 main 包之外,其它的包最后都会生成 *.a 文件(也就是包文件)并放置在 GOPATH/pkg/GOPATH/pkg/GOPATH/pkg/GOOS_$GOARCH 中用 var 方式来定义全局变量...原创 2018-10-17 16:38:15 · 297 阅读 · 0 评论 -
Golang实现Telnet回音服务器
码上见package mainimport ( "bufio" "fmt" "net" "os" "strings")// 服务端连接func server(address string, exitChan chan int) { l, err := net.Listen("tcp", address) if err != nil { fmt.Println(...原创 2019-06-05 11:47:42 · 1222 阅读 · 0 评论 -
golang数据定义与操作分离示例
package mainimport ( "fmt" "strings")func StringProccess(list []string, chain []func(string) string) { for index, str := range list { result := str for _, proc := range chain { // 输入一个字...原创 2019-06-03 17:41:15 · 418 阅读 · 0 评论 -
all goroutines are asleep - deadlock!
场景通道chan没有close throw:all goroutines are asleep-deadlock!方案使用一个额外的通道传递给协程,在main 线程select检查是否有数据发送给了这个通道,如果有就停止package mainimport ( "fmt")func tel(ch chan int, quit chan bool) { for i ...原创 2019-06-15 10:23:13 · 231 阅读 · 0 评论 -
golang 二维矢量模拟玩家移动
package main// 二维矢量模拟玩家移动import ( "fmt" "math")// 位置坐标结构体type Vec2 struct { X, Y float32}// 加func (v Vec2) Add(other Vec2) Vec2 { return Vec2{ v.X + other.X, v.Y + other.Y, }}/...转载 2019-06-04 11:17:49 · 210 阅读 · 0 评论 -
Closure bindTo $this 与 receiver
闭包:在局部作用域(通常是函数或方法)内,引用了外部数据的函数。Closure Closure::bindTo ( object $newthis [, mixed $newscope = 'static' ] )复制当前闭包对象,绑定指定的$this对象和类作用域。newthis 绑定给匿名函数的一个对象,或者 NULL 来取消绑定。 ...原创 2018-04-12 19:53:49 · 329 阅读 · 0 评论