跳至主要內容
两分钟让你明白Go中如何继承

两分钟让你明白Go中如何继承

最近在重构代码的时候,抽象了大量的接口。也使用这些抽象的接口做了很多伪继承的操作,极大的减少了代码冗余,同时也增加了代码的可读性。

然后随便搜了一下关于Go继承的文章,发现有的文章的代码量过多,并且代码format极其粗糙,命名极其随意,类似于A、B这种,让人看着看着就忘了到底是谁继承谁,我又要回去看一遍逻辑。

虽然只是样例代码,我认为仍然需要做到简洁、清晰以及明了。这也是我为什么要写这篇博客的原因。接下里在这里简单分享一下在Go中如何实现继承。

1. 简单的组合

说到继承我们都知道,在Go中没有extends关键字,也就意味着Go并没有原生级别的继承支持。这也是为什么我在文章开头用了伪继承这个词。本质上,Go使用interface实现的功能叫组合,Go是使用组合来实现的继承,说的更精确一点,是使用组合来代替的继承,举个很简单的例子。


LeonSH...大约 6 分钟Golang继承
Go中使用Seed得到重复随机数的问题

Go中使用Seed得到重复随机数的问题

重复的随机数

废话不多说,首先我们来看使用seed的一个很神奇的现象。

func main() {
	for i := 0; i < 5; i++ {
    rand.Seed(time.Now().Unix())
		fmt.Println(rand.Intn(100))
	}
}

// 结果如下
// 90
// 90
// 90
// 90
// 90

LeonSH...大约 6 分钟GolangGolang
go源码解析-Println的故事

go源码解析-Println的故事

本文主要通过平常常用的go的一个函数,深入源码,了解其底层到底是如何实现的。

Println

Println函数接受参数a,其类型为…interface{}。用过Java的对这个应该比较熟悉,Java中也有…的用法。其作用是传入可变的参数,而interface{}类似于Java中的Object,代表任何类型。

所以,…interface{}转换成Java的概念,就是Object args ...

Println函数中没有什么实现,只是return了Fprintln函数。


LeonSH...大约 7 分钟GolangGolang
用go-module作为包管理器搭建go的web服务器

用go-module作为包管理器搭建go的web服务器

本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器。并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档。

源码在此处:项目源码

大家可以先查看源码,然后再根据本篇文章,来了解搭建过程中服务器的一些细节。


LeonSH...大约 14 分钟GolangGolang