网站首页 > 文章中心 > 其它

go语言开发博客

作者:小编 更新时间:2023-09-26 18:25:04 浏览量:395人看过

如何看待go语言泛型的最新设计?

Go 由于不支持泛型而臭名昭著,但最近,泛型已接近成为现实.Go 团队实施了一个看起来比较稳定的设计草案,并且正以源到源翻译器原型的形式获得关注.本文讲述的是泛型的最新设计,以及如何自己尝试泛型.

例子

FIFO Stack

假设你要创建一个先进先出堆栈.没有泛型,你可能会这样实现:

type?Stack?[]interface{}func?(s?Stack)?Peek()?interface{}?{

go语言开发博客-图1

return?s[len(s)-1]

}

func?(s?*Stack)?Pop()?{

*s?=?(*s)[:

len(*s)-1]

go语言开发博客-图2

func?(s?*Stack)?Push(value?interface{})?{

*s?=?

append(*s,?value)

但是,这里存在一个问题:每当你 Peek 项时,都必须使用类型断言将其从 interface{} 转换为你需要的类型.如果你的堆栈是 *MyObject 的堆栈,则意味着很多 s.Peek().(*MyObject)这样的代码.这不仅让人眼花缭乱,而且还可能引发错误.比如忘记 * 怎么办?或者如果您输入错误的类型怎么办?s.Push(MyObject{})+ 可以顺利编译,而且你可能不会发现到自己的错误,直到它影响到你的整个服务为止.

通常,使用 interface{} 是相对危险的.使用更多受限制的类型总是更安全,因为可以在编译时而不是运行时发现问题.

泛型通过允许类型具有类型参数来解决此问题:

type?Stack(type?T)?[]Tfunc?(s?Stack(T))?Peek()?T?{

func?(s?*Stack(T))?Pop()?{

func?(s?*Stack(T))?Push(value?T)?{

这会向 Stack 添加一个类型参数,从而完全不需要 interface{}.现在,当你使用 Peek() 时,返回的值已经是原始类型,并且没有机会返回错误的值类型.这种方式更安全,更容易使用.(译注:就是看起来更丑陋,^-^)

此外,泛型代码通常更易于编译器优化,从而获得更好的性能(以二进制大小为代价).如果我们对上面的非泛型代码和泛型代码进行基准测试,我们可以看到区别:

type?MyObject?struct?{

X?

int

var?sink?MyObjectfunc?BenchmarkGo1(b?*testing.B)?{

for?i?:=?0;?i?b.N;?i++?{

var?s?Stack

s.Push(MyObject{})

s.Pop()

sink?=?s.Peek().(MyObject)

var?s?Stack(MyObject)

sink?=?s.Peek()

结果:

在这种情况下,我们分配更少的内存,同时泛型的速度是非泛型的两倍.

合约(Contracts)

上面的堆栈示例适用于任何类型.但是,在许多情况下,你需要编写仅适用于具有某些特征的类型的代码.例如,你可能希望堆栈要求类型实现 String() 函数

静态网站生成工具-hugo

①.)使用brew install命令安装

我的电脑是mac的,所以最方便的是直接用brew install hugo命令安装最为方便:

执行安装完成后执行hugo version 命令查看版本,确保安装成功

进入要创建网站的目录,执行一下命令

这样名称为test-blog的网站就建好了 ,

将主体添加至配置文件

执行下面命令

成功以后就可以访问就可以访问网站了.

执行命令hugo -D 即可生成一个public的文件夹,其下面的内容即为静态网站的所有文件

这里使用nginx的docker镜像 进行部署,执行以下命令:

执行成功后就能通过http:localhost访问到静态网站了.

这个工具还有很多需要研究的地方,这里只是将简单的使用方法记录了一下,以后怎样使用才能使网站更加的方便,快捷、美观,还要花时间研究.有兴趣的小伙伴可以私信我一块研究.

使用Go 语言开发大型 MMORPG 游戏服务器怎么样

细节看来, 有如下的几个点:

语言, 库

用Golang就忘记继承那套东西, 用组合+接口

用Golang服务器如何保证解决游戏服务器存盘一致性问题? stop the world是肯定的, 但是Golang可以从语言层并发序列化粉丝数据, 再通过后台存盘

channel是goroutine虽然是Golang的语言特性. 但是在编写服务器时, 其实只有底层用的比较多.

Golang的第三方库简直多如牛毛, 好的也很多

不要说模板了, C#的也不好用, 官方在纠结也不要加, 使用中, 没模板确实有点不方便. 用interface{}/反射做泛型对于Golang这种强类型语言来说,还是有点打脸

运行期

Golang和C++比性能的话, 这是C++的优势, Golang因为没虚拟机, 只有薄薄的一层调度层. 所以呢性能是非常高的, 用一点性能牺牲换开发效率, 妥妥的

和其他现代语言一样, 崩溃捕捉是标配功能, 我用Golang的服务器线上跑, 基本没碰到过崩溃情况

热更新: 官方已经有plugin系统的提交, 跨平台的. 估计很快就可以告别手动cgo做so热更新

开发, 调试, 部署, 优化

LiteIDE是我首选的Golang的IDE, 虽然有童鞋说B格不高. 但这估计实在是找不到缺点说了, 别跟我说Visual Studio, 那是宇宙级的...

曾经听说有人不看好Golang, 我问为啥: 说这么新的语言, 不好招人,后面打听到他是个策划... 好吧

Golang自带性能调优工具, 从内存, CPU, 阻塞点等几个方面直接出图进行分析, 非常直观, 可以参考我博客几年前的分析: 使用Golang进行性能分析(Profiling)

Golang支持交叉编译, 跨平台部署, 什么概念? linux是吧? 不问你什么版本, 直接windows上编译输出一个elf, 甩到服务器上开跑.不超过1分钟时间..

go语言 python ruby,这三个怎么选择

这选择显然是因人而异的..至于怎么选,要看你是初学者,还是老手?..对性能有要求,还是没要求?

如果是完全没有基础,我建议哪个都不选,如果非要选一个,那就选PYTHON..如果你是初学者,把网上的教程看个遍,再买上几本书...你所学会的也仅仅是语法,而根本不会编程...因为这些教程,也仅仅是教你语法,而没有教你编程..你甚至把网上的教程看个精光,却连个最基本的OA系统都做不出来...只能在一个黑乎乎的控制台上,打印一堆破字符..

-------网上的所有教程都会教你的:

怎么定义一个变量?怎么在控制台打印变量?

怎么写一个循环?怎么在控制台打印一堆变量?

怎么写一个函数?怎么在控制台打印返回值?

怎么创建一个对象?怎么在控制台打印对象属性?

------高级一点的教程,会教你的:

怎么用PYTHON的模块,写一个爬虫?

怎么用RUBY的ROR框架,获取一个表单?

怎么用GO的beego,写一个博客?

-------而这些的教程,从来不教你的:

面向对象有什么用? 委托是什么?事件是什么? 工厂模式,单例模式,观察者模式,这些都是啥?套接字是啥?UDP是啥?TCP/IP是啥?二叉树是什么玩意?状态机又是什么玩意?啥叫逆变?啥叫协变?啥叫异步?啥叫反射?

---------------------------------------------------------------------------------------------

如果一套教程,要把这些都讲明白...可能需要上千集...所以这些教程,都跳过了这些内容..但如果你不明白这些,就根本学不会编程...如果你打算学一门语言,而手上只有几十集教程,外加三五本书...那你只能学会玩控制台...

所以初学者选择一门语言,首先要保证这门语言作为主要开发语言,常年被公司使用,这样才能真正学会编程.然而这三门语言都不具备这样的特点.它们通常都是被当成第二语言,做一些辅助开发的工作.其中Python只在极少数情况下,才被用来作为主要开发语言.至于Go与Ruby,我目前还没听说过它们有被当作主要开发语言的例子.我所推荐的是从C#和JAVA两者之间,二选一...学精其中一门之后,再来考虑PYTHON或GO作为第二语言...不然无论你选哪个,都几乎不可能靠一门语言找到工作.

利用GitHub-Actions将Hugo博客自动发布到GitHub和Gitee Pages

go语言开发博客-图3

现在个人博客通常有比较多的选择,如果不想要自己购买服务器实现静态博客的发布,可以在、CSDN等平台建立自己的账号并发布,但是原始数据无法在本地管理;如果想要数据完全自己管理,可以使用GitHub或者Gitee Pages功能发布自己的博客,利用Hugo或Hexo等成熟的静态博客将md文件转换成静态网站文件进行快速发布.本文就用来记录如何快速将博客发布到、GitHub以及Gitee Pages三个平台.

我希望的流程当然是主要精力用在写文章,发布的流程最好完全不需要手动处理,但实际情况下手动发布博客的流程大体是:

之前有使用过Travis CI+GitHub+Hexo自动发布到GitHub Pages,但是GitHub的访问经常不那么靠谱,所以呢想着也能同步到Gitee,并且自动构建Hexo的速度受Nodejs环境部署影响,速度很慢,所以呢本次计划采用Hugo来构建网站文件,整体流程设计如下:

为了满足博客自动发布流程,首先需要在本地准备好生产环境,以满足快速发布,以此的复杂是为了长期的简单,所以呢在环境准备阶段我会把所有涉及的工具都记录下来,以方便大家使用以及后边自己回顾,环境准备包含:

Obsidian完成知识积累后,按照ZK-Project-Archive-Blog的流程发布Blog,但是Obsidian的文件相互关联,且附件如何快速复用,需要对Typora和Obsidian都进行简单的配置,确保后续Blog能够快速完成并发布,并且文件仍在Obsidian工程中正常显示;

Typora非常的简洁,而且可以实时预览,在写博客的时候经常会插入一些图片,截图后可以直接粘贴进去,图片也会自动保存在本地,这里需要注意图片的保存路径,在偏好设置里,设置插入图片时复制到指定路径(./resource/),这样复制的图片就会自动保存在当前文件夹下的resource文件夹里,方便后续管理与转移.

在.ssh文件生成id_rsa和id_rsa.pub两个文件;

Hugo 是一个基于Go语言开发的静态博客框架,号称世界上最快的构建网站工具;

命令为: hugo new site myblog

myblog为博客的目录名,可以修改为你自己想取的名字,生成的目录如下:

由于默认主题生成的文章页面有些功能是不需要的,所以呢需要对themes下文件进行修改:

将config、content和themes三个目录拷贝到新创建的站点目录,将content下替换为文章文件即可.

utterances 是一款基于Github Issue的Github工具,优点主要是无广告、加载快、配置简单,轻量开源.

由于 utterances 是一款Github App,所以呢 安装utterances 非常简单,只需要授权特定repo权限给 utterances 就可以了,注意一个点:授权的这个repo必须是public的,可以选择多个repo,但是建议选择一个就可以了,也比较安全.

这是当前最简单的配置方法, 也可以在 utterances官方 查看其他配置方法,以及详细的配置参数说明.

Obsidian的安装和使用可参考我的另一篇文章: Obsidian作为第二大脑工具的基本使用和配置

所有环境准备好后,终于要开始启动我们的自动化流程的实现了;

同之前步骤相同,将Gitee密码配置到GitHub Secrets,命名为:GITEE_PASSWORD,所有配置结果如下:

synctogitee.yml

需要绑定Gitee账号到微信公众号,否则最后一步reload pages自动部署Gitee Pages会登录失败,原因是需要短信验证;绑定公众号后则不需要短信验证;其他问题解决可以参考 gitee-pages-action

在Typora完成文章编写后,一键上传所有图片到Gitee图床,拷贝发布到,然后提交到GitHub repo master分支,即可自动部署到GitHub和Gitee Pages;

以上就是土嘎嘎小编为大家整理的go语言开发博客相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章