• Golang语言中的interface是什么(下)

    interface接口还可以作为函数参数,因为interface的变量可以持有任意实现该interface类型的对象,我们可以通过定义interface参数,让函数接受各种类型的参数。判断interface变量存储的元素的类型,目前常用的有两种方法:Comma-ok断言和switch测试。" list[2] = Person{"Lily", 19} // Comma-ok断言 for index, element := range list { // 判断变量的类型 格式:value, ok = element // value是interface变量的值,ok是bool类型,element是interface的变量,T是断言的interface变量的类型 if value, ok := element.; ok { fmt.Printf } else if value, ok := element.; ok { fmt.Printf } else if value, ok := element.; ok { fmt.Printf } else { fmt.Printf } } // switch for index, element := range list { // 注意:element.语法不能在switch外的任何逻辑中使用 switch value := element. { case int: fmt.Printf case string: fmt.Printf case Person: fmt.Printf default: fmt.Printf } }}
  • 关于Google云服务Apis的描述性Apis

    我正在制作一个地图,其中列出了所有Google云服务及其相关信息,例如最新更新,账单价格和服务类别等,我猜提供的API可以在您的脚本中使用这些服务,但我没有找到一种描述性API的方法,仅向我提供有关服务的信息。 使用API​​,我可以访问付费库来检索有关Google服务Apis的描述性数据!有什么办法可以实现这一目标?
  • 我在基于Go的反向代理中看到随机延迟高峰

    我有一个基于Go的应用程序,正在使用其ReverseProxy功能。当我监视由此反向代理添加的延迟时,通常是十亿分之一秒。但是在某些情况下(一天几次),延迟增加了200毫秒。 是什么原因造成的?可能是gc吗? 任何指针将不胜感激。
  • 走进Golang之Channel的数据结构

    上篇文章讲了 channel 的基本使用,讲了一些使用时需要注意的事项,本文将重点介绍 channel 中的两个数据结构:循环队列 与 双端链表 。既然 channel 是一个管道,用来满足不同 goroutine 间交换消息的。channel 的数据结构接下来我们分析一下 channel 在实际运行中,它的结构体是怎么样的。就是两个读的 goroutine 被阻塞在一个无缓冲的 channel 上。无缓冲 channel注意其中 buf 字段可存储的长度是0,这是因为 无缓冲 channel 不会用到循环队列来存储数据。其实有缓冲的 channel,就是把同步的通信变为了异步的通信。下图形象的展示了有缓冲 channel 是如何交换数据的。结构示例循环队列今天最重要的是理解 channel 中两个关键的数据结构。
  • Golang技巧之默认值的设置

    我们在日常写方法的时候,希望给某个字段设置一个默认值,不需要定制化的场景就不传这个参数,但是 Golang 却没有提供像 PHP、Python 这种动态语言设置方法参数默认值的能力。但是由于 Golang 无法在参数中设置默认值,只有以下几个选择:提供一个初始化函数,所有的 ext 字段都做为参数,如果不需要的时候传该类型的零值,这把复杂度暴露给调用者;将 ext 这个结构体做为一个参数在初始化函数中,与 1 一样,复杂度在于调用者;提供多个初始化函数,针对每个场景都进行内部默认值设置。
  • Golang配置不起作用

    I am running a VMWare Kali Linux Virtual Machine from Offensive Security : https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/ I opened a terminal, typed in >sudo -i and got to root@kali. Then I downloaded go1.14.4.linux-amd6...
  • 为什么GOPROXY对Golang开发如此重要?

    GOPROXY控制Go Module下载的来源,有助于确保构建的确定性和安全性。虽然这些场景被认为是不好的实践,但它们确实经常发生,如下图:使用GOPROXY为您的Golang开发或CI环境设置GOPROXY,将Go Module下载请求重定向到GOPROXY 指向的缓存库。使用GOPROXY进行模块依赖关系的管理的有助于开发构建不变性需求。另外GOPROXY的缓存还有助于确保模块始终可用,即使VCS repo中的原始模块已被销毁。公共GOPROXY公共GOPROXY是一个集中式的存储库,全球各地的Golang开发者都可以使用它。大多数此类GOPROXY,比如JFrog GoCenter,Goproxy.cn都是免费提供给Golang开发者社区的。
  • 用event driven顺利度过双十一(11/11)

    中国电商的最大活动双十一(11月11日)的0点开始,销售额在急剧上升,服务请求事件疯狂的蜂拥而至,想起了一年前熬夜修改为了把O2O系统改成Event driven的方式。 双十一的氛围可以参考我的同事写的 开发者看到的中国的购物庆典双十一(光棍节) 当天发生了 MongoDB 的索引问题,容量不足而发生的kafka的服务障碍等等... 但是对顾客来说应该没感受到不方便,也算是顺利的提供了服务, (双十一)也平安的度过了。 这篇文章介绍我们顺利度过双十一要素之一的Event driven方式 背景 ...
  • How to Use Golang Context

    Go中有一些其他的大众语言和概念。 果断地舍弃了class (因此没有继承) 也不存在所谓的Exception (难道是不允许使用例外情况本身的意志么?虽然可能看起来挺酷,但坦白说实在是不方便 ㅠㅠ 呜呜…) 利用Go routine和channel的并行处理模型也不是熟悉的概念 若在这里再补充一条的话,那就是 Context这个东西。 由于前面提到的三条是使用Go语言来做什么时必须要知晓的概念,因此首次接触Go语言的大部分人都会花费大量时间来学习。但是他们似乎认为,即便不使用context,...
  • Go My Way #3 - Tracing

    Go My Way是用3篇文章介绍使用Go语言时,我比较喜欢的方式。 如果没看之前的文章可以参考下面的链接。 Go My Way #1 - Web FrameWork Go My Way #2 - DataBase, logging Go My Way #3 - Tracing 番外 - gomobile 这篇文章介绍追踪。 现在我们的云服务里有500多个微服务在运行。 用户的一个请求需要通过多个微服务的之间的配合返回给最终结果。 处理过程中因业务需求产生事件,consumer service...
  • Go My Way #2 - DataBase, Logging

    Go My Way是介绍我用Go语言开发web应用时首选方案的3篇文章 . 没读过之前的文章,请下面的链接. Go My Way #1 - web 框架 Go My Way #2 - DataBase, Logging Go My Way #3 - Tracing gomobile 这篇文章介绍数据库和日志 数据库 跟其他语言的ORM(Ruby的active record,.Net的entityframework,Java的JPA,等)相比,Go的DB相关的Package不足之处较多。但是G...
  • Go My Way #1 - Web Framework

    Ruby的Ruby on Rails,Java的Spring,Python的Django,Nodejs的Express。 多数有人气的语言都有主流的web框架。所以不需要多想使用主流框架就可以以,但是Go没有这些。 Go提倡根据情况合理的组合package。 熟练了以后非常方便,但对于第一次接触Go的人选择package是困难的事情。 接触Go已有3年,过去1年中积极使用了Go语言。 起初公司内只有自己使用Go,现在使用Go开发的同事多了起来。 我们公司在中国提供it服务,目前阿里云里运营着5个linux...
  • 基于DDD的golang实现

    女主宣言今天小编为大家分享基于DDD的golang实现,DDD即领域驱动设计,该模式也算是比较热门的话题了。本文不会重点去解释Golang中实现DDD的相关理念,而是作者根据自己的研究对DDD的理解。DDD包含4个层:Domain:这是定义应用程序的域和业务逻辑的地方Infrastructure:此层包含独立于我们的应用程序而存在的所有内容:外部库,数据库引擎等。
  • 官方golang包管理神器,值得一试!

    java 里有一个叫 maven 的包管理工具, go 也有一个叫 go mod 的管理工具,可以管理项目引用的第三方包版本、自动识别项目中用到的包、自动下载和管理包。根据官方的说法,从 Go 1.13 开始,模块管理模式将是 Go 语言开发的默认模式。
  • 一、Golang中的反射基本使用

    Go中也提供了反射机制,与Java一样Go的反射也是在运行时获取对象的相关信息,更新对象内部状态;Golang通过反射可以获取对象类型、字段类型与值、调用struct实例方法、更新实例值等;Go关于反射相关的对象、函数都在reflect包中最主要的两个为:Type与Value;Go提供了下面两个函数,这两个是Go反射的核心;reflect.TypeOf 返回目标对象的类型reflect.ValueOf 返回值目标对象的值t:=1fmt.Println(reflect.TypeOf(t), reflect.V
  • 无法在Ubuntu 18.04中安装golangci-lint

    在我的Ubuntu 18.04中安装vim-go时,但按照以下步骤操作,出现如下所示的错误: vim-go: Error installing github.com/golangci/golangci-lint/cmd/golangci-lint@master: go: found github.com/golangci/golangci-lint/cmd/golangci-lint in github.com/golangci/golangci-lint v1.27.1-0.20200518075657-...
公告

《从零开始开发BBS》课程上线啦,快来跟着我一步步搭建属于你的BBS吧。

课程地址:https://www.shiyanlou.com/courses/1436
9折优惠邀请码: ZHwfIjb1

该课程会带领大家一步步的了解并熟悉Go语言开发,如果你是一个Go语言初学者,或者正准备学习Go语言,那么这个课程非常适合你。如果你熟练掌握了本课程中的知识点,相信你就已经入门Go语言开发,并能胜任日常的开发工作了。