Go语言入门(十一) 接口编程

接口 接口的定义 接口定义了一个对象化的行为规范 只定义规范,不实现 具体的对象需要实现规范的细节 实践 type 定义接口 interface 接口里面是一组方法签名的集合 type Animal interface { Talk() Eat() Run() } 实现 一个对象只要包含接口中的方法,那么就实现了这个接口 接口类型的变量可以保存实现该接口的任何类型的实例 type Animal interface { Talk() Eat() Run() } type Dog struct { ...阅读全文

51CTO博客 2020-04-14 17:48:15 wx5b285b48ed74e

「一闻秒懂」你了解goroutine和channel吗?

开源库「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 背景介绍 大家都知道进程是操作系统资源分配的基本单位,有独立的内存空间,线程可以共享同一个进程的内存空间,所以线程相对轻量,上下文切换开销也小。虽然线程已经比较轻量了,但还是占近1M的内存,而今天介绍的有“轻量级线程”之称的Goroutine,可以小至几十K甚至几K,切换的开销更小。 除此之外,在传统Socket编程时,需要维护一个线程池来为每个Socket收发包分配线程,而且需要将CPU...阅读全文

掘金 2020年04月14日 平也

「一闻秒懂」你了解goroutine和channel吗?

开源库「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 背景介绍 大家都知道进程是操作系统资源分配的基本单位,有独立的内存空间,线程可以共享同一个进程的内存空间,所以线程相对轻量,上下文切换开销也小。虽然线程已经比较轻量了,但还是占近1M的内存,而今天介绍的有“轻量级线程”之称的Goroutine,可以小至几十K甚至几K,切换的开销更小。 除此之外,在传统Socket编程时,需要维护一个线程池来为每个Socket收发包分配线程,而且需要将CPU...阅读全文

Segmentfault 2020-04-16 22:32:34 平也

想获取唯一ID?常见发号器、ID分配器方案对比介绍

发号器应具有的特性: 发号器作为一个独立的系统对外提供服务、满足高可用、高并发、弱依赖、不存在单点问题 服务自我监控与治理 现有系统接入成本低 ID具有唯一性:不能出现重复的ID号 趋势递增 实现方案目前常见的发号器实现方案如下1.UUID UUID(Universally Unique Identifier)的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的36个字符,示例:550e8400-e29b-41d4-a716-446655440000。 优点: 性能非...阅读全文

Segmentfault 2020-04-16 19:32:34 Charles_Wong

Go语言实战阅读学习第三章

个人总结 1.go编译时会把名为main的包进行编译为二进制可执行文件,因此main是整个代码项目的程序入口 2.导入包时,标准库的包会在安装go的位置找到,开发者创建或者需要下载的包,会在GOPATH位置寻找寻找的顺序是首先从go安装目录,找到就停止,反之再GOPATH位置继续找。 3.每个包可以包含多个init函数,在导入时加上”_“使其工作 4.go工具有编译build,检测vet,格式化fmt,包文档doc,包依赖工具阅读全文

Segmentfault 2020-04-14 16:32:46 赵小毅

给vscode配置golang环境

最近在折腾一个后台管理,准备用node.js的koa框架开发后端,突然脑抽筋想用go来写,一方面想学习一下go,另一方面闲的。go的开发工具,网上搜了一下,有goLand和LiteIDE,当然也有在Eclipse和vs code下通过插件来配置go的开发环境。对于vs code 我太喜欢了,那肯定要用vs code啊,但是它的配置有些坑,于是又在网上冲浪半天,我把具体环境配置记录下来。 目录 安装golang 安装vs code go插件 安装其他智能提示、代码补全等相关插件 安装golang ...阅读全文

简书 2020-04-14 15:32:51 LiviSun

开发者如何快速搭建本地 Kubernetes 集群?Minikube趟坑记录

一、背景为啥要在本地搭建 Kubernetes 集群?因为开发者可以在本地快速验证自己实现的功能,接口。众所周知,由于 Kubernetes 部署较为复杂,使得广大开发者和运维人员学习和试用 Kubernetes 的门槛很高,光是部署一套 Kubernetes 集群,就需要部署大量的组件,花费精力较大。为了降低用户体验 Kubernetes 的门槛,Minikube 项目应运而生,它是 Github 上的一个开源项目,提供了一键安装的 Kubernetes 本地集群,支持 MacOS,Linux...阅读全文

Go语言中文网 2020-04-14 14:54:20 JFrogChina

数据结构和算法(Golang实现)(30)查找算法-2-3-4树和普通红黑树

2-3-4树和普通红黑树 某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学。在这里,我们区分开左倾红黑树和普通红黑树。 红黑树是一种近似平衡的二叉查找树,从2-3树或2-3-4树衍生而来。通过对二叉树节点进行染色,染色为红或黑节点,来模仿2-3树或2-3-4树的3节点和4节点,从而让树的高度减小。2-3-4树对照实现的红黑树是普通的红黑树,而2-3树对照实现的红黑树是一种变种,称为左倾红黑树,其更...阅读全文

Segmentfault 2020-04-16 17:32:41 陈星星

go json.Unmarshal序列化时,指定必须存在的字段

# 目的 使用**encoding/json**包的**json.Unmarshal**方法的时候,指定不能为空的字段,若字段为空,Unmarshal报错。 # 具体使用场景 通过Unmarshal方法进行字段必须赋值的过滤,达到统一一处进行判断的效果,之后改起来方便。 # 前言 我们在使用**encoding/json**包的时候,会指定**tag**标签,如下: ```go type A struct { Name string `json:",omitempty"...阅读全文

Go语言中文网 2020-04-14 14:29:39 Grassto

玩转redis-延时消息队列

上一篇基于redis的list实现了一个简单的消息队列:玩转redis-简单消息队列 源码地址 使用demo 产品经理经常说的一句话,我们不光要有X功能,还要Y功能,这样客户才能更满意。同样的,只有简单消息队列是不够的,还要有延时消息队列才能算是一个完整的消息队列。 看看redis的命令,放眼望去,的有序集合(sorted set)就是一个很好用的命令,完全可以用他做一个延时消息队列 redis有序集合(sorted set) redis有序集合,每个元素都会关联一个double类型的分数。re...阅读全文

掘金 2020年04月14日 compiler

leetcode_445

Golang: 思路:组合题,先反转链表,再让它们相加,再反转回来即可。针对题目提到的进阶,可以先将两个链表拷贝下来做大数加法,再赋值回去或者新开一条链表 代码如下: func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { l1 = reverseList(l1) l2 = reverseList(l2) temp:=addTwoLinkedLists(l1,l2) return reverseList(temp) } //两个链表相...阅读全文

简书 2020-04-14 13:32:46 淳属虚构

leetcode_807

Golang: 思路:其实就是找到每行每列的最大值,根据这些最大值来为数组里的元素增加值 代码如下: func maxIncreaseKeepingSkyline(grid [][]int) int { res:=0 maxR:=make([]int,len(grid)) maxC:=make([]int,len(grid[0])) for i:=0;i<len(grid);i++{ for j:=0;j<len(grid[0]);j++{ if grid[i][j]>maxR[i]{ maxR...阅读全文

简书 2020-04-14 13:32:46 淳属虚构

记录rancher dev-v2.5 源码安装

准备环境: linux ,docker, Golang 步骤: 1.下代码 https://github.com/rancher/rancher/ 太慢了用BitComet 下压缩包。 下完后到rancher master 目录下 git init git add * git commit -m "init " git tag -a dev-v2.5 2.走编译 假定你装好了go 环境, 配置了go 环境变量 image.png 执行 ./scripts/build 等编译完成后可以看到bin目...阅读全文

简书 2020-04-14 13:32:45 robin_gu

Golang 爬虫快速入门 | 获取B站全站的视频数据

原文首发并持续更新于 https://imagician.net/archives/92/,欲了解更多信息可以前往我的博客https://imagician.net/ 提到爬虫,总会联想到Python。似乎Python是爬虫的唯一选择。爬虫只是完成一个访问页面然后收集数据的任务,用任何语言来写都能实现。相比较Python快速实现但是庞大的体型,Golang来写爬虫似乎是更好的又一选择。 HTTP请求 Golang语言的HTTP请求库不需要使用第三方的库,标准库就内置了足够好的支持: packag...阅读全文

简书 2020-04-14 13:32:44 zhshch

Golang比较两个slice是否相等

比较两个slice包含的元素是否完全相等的情况: reflect.DeepEqual 循环遍历 通常reflect的方法性能都比较低,在此使用Benchmark测试两种方法的性能,以明确具体性能差异。 两种方式的实现 新建文件: path/test/compare.go package test import "reflect" // ReflectDeepEqual 直接使用 reflect 包的 reflect.DeepEqual 方法进行比较 func ReflectDeepEqual(a...阅读全文

简书 2020-04-14 13:32:43 Avery_up

Golang 爬虫快速入门 | 获取B站全站的视频数据

原文首发并持续更新于 https://imagician.net/archives/92/,欲了解更多信息可以前往我的博客https://imagician.net/ 提到爬虫,总会联想到Python。似乎Python是爬虫的唯一选择。爬虫只是完成一个访问页面然后收集数据的任务,用任何语言来写都能实现。相比较Python快速实现但是庞大的体型,Golang来写爬虫似乎是更好的又一选择。 HTTP请求 Golang语言的HTTP请求库不需要使用第三方的库,标准库就内置了足够好的支持: packag...阅读全文

Segmentfault 2020-04-16 16:32:36 zhshch

初识grpc(一)——mac下的初体验

前言最近在做这样一个需求,一个PC客户端应用拥有一个system权限下的服务,这样的一个服务在执行高权限方面确实很有优势,解决了很多的权限难题,但任何事情都有两面性,在拥有高权限的同时也丧失了一些需要用户权限执行的功能,比如要获取显示器信息的时候,因为system的session下面是没有用户界面的,所以就无法准确获取到,想要安装证书到当前用户下面的时候也是无能无力,等等随着这样的场景越来越多,对于一个用户权限下的进程需求就愈发的明显。又由于历史性的问题,核心的通信框架在这个agent中,所有的...阅读全文

掘金 2020年04月14日 Buffer_Lee

iris mvc + xorm,Go Web站点开发。(含完整源码)

## 前言 简要说说开发一个go web站点,我们需要掌握哪些技能?准备哪些技术点? ##### 1、web框架 一个好的框架能提升你的开发效率,也有益于团队合作。iris自称是最快的goweb框架,快不快我们要测试了才知道,但是看了支撑对比,iris目前是最丰富的。 ##### 2、数据库操作 我们选用mysql,关系型数据库的主流。另外要选择一个orm框架,对于大多数的业务开发,手写sql语句的方式未免太怀旧了,这里推荐xorm,他提供了自动映射的工具。 ##### 3、缓存数据...阅读全文

Go语言中文网 2020-04-14 10:51:14 imleaf

Go Restfull Api

安装依赖 go get -u github.com/gorilla/mux 创建项目 git clone your-repository cd your-repository go mod init github.com/user/your-repository 文档https://golang.org/doc/code.html 用vscode打开 如果提示是否安装插件,选择全部安装 运行 go run main.go 编译 go build 完整代码 package main import ...阅读全文

简书 2020-04-14 05:32:41 alfalfaw