字典类型的声明、初始化和基本使用

字典定义 有 PHP 基础的同学都应该知道,PHP 数组包含索引数组和关联数组,PHP 中的索引数组即对应 Go 语言的数组和切片类型,PHP 中的关联数组即对应 Go 语言中的字典类型(map),所谓字典,其实就是存储键值对映射关系的集合,只不过对于强类型的 Go 语言来说,与 PHP 关联数组的不同之处在于需要在声明时指定键和值的类型,此外 Go 字典是个无序集合,底层不会像 PHP 那样按照元素添加顺序维护元素的存储顺序。 下面我们通过一个简单的示例来看看如何在 Go 语言中使用字典这种数...阅读全文

Segmentfault 2020-06-09 17:32:36 小兵

助力Greenplum数据库开发之接口篇(上)——Golang,C、Python和Perl

Greenplum 作为一款强大的 HTAP 数据库,针对大多数流行语言都有相应的连接库。大部分均是与 PostgreSQL 采用相同的接口,但是也有部分接口是 Greenplum 专门优化后用于自身使用的。今天,我们将给大家分享一系列语言接口的连接库及使用方式。 1. Golang Golang 作为 Google 开源的一款编译型开发语言,经过多年发展,在开发界占据了很大的份额,市面上针对 Greenplum 的 Golang 连接库也有很多,但是最著名的还是 github.com/lib/...阅读全文

Segmentfault 2020-06-09 16:32:38 Greenplum

go module 使用

go module 使用 go module 在 go 1.14 版本之后被推出参考:GO依赖管理、如何使用go module导入本地包 [TOC] 一、go module 使用介绍 go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。 1.1 GO111MODULE 要启用go module支持首先要设置环境变量GO111MODULE,通过它可以开启或关闭模块支持,它有三个可选值:off、on、auto,...阅读全文

Segmentfault 2020-06-09 10:32:36 Diuyon

golang之select关键字用法总结

1.官方解释 一个select语句用来选择哪个case中的发送或接收操作可以被立即执行。它类似于switch语句,但是它的case涉及到channel有关的I/O操作。即select就是用来监听和channel有关的IO操作,当 IO 操作发生时,触发相应的动作。 2.要点 如果有一个或多个IO操作可以完成,则Go运行时系统会随机的选择一个执行,否则的话,如果有default分支,则执行default分支语句,如果连default都没有,则select语句会一直阻塞,直到至少有一个IO操作可以进...阅读全文

简书 2020-06-08 13:32:43 10xjzheng

30. 如何使用 GDB 调试 Go 程序?

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 做为新手,熟练掌握一个好的调试工具,对于我们学习语言或者排查问题的时候,非常有帮助。 你如果使...阅读全文

掘金 2020年06月08日 王一白

【开源】分布式ID生成器

分布式ID生成器 背景 伴随互联网的发展,无论分布式系统、还是存储都变得更复杂、数据量更大,这些都需要唯一的标识记录。简单举例,数据库单表时,通常使用数据库自带的自增ID就可以了,但分库分表后,数据库自带的自增ID就无法满足需求了,我们需要有一个算法或服务来生产分布式ID。 很多公司都会自研唯一ID生成服务,来满足唯一标识的问题。 ID-Generator ID-Generator分布式ID生成器,解决在分布式系统唯一性标识生成复杂、不统一的问题,如数据库分库分表数据唯一标识、业务流水号、链路跟...阅读全文

简书 2020-06-08 11:32:52 耗子2015

golang面试题:怎么避免内存逃逸?

image 问题 怎么避免内存逃逸? 怎么答 在runtime/stubs.go:133有个函数叫noescape。noescape可以在逃逸分析中隐藏一个指针。让这个指针在逃逸分析中不会被检测为逃逸。 // noescape hides a pointer from escape analysis. noescape is // the identity function but escape analysis doesn't think the // output depends on th...阅读全文

简书 2020-06-08 11:32:45 9號

go 深浅拷贝

package main import "fmt" func main() { /* 深浅拷贝: 深拷贝:拷贝数据的副本,对原始数据没有影响 值类型的数据,默认都是深拷贝 int , float,string,bool,array,struct 浅拷贝:拷贝的是数据的地址, 引用类型的数据,默认都是浅拷贝 slice,map,function */ // slice,map 不需要手动添加&去取地址。 map1 := make(map[int]string) fmt.Println(map1) ...阅读全文

Segmentfault 2020-06-09 09:32:34 小兵

go指针回顾

package main import "fmt" func main() { /* pointer 指针 概念: 存储了另一个变量的内存地址的变量 指针针对的是值类型来操作 指针的类型 : *int , *float32, *string, *array,*struct 指针中存储的数据的类型 : int, float32, string, array,slice,map struct 指针中存储的数据的地址: 指针中存储的数值 指针自己的地址 */ // 1. 定义一个int类型的变量 a ...阅读全文

Segmentfault 2020-06-09 09:32:33 小兵

ARTS 第4周| LeetCode 1143 最长上升子序列| 21天能学会编程吗| Go defer 的用法

ARTS ARTS 是陈浩(网名左耳朵耗子)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。 每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。 本周内容 这周的 ARTS 你将看到: 动态规划典型中的典型,最长上升子序列。 你对编程的热爱都用十年吗? 这些 defer 的坑让你大呼卧槽。 本周没有灵光一闪。 Algorithm 本周的算法题是经典题目:最长上升子...阅读全文

Segmentfault 2020-06-09 08:32:33 casmo澎湃哥

Beego 再出发

Beego 再出发 前言 近年来得益于 go 社区的普及和推广,很大程度上促进了 go 生态的蓬勃发展。十年前的 go 还只是程序员手里的玩具,但如今已经成为解放程序员生产力的重要工具。越来越多设计新颖、理念先进、架构完善的组件涌现出来。注册的 ETCD、监控的 Prometheus、日志的 Zap、云原生的 K8S 等组件的出现,让我们能够在 go 生态中尽情选择组件,设计我们的系统,实现我们想要的代码世界。 go 在这十年的发展,让我们见证了一门语言的崛起之路,看到了无数程序员夜以继日为 g...阅读全文

Segmentfault 2020-06-08 23:32:36 Wbofeng

30. 如何使用 GDB 调试 Go 程序?

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 做为新手,熟练掌握一个好的调试工具,对于我们学习语言或者排查问题的时候,非常有帮助...阅读全文

Segmentfault 2020-06-08 22:32:35 Python编程时光

Redis optimistic lock with golang demo

redis 事务处理命令 MULTI:开启一个事务 EXEC:事务执行,将一次性执行事务内的所有命令 DISCARD:取消事务 使用 WATCH+MULTI 的方式来实现乐观锁 WATCH:监控一个或多个键,如果事务执行前某个键发生了改动,那么事务也会被打断UNWATCH:取消 WATCH 命令对所有键的监视 使用go-redis package模拟用户抢票的流程 开启多个goroutine模拟并发抢票 go-redis TxPipelined 执行事务 go-redis client.Watc...阅读全文

Segmentfault 2020-06-08 19:32:38 lidashuang

开发环境-windows

一、下载 golang ,下载后点击安装 国内下载地址 https://studygolang.com/dl 二、配置环境变量 GOPATH : go的工作目录,可以自定义,在该目录下一般需要创建3个文件夹,也可以只创建src文件夹 bin : go编译后的可执行的二进制文件 pkg:go编译生成的中间文件 src : go资源文件,存放第三方库和项目代码 注: 使用 go get 下载第三方包时需要进入src目录下再执行 go get 命令 GOROOT : go的安装目录,eg: D:\go...阅读全文

简书 2020-06-08 01:33:18 hellocassiel

golang的swagger注解

@Tags: 分类信息 例如: // @Tags 用户接口 @Summary: 操作的简短摘要。 例如: //@Summary 通过用户名得到用户信息 @Description: 操作的详细说明。 例如: //@Description 操作行为的详细说明。 @Param:参数信息,用空格分隔的参数。param name,param type,data type,is mandatory?,comment attribute(optional) 1.参数名 2.参数类型,可以有的值是 formDa...阅读全文

简书 2020-06-08 01:33:18 Lan_de

Go

go 协程如何实现;使用的m:n调度模型,即任意数量的用户态协程可以运行在任意数量的线程上M:os线程(即操作系统内核提供的线程),G:goroutine,其包含了调度一个协程所需要的堆栈以及instruction pointer(IP指令指针),以及其他一些重要的调度信息。P:M与P的中介,实现m:n 调度模型的关键,M必须拿到P才能对G进行调度,P其实限定了golang调度其的最大并发度 2个M分别拿到context P在运行G,M只有拿到context P才能执行goroutine。被执行...阅读全文

简书 2020-06-08 01:33:16 陈德华

剑指 0ffer 二维数组中的查找

算法名称:二维数组中的查找 题目内容:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找...阅读全文

简书 2020-06-08 01:33:15 快乐的工程师

剑指 offer 数组中重复的数字

算法名称:数组中重复的数字 题目内容: 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 解题思路: (1) 一个简单的思路是先将数组排序,然后从头开始寻找重复数字。排序的时间复杂度为O(nlogn); (2) 利用hash表存储元素,若表中存在元素则找到重复数字。Hash查询时间仅用O(1),算法时间复杂度为O(n),但是需要一个哈希表,空间复杂度为O(n); (3) 利用元...阅读全文

简书 2020-06-08 01:33:15 快乐的工程师