Golang interface接口全面理解(一)

There are three kinds of time: the future is late, and now it is flying like an arrow. The past will never stand still. 时间的步伐有三种:未来姗姗来迟,现在像箭一般飞逝,过去永远静立不动。 什么是interface 在面向对象编程中,可以这么说:“接口定义了对象的行为”, 那么具体的实现行为就取决于对象了。 在Go中,接口是一组方法签名。当一个类型为接口中的所有方法提供定义时,...阅读全文

2018-03-12 15:33:08 90design
阅读:39012 评论:5

Go 中的任务队列

在 [RapidLoop](https://www.rapidloop.com/) 中,我们几乎用 [Go](https://golang.org) 做所有事情,包括我们的服务器,应用服务和监控系统 [OpsDash](https://www.opsdash.com/)。 Go 十分擅长编写异步程序 - goroutine 和 channel 使用十分简单不容易出错并且和其他语言相比异步/等待模式,语法和功能都更加强大。请继续阅读来瞧瞧围绕任务队列的一些有趣的 Go 代码。 ## 不...阅读全文

2018-03-19 10:51:44 saberuster
阅读:12025 评论:4

Go 系列教程 —— 27. 组合取代继承

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 27 篇。 Go 不支持继承,但它支持组合(Composition)。组合一般定义为“合并在一起”。汽车就是一个关于组合的例子:一辆汽车由车轮、引擎和其他各种部件组合在一起。 ## 通过嵌套结构体进行组合 在 Go 中,通过在结构体内嵌套结构体,可以实现组合。 组合的典型例子就是博客帖子。每一个博客的帖子都有标题、内容和作者信息。使用组合可以很好地表示它们。通过...阅读全文

2018-03-25 21:42:48 heyulong
阅读:16514 评论:0

Go 系列教程 —— 28. 多态

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 28 篇。 Go 通过[接口](https://studygolang.com/articles/12266)来实现多态。我们已经讨论过,在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部[方法](https://studygolang.com/articles/12264),那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 #...阅读全文

2018-03-25 21:47:13 heyulong
阅读:19169 评论:0

Golang: 详解container/heap

golang的container包中提供了heap容器,这个容器可以用来做什么,又是怎么做到的呢?本文从golang 1.9.3的源码出发,说明了堆、heap包、heap包的用途、heap包的实现。 1 heap是什么 首先先来解释一下堆(Heap)是什么。 据维基百科 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性...阅读全文

阅读:9048 评论:0

【go密码学】-数字签名

介绍 数字签名就是只有消息的发送者才能产生的别人无法伪造的一段数字串,这段数字串是对信息真实性的有效证明。 发送者:生成签名 接受者:验证签名 非对称密码机制 非对称加密中,公钥用于加密,私钥用于解密。数字签名中相反,私钥生成签名,公钥验证签名。 数字签名方法 直接对消息签名 对消息的散列值签名 先用单向散列函数求出消息的散列值,然后再将散列值进行加密。 数字签名算法 RSA 案例一 package main import ( "crypto/rsa" "crypto/rand" "fmt" "...阅读全文

2018-10-13 10:34:42 jincheng828
阅读:1936 评论:2

golang中的函数参数值传递和引用传递

在golang中函数的参数默认为 **按值传递**,即在函数内部修改传入参数的值是函数外部传入值的 **拷贝**。 如果想要使用引用传递,需要将传入的参数设置为 **指针类型**。 如果传入的参数数据很大,建议使用指针类型,减少内存因拷贝参数而占用。 ``` type person struct{ Name string Age int } func SetName(p person, name string){ p.Name = name } ...阅读全文

阅读:9085 评论:6

Go基础系列:nil channel用法示例

Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 当未为channel分配内存时,channel就是nil channel,例如var ch1 chan int。nil channel会永远阻塞对该channel的读、写操作。 nil channel会阻塞对该channel的所有读、写。所以,可以将某个channel设置为nil,进行强制阻塞,对于select分支来说,就是强制...阅读全文

阅读:2636 评论:0

Golang学习笔记之WEB框架(gin)基本使用

gin是Go语言写的一个web框架,API性能超强,运行速度号称较httprouter要快40倍。封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点。 Github地址:https://github.com/gin-gonic/gin gin的安装:go get github.com/gin-gonic/gin API gin.Default() 创建路由 gin.DisableConsoleColor() 禁用控制台颜色 gin.SetMode() 设置gin模式。参数可...阅读全文

2018.12.16 10:00 学生黄哲
阅读:11484 评论:0

golang go 包管理工具 go mod的详细介绍 --- 赶紧拥抱 go mod吧,go path的那套东西已经out了。

go mod go官方的module管理工具 原文:https://github.com/googege/blog 用法: 在一个非go path的路径中新建一个项目,然后使用go mod init 就可以初始化一个新的包(要开启这个 export GO111MODULE=on写入.bash_profile即可 win的同学自己找找设置 GO111MODULE的win版本设置方法哈),其实跟github(gitlab都行)用在一起更好 在github上新建一个项目,例如说 test 在本地将这个...阅读全文

阅读:2008 评论:0

Golang1.5到Golang1.12包管理:golang vendor 到 go mod

1. 前言 Golang 是一门到如今有十年的静态高级语言了,2009年的时候算是正式推出了,然后到最近的一两年,2017-2018年的时候,突然直线上升,爆火了,得益于容器化运维/直播/短视频/区块链... 我从2016年毕业的时候,第一份工作,就接触了 Golang 语言,那时公司用 Java 处理数据流,然后用 Golang 写高性能的网络中间件。那时,Golang 还很简单,那时 Docker刚火,Kubernates 还在发力中,基本在中国,还算小众语言。 之后2017年新年刚过,我跑...阅读全文

2019-03-05 10:34:45 hunterhug
阅读:2445 评论:0

graphql 介绍

Graphql 介绍 graphql 是一种用于 API 的查询语言,对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,减少数据的冗余。 example 声明类型 type Project { name: String tagline: String contributors: [User] } 查询语句 { project(name: "GraphQL") { tagline } } 获取结果 { "project": { "tagline": "A ...阅读全文

阅读:2577 评论:0

“B站源码泄露”事件后,go语言成了焦点

一、B 站后端源码被恶意“开源” 几 小时1、B站源码泄露事件始末今日,网上传出消息,bilibili整个网站后台工程源码泄露,这是国内规模较大的互联网企业中首例整个网站后台工程源码泄露。而且B站网站不仅仅是泄露工程源码这么简单,有很大一部分用户的用户名密码被硬编码在代码里面,也泄露出去了,对用户来说影响很大。 作为国内go语言的大厂,哔哩哔哩代码被上传到了github,平台上确实存在由一个名叫「openbilibili」的用户创建的「go-common」代码库,项目描述为「哔哩哔哩 bilib...阅读全文

2019.04.23 15:31 qfliweimin
阅读:26578 评论:2

为什么80%的码农都做不了架构师?

一般来说技术团队的金字塔顶尖往往是技术最牛的人做架构师(或TL)。所以架构师在广大码农中的占比大概平均不到 20%。而架构师也可以分为初级、中级、高级,江湖上真正高水平的架构师就更少了。所以,80%码农干上许多年,还是做不了架构师,正在辛苦工作的程序员们,你有没有下面几种感觉?​① 我的工作就是按时完成领导交给我的任务,至于代码写的怎样,知道有改进空间,但没时间去改进,关键是领导也不给时间啊。② 我发现我的水平总是跟不上技术的进步,有太多想学的东西要学,Swoft用的人最近比较多啊,听说最近Sw...阅读全文

2019-06-20 12:03:47 PHPsix
阅读:77170 评论:21

Consul使用手册

Consul是什么 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。它具备以下特性 : service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。 health checking:健康检测使consul可以快速的 告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。 key/value sto...阅读全文

阅读:7991 评论:0

golang 反射使用总结

1、反射三法则 2、反射用法 3、反射性能 4、反射总结 反射是一种检测结构特别是类型的能力,属于元编程的一种(用程序来生成代码)。go是静态类型。每个变量都有个静态类型,类型在编译阶段就确定了。 为了更好的理解反射,interface需要首先了解。它代表方法的集合。interface的变量可以保存任何的变量,只要变量实现了接口的方法。当interface的方法个数为0个时可以代表所有的变量。 var r io.Readerr = os.Stdinr = bufio.NewReader(r) r...阅读全文

2019.08.18 16:48* BigFish_大鱼
阅读:1674 评论:0

golang中 type func() 用法分析

在看golang 的http服务部分代码时,被golang 中的 type func()写法难住了,一时没看懂代码。后来查资料后,有了一点理解。 在golang中可以通过这样简单实现一个http服务 package main import "net/http" func mHttp() { http.HandleFunc("/", h) http.ListenAndServe("0.0.0.0:8888",nil) } func h(w http.ResponseWriter, r *http....阅读全文

2019.08.25 18:50 紫葡萄0
阅读:13611 评论:0

Go 垃圾回收:第三部分 - GC 的步调

## 前言 这是三篇系列文章中的第三篇。该系列文章提供了一种对 Go 垃圾回收背后的机制和概念的理解。本篇的主要内容是 GC 如何控制自己的步调。 三篇文章的索引:<br> 1)[Go 垃圾回收:第一部分 - 概念](https://www.ardanlabs.com/blog/2018/12/garbage-collection-in-go-part1-semantics.html)<br> 2)[Go 垃圾回收:第二部分 - GC 追踪](https://www.ardanl...阅读全文

2019-11-09 21:33:42 zhoudingding
阅读:1786 评论:0

通过项目学习Go语言之go mod

Go语言的包管理经过了多种工具的演变,上一节中我们通过配置GOPATH来存放源代码进行包的管理,其实称不上包管理,在起初开发的时候我们会把我们一个系统依赖的全部源代码下载到src目录,当多个 系统依赖不同版本的代码库时,处理起来十分的麻烦。所以,Go的包管理一致受到开发者的诟病。后来社区出现了几个针对Go开发的包管理工具。从Godep包管理工具到glide,直至go1.5版本引入go vender机制才有了基本的包管理能力,govender的引入也是实验性质的,也就是说直至go1.5版本都没有出...阅读全文

2019-11-15 17:32:51 更多精彩内容正在或即将被使用的 等
阅读:1237 评论:0

18.Go语言基础之反射

1.变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息。 值信息:程序运行过程中可动态变化的。 2.反射介绍 在Python中,Java中,都有反射的概念。 反射是"指程序运行期对程序本身进行访问和修改的能力"。 程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言,可以再程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等正和岛可执行文件中,并给程序提供接口,访问反射信息,这样就可以...阅读全文

2020-02-07 20:32:43 DevOperater
阅读:656 评论:0