Go语言中文网 为您找到相关结果 62

全套Go语言学习教程,适合编程零基础或者有其他编程语言基础的同学。

# 课程介绍 本学习课件是尚硅谷的韩顺平老师亲自的录制的,课件内容包括:视频课件 、课堂笔记、辅助文档、代码等。 韩老师讲课非常有特色,生动有趣,通俗易懂,我就是一路跟着这套视频学过来的。 # 获取方式 评论里留下你的邮箱,我争取在评论后的一个礼拜内把视频发到邮箱里,女士优先(如果有的话,哈哈)。 ![文件截图.png](https://static.studygolang.com/181214/bae187056b873bf8f0e1d3caaa3193ad.png) ![视频截图.png](https://static.studygolang.com/181214/27232d537149f06841a7933c36817a8f.png...阅读全文

博文 2018-12-14 10:29:06 Subhuti_hu

golang mysql 简单封装与使用

有时候真的没必要使用xorm, gorm这些重量级orm工具。 golang本来就有成熟的mysql库,相比node.js那些反人类又半吊子的mysql库,真的好太多了。 打开mysql import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) dbtemp, err := sql.Open("mysql", "root:password@/dbname?charset=utf8") db = dbtemp if err != nil { fmt.Println(err) } stmt, err := db.Prepare("create table if not exists dev(id int UNSIGNED AUTO_...阅读全文

博文 2015-08-13 09:00:02 dearplain

PHP 混合 Go 协程并发

想法很简单。通过设置 runtime.GOMAXPROCS(1) 让 golang 的进程变成单线程执行的。类似python用gevent的效果。然后通过调度多个协程实现异步I/O并发。php作为一个子函数跑在go的进程内,php需要yield到其他协程时,通过回调到golang函数来实现。从php里调用go提供的子函数时,go保证保存php的当前上下文。当协程执行权让渡回来的时候,把原来的php上下文恢复。关键的代码在: // 保存当前协程上的php上下文 oldServerCtx := engine.ServerContextGet() fmt.Println(oldServerCtx) defer engine.ServerContextSet(oldServerCtx) oldExe...阅读全文

博文 2016-10-28 17:00:01 jinpengxx8

Go - http.Client源码分析

1. 起因 分析http.Client源码实现的起因, 是因为在使用如下步骤模拟网站登录时, 出现了问题, 参考知乎 - go net/http.Client 处理redirect: POST账号密码等参数进行登录 下发token, 此token通过cookie下发 重定向到主页/ 在通过http.Post进行请求, 预期不进行重定向, 能够直接获取到cookie值, 但实际上go帮我们处理了重定向, 丢失了cookie值 分析源码后, 可以很轻易地解决这个问题: // 请求http.calabash.top将被301重定向到https myClient := http.Client{ CheckRedirect: func(req *http.Request, via []*http.Re...阅读全文

博文 2019-08-23 16:34:38 hsabalaaaC

Golang 定时任务管理

本文基于Golang Crontab 实现了一个Crontab Job Manager。更加容易使用,同时也能够满足更加复杂的场景。 仓储地址, 如果有用,欢迎点赞,欢迎讨论,欢迎找茬。 需求 在开发中,经常遇到一些需要定时任务的场景。各个语言都有定时语言的库,Golang Cron 提供了Crontab Golang语言版本。这个库非常不错,提供最基本的定时任务编排的功能。但是一些复杂需求无法满足,比如 任何定时任务都有可能失败,失败了就panic了,这样非常不友好。最起码能够让我控制,失败是重试还是停止 某些任务执行周期要10s, 而用户设置的5s一执行,我能不能保证任何时间这个任务只执行一次 我想实时的看到任务的状态,比如是不是在运行?下次运行时间?上次运行时间? 我想看到任务执行了多...阅读全文

博文 2018-12-03 23:34:43 OhBonsai

可带癞子的通用麻将胡牌算法

笔者前段时间做过一款地方麻将游戏的后端,麻将游戏有个特点就是种类繁多,有的玩法木有癞子,有的玩法有4个癞子,有的甚至癞子数量更多,甚至有的有花牌(春夏秋冬等),有的红中可以代替宝牌,具体玩法笔者在此不介绍,做相关开发的自行研究玩法就好 查表法 笔者看过其它的算法思路,比如查表法,首先生成好麻将牌型的表存文件中,通过将牌型与文件中的牌型进行对比,此类算法,简单玩法效率也挺高 缺点: 是要提前生成好表文件,并且,由于麻将玩法种类繁多,对于复杂的玩法,表记录非常多,多达数百万条记录,虽然算法中有剪枝,但是效率仍然没有显著优势 表文件读入到内存中,长期占用大量内存 移植性弱,换一种玩法,就得重新生成表数据 在此笔者根据自己的经验总结出一种通用的麻将胡牌算法 思路 满足M x ABC + N x DD...阅读全文

博文 2017-09-05 14:34:48 tomorrowwu

golang Hook

简介 这篇文章主要是通过官方提供的 HTTP 追踪来学习使用 Hook 的编程思想。 在了解使用 Go 语言编写 Hook 之前,最好先掌握 Context 的用法, go 1.7 中 context 已经进入标准库 context,直接 import "context" 就可以使用。 在标准库 context.go 中, Context 定义为一个 interface{} 接口类型。 // A Context carries a deadline, a cancelation signal, and other values across // API boundaries. // // Context's methods may be called by multiple gorouti...阅读全文

博文 2017-09-22 13:05:12 juniway

从Maven,Gradle到Go

为什么要有依赖管理工具? 谈依赖管理之前,我们先谈谈为什么要有依赖管理工具这东西。 我们学了一种编程语言,然后写了个“Hello World”,然后宣称自己学了一门语言,这时候确实不需要关心依赖问题。 然而,当你要写一个稍微复杂点的应用,那怕就是留言板这样的,需要读写数据库,就需要依赖数据库驱动,就会遇到依赖管理的问题了。 再进一步,你写了一个库,想共享给别人使用,更需要了解依赖管理的问题。 当然,如果项目足够简单,你可以直接将依赖方的源码放置在自己的项目中,或者将依赖库的二进制文件(比如jar,dll)放置在项目的lib里。要提供给别人呢?把二进制包提供下载或者给别人传过去。依赖管理工具出现之前大多数都是这样搞的。 但如果再复杂些,依赖库本身也有依赖怎么弄呢?将依赖压缩打包,然后放个rea...阅读全文

Gartner存储魔力象限前四,阿里云如何成为“领头羊”?

摘要: 阿里云目前的存储产品系列展示了阿里云的潜力,并且已经成为全球超大规模云服务提供商的有力竞争者。相信在未来,作为云计算行业翘楚的阿里云在全球范围内能提供更为广泛的服务,它将用更为精湛的技术令全世界为之叹服! 继马来西亚总理纳吉布、挪威首相索尔贝格、瑞典首相特凡·勒文亲自到访阿里巴巴后。前日,国际奥委会主席巴赫也亲自来到了这个新加入奥运会TOP合作商的年轻企业园区,与马云一同畅谈 “云上智能奥运“。 37de00036e3ea91f9ec8 就在今年Gartner发布的魔力存储象限排名中,阿里云一跃冲到第四,这样的技术实力自然能吸引到国际奥委会的关注,也由此最终成为奥运会“云服务”及“电子商务平台服务”的官方合作伙伴。 37e60003656d4cbe66bd ...阅读全文

基于 MySQL 的新一代分布式关系型数据库RadonDB

RadonDB 是青云(QingCloud)基于 MySQL 研发的新一代分布式关系型数据库,于 5 月 10 日开源。 RadonDB 不仅支持分布式事务,全面兼容 MySQL,还能够实现容量与性能无限水平扩展,具备金融级数据强一致性,满足企业级核心数据库对大容量、高并发、高可靠及高可用的苛刻要求。此外,还支持智能化自动分表、自动扩容及自动运维,大幅减轻数据库运维压力。 此次开源的 RadonDB 包括 Radon 和 Xenon 两个子项目,其中: Radon 即 RadonDB 的 SQL 层实现,具有分布式事务与无限可扩展的功能; Xenon 是存储层的高可用工具,使用 Raft 选举算法与 MySQL Binlog 并行复制技术,实现后端 MySQL 集群的金融...阅读全文

Golang算法实战之斗地主<一>

逢年过节,回到老家,玩的最多的就是打麻将、斗地主。今天要说的,就是这个经典游戏——斗地主。 一、斗地主牌面分析 斗地主需要多少张牌?大部分人都知道需要一副完整的牌即可,也就是54张牌。 2-10 黑桃、红桃、梅花、方片各4张。 J、Q、K、A 黑桃、红桃、梅花、方片各4张。 大小王各1张。 在斗地主中,牌的花色不影响。所以,在牌面比对时,不需要单独比对花色。而单张牌面值的大小顺序为: 大王>小王>2>A>K>Q>J>10……3 鉴于此,牌面的表达可以用以下方式来规定: A:黑桃 B:红桃 C:梅花 D:方片 扑克原始值 映射值 3-10 3-10数字 J 11 Q 12 K 13 A 14 2 15 小王 Q88 大王 K99 例如: A14----->黑桃A C9----->梅花9 二、如...阅读全文

博文 2018-11-07 06:34:34 皮卡丘pikaqiu

Go:操作注册表

package main import ( "fmt" "log" "golang.org/x/sys/windows/registry" ) func main() { key, exists, err := registry.CreateKey(registry.CURRENT_USER, "SOFTWARE\\Hello Go", registry.ALL_ACCESS) if err != nil { log.Fatal(err) } defer key.Close() if exists { fmt.Println("键已存在") } else { fmt.Println("新建注册表键") } // 写入32位整形值 key.SetDWordValue("DWORD", 0xFF...阅读全文

博文 2016-09-21 01:00:00 aqtata

Go语言 使用CGo进行优化

载自达达的博客 前阵子我利用cgo对游戏内存数据库的数据存储方式做了优化,减少了对象数量。但是程序放到线上环境后出现了段错误,直接导致进程退出,只好临时又把优化的部分去掉,去掉后程序又继续稳定运行了两周。 优化代码撤下来后,我重新整理了代码。整理下来,我觉得对含有字符串字段的表的优化逻辑太过复杂了,并且很难控制边界情况。 这里举个例子: type MyTable struct { Name string } func InsertMyTable(myTable MyTable) { nameLen := C.size_t(len(myTable.Name)) name := C.calloc(1, nameLen) C.memcpy(name, unsafe.Pointer((*reflec...阅读全文

博文 2014-10-27 10:00:01 abv123456789

使用CGO进行GC优化的注意事项

前阵子我利用cgo对游戏内存数据库的数据存储方式做了优化,减少了对象数量。但是程序放到线上环境后出现了段错误,直接导致进程退出,只好临时又把优化的部分去掉,去掉后程序又继续稳定运行了两周。 优化代码撤下来后,我重新整理了代码。整理下来,我觉得对含有字符串字段的表的优化逻辑太过复杂了,并且很难控制边界情况。 这里举个例子: type MyTable struct { Name string } func InsertMyTable(myTable MyTable) { nameLen := C.size_t(len(myTable.Name)) name := C.calloc(1, nameLen) C.memcpy(name, unsafe.Pointer((*reflect.String...阅读全文

博文 2014-10-13 20:37:36 达达

google go 语言介绍(一)

翻译自golang.org 介绍 这是一篇为熟悉c或c++语言的开发人员提供的介绍go语言的基础教程。本文不是综合性的语言指南,而更接近于语言规范。在你阅读本教程后,你可以继续阅读“如何更有效率的编写Go程序”这篇文章,更深入的了解这门语言应该如何被使用。同时,这里还提供了一个Go语言的三天教程:第一天,第二天,第三天。 接下来将通过一系列适度的例子程序来展现这门语言的关键特性。所有的程序都存放在/doc/progs/目录中。 程序片断都标注了该片断在原始文件中的行号。为了代码的清晰,空白行将被保留。 Hello,World 让我们以一种常用的方式开始我们的教程: 05 package main 07 import fmt "fmt" // Package implementing form...阅读全文

博文 2014-10-04 19:26:20 fffvvvzz

Go:操作注册表

package main import ( "fmt" "log" "golang.org/x/sys/windows/registry" ) func main() { key, exists, err := registry.CreateKey(registry.CURRENT_USER, "SOFTWARE\\Hello Go", registry.ALL_ACCESS) if err != nil { log.Fatal(err) } defer key.Close() if exists { fmt.Println("键已存在") } else { fmt.Println("新建注册表键") } // 写入32位整形值 key.SetDWordValue("DWORD", 0xFF...阅读全文

博文 2016-08-23 13:00:03 aqtata

内部排序算法(Golang版本)

package main import ( "fmt" ) func main() { //保存需要排序的Slice arr := []int{9, 3, 4, 7, 2, 1, 0, 11, 12, 11, 13, 4, 7, 2, 1, 0, 11, 12, 11} //实际用于排序的Slice list := make([]int, len(arr)) copy(list, arr) BubbleSortX(list) fmt.Println("冒泡排序:\t", list) copy(list, arr) QuickSort(list, 0, len(arr)-1) fmt.Println("快速排序:\t", list) copy(list, arr) //将arr的数据覆盖到li...阅读全文

博文 2015-11-23 03:00:00 achst

Go语言二分之查找

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列查找过程:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。算法要求:1.必须采用顺序存储结构。2.必须按关键字大小有序排列。要求:请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存 在此数,并且求出下标,如果没有就 ...阅读全文

博文 2019-03-11 20:35:22 GoDevops

Cookie的特点和使用经验/建议总结

一、前言 什么是Cookie? Cookie就是以Key,Value的形式存储在浏览器端的数据。https://baike.baidu.com/item/cookie/1119 二、工作原理&应用场景 工作原理 在Request的时候,浏览器将Cookie信息放在HTTP-Request Headers中。在Response的时候,浏览器保存HTTP-Response Headers信息中的Cookie信息。 Cookie的核心信息包含三个部分:Name、Value、过期时间。Cookie的保存是覆盖式的,所以Cookie的添加、更新、删除对于浏览器来说都是执行设置(set)的动作。 应用场景 记住用户名购物车信息 三、特点1、存储特点 (1)存储大小受限,跟浏览器版本有关(2)存储条数受限...阅读全文

博文 2017-11-30 11:50:08 Ken的杂谈

记浅析开源电商框架《flamingo-commerce》

初识 开源地址:https://github.com/i-love-flamingo/flamingo-commerce 首先我们看看效果 官方示例:https://demoshop.flamingo.me 我部署的示例:http://www.itfan.top:3210 尝试自己部署 提供了DEMO,地址:https://github.com/i-love-flamingo/commerce-demo-carotene 我部署的过程(略显坎坷) 踩过的坑: 首先我使用阿里云服务器(国内节点),搭建环境,包括golang、nodejs(当前最新版);部署的过程中发现版本不兼容,回退go(v1.13.6)、node(v12.16.3) 报错 Get https://accounts.googl...阅读全文

博文 2020-05-10 19:33:10 Ralap_

学习go语言

在je上看见帖子,google出了go语言,跟着贴子看来一圈也没看明白什么意思,实例程序看着到是挺简单,但是不知道怎么运行,运行环境在哪弄,也看有人写了go的一个程序,看来也没有看懂怎么运行。希望关注go的朋友多交流一下,也请高手指导指导我们这些初级程序员,接触了写语言,都是接触的不深,现在go刚出来,我想这次能够学的扎实一点。如果有写了go程序的,请跟大家分享一下,开发工具啊,安装上的问题,以及如何运行等,感谢分享知识的所有...阅读全文

博文 2014-10-04 19:26:02 horseroad

Golang ...T 的几种用法

在Go中,经常可以见到 …T 能概括一下什么场合会用到…T吗 用在函数参数中 若函数的最后一个参数是…T类型,这个参数可传入任意个T类型的参数,在函数中…T的类型为[]T. 在这个例子函数中,你可以这样使用这个函数Sum(1,2,3)orSum(). func Sum(nums ...int) int { res := 0 for _, n := range nums { res += n } return res } 用在解序列 可以传入一个slice,然后用…解开它,注意在这里没有新的slice被创造。在这个例子函数中,我们把slice传入Sum函数 primes := []int{2, 3, 5, 7} fmt.Println(Sum(primes...)) // 17 在append...阅读全文

博文 2019-04-13 14:34:41 一根薯条

[BFS/DFS]HOJ2581Go

传送门:Go Go My Tags (Edit) Source : Stanford Programming Contest 2007 Time limit : 1 sec Memory limit : 64 M Submitted : 201, Accepted : 117 In the game of Go, two players alternate placing black and white stones on lattice points of an n * n grid, each attempting to surround as much territory(i.e., regions of unfilled lattice points) as possible. At...阅读全文

博文 2015-12-23 04:00:00 u010160562

go语言协程认识-1

//关于go语言协程通道的使用 //1.通道可以带缓存,也可以不带 //2.不带缓存的,不管是读还是写都会阻塞 //3.带缓存的,如果缓存溢出,就会阻塞 //4.make(chan int,1)和make(chan int)是不一样的,第一种通道内写入两个数据会阻塞,第二种写入就会阻塞 //5.如果协程在阻塞,但是主程已经退出执行,则认为程序死锁 //6.如果程序除了主程之外(没有一个协程),处于阻塞状态,则认为程序死锁 //7.一句话:只有一个协程(可以是主程),在阻塞,认为程序处于死锁 //8.子程序是协程的一种特例,阻塞到子程序执行完毕返回,而协程可能等不到执行完毕就返回,然后条件满足再回来执行 package main import ( "fmt" ) func main() { /...阅读全文

日记

放假第一天,手机上显示的是“06:47”,工作日叫不醒,周末起太早???然后还是磨蹭到9点起床,锅里是温的白粥,我说这是不是有点清淡,弟说你可以加点盐。我服。最后还是跑到隔壁镇的乐园面包买了个提子包,犹豫着要不要再买支维他奶,额还是隔壁美宜家买吧,你懂的。村口的东江大道真的有毒,每次过期或者中秋都会堵车,并不是车流大还是车祸而是道路施工,每年都是那个位置那个坑。今天还是不太想出门,在家继续学golang,看了一小时居然在沙发上睡着了,额头和背脊都是闷热的汗,屁股潮湿内裤紧贴着,赶紧开个空调回床上睡,这种迷迷糊糊慵懒的下午好想念了...阅读全文

博文 2018-09-22 23:34:43 徐E东

依赖管理工具漫谈--从Maven,Gradle到Go

本文从Maven谈起,分析了Maven的主要思想以及Gradle对Maven的改进,最后谈了下Go语言面临的依赖管理问题。 为什么要有依赖管理工具? 谈依赖管理之前我们先谈谈为什么要有依赖管理工具这东西。 我们学了一种编程语言,然后写了个『Hello World』,然后宣称自己学了一门语言,这时候确实不需要关心依赖问题。 然而,当你要写一个稍微复杂点的应用,那怕就是留言板这样的,需要读写数据库,就需要依赖数据库驱动,就会遇到依赖管理的问题了。 再进一步,你写了一个库,想共享给别人使用,更需要了解依赖管理的问题。 当然,如果项目足够简单,你可以直接将依赖方的源码放置在自己的项目中,或者将依赖库的二进制文件(比如jar,dll)放置在项目的lib里。要提供给别人呢?把二进制包提供下载或者给别人传...阅读全文

为什么程序员都不喜欢使用switch而使用if来做条件跳

请用5秒钟的时间查看下面的代码是否存在bug。 OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。缺点一. 语法正确,逻辑错误这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以...阅读全文

博文 2019-04-27 23:34:44 程序员之言

3行写爬虫 - 使用 Goribot 快速构建 Golang 爬虫

zhshch2002/goribot: [Crawler/Scraper for Golang]Make a Golang spider in 3 lines是我的一个业余项目,目的是能尽可能简洁的使用Golang开发爬虫应用。 注意:这个项目正处于beta版本,不建议直接使用在重要项目上。Goribot的功能都经过测试,如果有问题欢迎来提issues。 安装 go get -u github.com/zhshch2002/goribot 复制代码访问网络 不需要冗长的初始化和配置过程,使用goribot的基本功能只需要三步。 package main import ( "fmt" "github.com/zhshch2002/goribot" ) func main() { s := go...阅读全文

博文 2019-10-13 23:04:27 zhshch2002

3行写爬虫 - 使用 Goribot 快速构建 Golang 爬虫

[zhshch2002/goribot: [Crawler/Scraper for Golang]Make a Golang spider in 3 lines](https://github.com/zhshch2002/goribot)是我的一个业余项目,目的是能尽可能简洁的使用Golang开发爬虫应用。 **注意:这个项目正处于beta版本,不建议直接使用在重要项目上。Goribot的功能都经过测试,如果有问题欢迎来提issues。** # 安装 ```shell go get -u github.com/zhshch2002/goribot ``` # 访问网络 不需要冗长的初始化和配置过程,使用`goribot`的基本功能只需要三步。 ```Go package main impo...阅读全文

博文 2019-10-13 18:00:37 zhshch

为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

请用5秒钟的时间查看下面的代码是否存在bug。 OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。缺点一. 语法正确,逻辑错误这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以...阅读全文

博文 2019-10-27 00:02:49 aside section._1OhGeD

相比if语句,switch语句的优缺点

缺点一. 语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 错误示例: $(function () { let a = 1; switch (a) { case 0:alert(0); case 1:alert(1); default:alert(2); } }); 这样就会导致语句不会中断,弹出1后再弹出2。 缺点二 .死板的语法 Switch尽管对于break很宽容,但是对判断条件很严苛,case后面只能跟常量,如果...阅读全文

博文 2020-01-07 12:32:41 MC桥默

你还在一昧的使用if-else吗?

请用5秒钟的时间查看下面的代码是否存在bug。 OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。缺点一. 语法正确,逻辑错误这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至可以...阅读全文

为什么你们不喜欢使用switch,而是大量的 if...else if?

作者:熊爸爸的科技工坊请用5秒钟的时间查看下面的代码是否存在bug。 OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。缺点一. 语法正确,逻辑错误这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会...阅读全文

博文 2019-10-12 23:32:54 aside section ._1OhGeD

kingshard按时间分表功能介绍

kingshard按时间分表功能介绍 在文档中主要介绍了kingshard的Hash和Range方式的分表,最近又开发了按时间维度的分表方式。按时间维度分表的场景非常普遍,下面介绍一下kingshard的时间分表功能 1. 支持的时间类型 kingshard中的分表字段支持MySQL中三种类型的时间格式 date类型,格式:YYYY-MM-DD,例如:2016-03-04,注意:2016-3-04,2016-03-4,2016-3-4等格式kingshard都是不支持的。 datetime类型,格式:YYYY-MM-DD HH:MM:SS,例如:2016-03-04,注意:2016-3-04 13:23:43,2016-03-4 13:23:43,2016-3-4 13:23:43等格式ki...阅读全文

博文 2017-02-09 08:11:53 flike

理解 Google Spanner (1):数据复制与分片。

现在工作中有很多项目开始转到 Google Spanner,虽然是很牛逼的分布式数据库,但由于太新了,并且是闭源的,网上几乎没有什么资料可查,为了更好地使用它,开始了 Spanner 漫长的学习之路,一个东西只有自己能教会别人,才代表自己真的会了,因此准备进行 Google Spanner 的一系列分享,这是第一篇,主要是讲 Spanner 的数据复制与分片,最后会提到实际应用中会遇到的热点问题以及解决方案。 本文主要是通过近期对分布式存储系统原理的学习以及平常工作中的一些实践去总结出的技术分享,由于对分布式数据库以及 Spanner 的理解有限,如果文中有错误的地方,希望大家能够指出。 一、Spanner 架构 先讲讲 Spanner 的架构,很概念很牛逼的东西,虽然乍眼一看不实用,但是让...阅读全文

博文 2019-06-12 16:06:14 wangxihua916

为什么程序员都不喜欢使用switch,而是大量的 if……else if ?

正文 请用5秒钟的时间查看下面的代码是否存在bug。 image OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。 缺点一. 语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 image 上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语...阅读全文

赖子胡牌检测算法

先简单的说明一下,基于上一篇博客麻将胡牌算法使用的是Lua语言,有一些同学私信我,之后博客能不能使用大众一点的后端语言,所以这篇博客将使用Google强力推荐的后端语言Golang。不过在这里值得一提的是,编程特别是算法更应该注重的是思想,编程语言本身并不会流露出你的算法能力和设计思想,语言只是表达你思想的一个工具而已。装逼到此结束,进入正文我们来讨论一下赖子胡牌应该怎么检测 当然一些麻将中使用到的基本名词和胡牌规则,在这里就不在重复解释了。如果不了解的可以参考上一篇博客麻将胡牌算法 赖子胡牌 胡牌规则和普通胡牌一样,不过出现了一个赖子牌。这张牌可以是任意牌,如果我们依然按照普通胡牌算法那样检测去遍历的话,即使只算万,筒,条我们简单的计算一下麻将共有27种牌。如果有四个赖子,那么赖子检测算法...阅读全文

博文 2017-10-10 17:04:52 小黑_Coder

7_11_ F题 Infinite Go(并查集)

7_11_ F题 Infinite Go(并查集) 简单题意 按围棋规则落子,给出每次落子的坐标,问最后棋盘上剩余的黑白子的数量 思路 用并查集来维护棋盘上的的联通块的气,然后就按照围棋规则去模拟就好了,注意提子之后要把对应的位置还原成可用状态,可有气,可落子,这题细节较多,要注意。 代码 #include using namespace std; const int maxn = 1e4+10; int mov[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; int fa[maxn]; set > space[maxn]; map,int>M ,idx; void init...阅读全文

博文 2016-09-04 11:00:01 baidu_19306071

漫谈依赖管理工具:从Maven,Gradle到Go

为什么要有依赖管理工具? 谈依赖管理之前,我们先谈谈为什么要有依赖管理工具这东西。 我们学了一种编程语言,然后写了个“Hello World”,然后宣称自己学了一门语言,这时候确实不需要关心依赖问题。 然而,当你要写一个稍微复杂点的应用,那怕就是留言板这样的,需要读写数据库,就需要依赖数据库驱动,就会遇到依赖管理的问题了。 再进一步,你写了一个库,想共享给别人使用,更需要了解依赖管理的问题。 当然,如果项目足够简单,你可以直接将依赖方的源码放置在自己的项目中,或者将依赖库的二进制文件(比如jar,dll)放置在项目的lib里。要提供给别人呢?把二进制包提供下载或者给别人传过去。依赖管理工具出现之前大多数都是这样搞的。 但如果再复杂些,依赖库本身也有依赖怎么弄呢?将依赖压缩打包,然后放个rea...阅读全文

为什么程序员都不喜欢使用switch,而是大量的 if…else ?

image 出处:熊爸爸的科技工坊 3g.163.com/tech/article/E02RDE6C0511SDDL.html 请用5秒钟的时间查看下面的代码是否存在bug。 image OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。 缺点一. 语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 image 上面的代码为了保证...阅读全文

为什么程序员都不喜欢使用switch,而是大量的 if……else if?

请用5秒钟的时间查看下面的代码是否存在bug。 OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。 缺点一. 语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至...阅读全文

博文 2020-05-07 15:41:18 IT编程技术支持

PHP 混合 Go 协程并发

想法很简单。通过设置 runtime.GOMAXPROCS(1) 让 golang 的进程变成单线程执行的。类似python用gevent的效果。然后通过调度多个协程实现异步I/O并发。php作为一个子函数跑在go的进程内,php需要yield到其他协程时.点击打http://www.skyz.com.cn/e/space/?userid=342828?feed_filter=/RJ/2016-10-27/6432.html http://www.skyz.com.cn/e/space/?userid=342829?feed_filter=/NY/2016-10-27/9086.html http://www.skyz.com.cn/e/space/?userid=342830?feed_f...阅读全文

博文 2016-10-27 16:00:07 hysteria362880

Go:操作注册表

package main import ( "fmt" "log" "golang.org/x/sys/windows/registry" ) func main() { key, exists, err := registry.CreateKey(registry.CURRENT_USER, "SOFTWARE\\Hello Go", registry.ALL_ACCESS) if err != nil { log.Fatal(err) } defer key.Close() if exists { fmt.Println("键已存在") } else { fmt.Println("新建注册表键") } // 写入32位整形值 key.SetDWordValue("DWORD", 0xFF...阅读全文

博文 2016-09-07 09:00:03 aqtata

用Golang写的域名信息搜集工具

blacksheepwall是一款由Go语言编写的域名信息搜集工具 ,你也可以在你的工具中将它作为一个独立软件包来使用。 下载 blacksheepwall支持跨平台,目前它所支持的系统有windows、linux以及苹果的darwin。你可以在这里下载到不同版本的二进制软件包。 安装 你可以直接下载编译好的二进制文件运行并安装它。如果你的系统已经安装好了Go语言环境并配置好了工作区,那么你也可以直接通过以下命令下载安装: $ go get github.com/tomsteele/blacksheepwall 使用 Usage: blacksheepwall [options] 命令选项: -h, --help 显示帮助信息并退出 -version...阅读全文

博文 2018-01-11 00:30:00 h2zZhou

2019-08-22【LeekCode题库problem-845】

GitHub 地址:coffeeTu-code LeekCode 地址:题库 Language:Golang /* @题目 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”: B.length >= 3 存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1] (注意:B 可以是 A 的任意子数组,包括整个数组 A。) 给出一个整数数组 A,返回最长 “山脉” 的长度。 如果不含有 “山脉” 则返回 0。 @示例 1: 输入:[2,1,4,7,3,2,5] 输出:5 解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。 @示例 2: 输入...阅读全文

博文 2019-08-23 04:32:47 CoffeeRabbit

Go json unmarshal interface{} field bind to struct

写代码时碰到这么一个需求,某个字段根据不同条件对应不同子结构体,通过interface返给前端,同时前端上传时也要通过这个字段将数据传给后端。 struct -> json这个比较好办,给interface赋值不同的子结构体即可。json -> struct时有点难搞,需要做下特殊处理。默认情况json字符串解析到interface field会是map[string]interface{}。 先上代码: type Foo struct { Type string `json:"type"` Object interface{} `json:"object"` } type A struct { A string `json:"a"` } type B struct { B string `...阅读全文

Go 每日一库之 plot

简介 本文介绍 Go 语言的一个非常强大、好用的绘图库——plot。plot内置了很多常用的组件,基本满足日常需求。同时,它也提供了定制化的接口,可以实现我们的个性化需求。plot主要用于将数据可视化,便于我们观察、比较。 快速使用 先安装: $ go get gonum.org/v1/plot/... 后使用: package main import ( "log" "math/rand" "gonum.org/v1/plot" "gonum.org/v1/plot/plotter" "gonum.org/v1/plot/plotutil" "gonum.org/v1/plot/vg" ) func main() { rand.Seed(int64(0)) p, err := plot.N...阅读全文

博文 2020-04-16 23:32:43 darjun