范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

GO语言商业案例(十九)trivago

  在外部看来,trivago 似乎是提供流行的酒店搜索的单一软件产品。然而,在幕后,它拥有数十个项目和工具来支持它。trivago鼓励团队选择最能完成工作的编程语言和框架。在这些决策中,对团队的限制很少,主要追求的是长期可维护性。因此,trivago 拥有一个多语言代码库,可以培养创造力和多元化思维。它使我们能够根据实际需求而不是遗留代码或过时的项目做出明智的决定。
  几个月前,一个新项目的工作机会出现了。为了改善跨多个会话的用户体验,trivago启动了"最近搜索"项目。任务是开发一个gRPC服务处理来自前端的请求,以存储、检索和汇总登录用户的最近搜索。部分任务是在 Kubernetes 中运行服务并针对我们的 trivago 验证传入请求OAuth2认证服务器。我们的团队已经在使用 Java 或 Kotlin 等 JVM 语言的类似环境中进行过类似项目的丰富经验。然而,这一次,我们选择了 Go。
  检测器
  在 trivago 运行面向用户的服务意味着同时处理潜在的数千个传入请求。此外,接触开放的互联网绝对需要适当的管理超时和共享资源。对于这两点,我们非常确定我们可以依赖 Go 对并发的出色内置支持: 超时,继续 管道和取消 语境
  由于并发请求和对共享资源的访问成为常态,因此可能会发生错误。在之前的一个类似项目中,在我们决定并行运行它们之后,我们的集成测试随机开始失败并出现不同的结果。错误模式指向可能的竞争条件,经过检查,我们很快就能找到它。当你认为这个类是一个单一请求还是多个请求之间的共享资源? public class Service {     private String value;      public handle(Request req) {         this.value: req.stringField;         System.out.println(this.value);     } }
  handle  方法将单个请求的数据存储 value  在类实例的字段中,并在以后再次使用它。如果在此期间有另一个请求进来,数据竞争发生,并且行为未定义。幸运的是,我们在用户之前发现了这个问题,但我们不想让这个问题发生。让我们看一下 Go 中的相同示例: type Service struct {     value string }  func (s *Service) handle(req Request) {     s.value: req.stringField     fmt.Println(s.value) }
  Go 代码表现出与 Java 代码相同的行为,因此容易发生数据竞争。这就是 2013 年推出的 Go 的竞争检测器发挥作用的地方。一个新的普通构建标志 -race  现在允许启用数据竞争检测: 编译器使用记录访问内存的时间和方式的代码检测所有内存访问,而运行时库监视对共享变量的非同步访问。
  —Go Race Detector 简介
  在使用该标志编译上述示例时,处理两个并发请求会导致打印以下警告,并直接将我们指向有问题的代码: ================== WARNING: DATA RACE Write at 0x00c0000901e0 by goroutine 7:   main.(*Service).handle()       @/cmd/test/main.go:16 +0x3e  Previous write at 0x00c0000901e0 by main goroutine:   main.(*Service).handle()       @/cmd/test/main.go:16 +0x3e   main.main()       @/cmd/test/main.go:8 +0xc3  Goroutine 7 (running) created at:   main.main()       @/cmd/test/main.go:7 +0xa0 ================== Found 1 data race(s)
  静态链接的二进制文件
  与 Python 或 Java 等语言相比,运行使用 Go 编译的二进制文件不需要匹配版本的解释器或虚拟机。通过另外禁止包调用 C 代码( cgo  ),我们可以创建没有任何运行时依赖的静态链接二进制文件。这让我们有机会将我们的 Docker 构建过程更进一步。 # This is a minimal example to demonstrate the "FROM scratch" usage. # It does not include steps to create and use a non-privileged user, # add root certificates and time zone data, or perform other checks. FROM golang:1.13.8 as build WORKDIR /build COPY . . RUN CGO_ENABLED=0 go build ./cmd/my-tool  FROM scratch COPY --from=build /build/my-tool /entrypoint ENTRYPOINT ["/entrypoint"]
  这几乎将 Docker 镜像的大小 (20 MB) 缩小到我们的应用程序的大小 (18 MB)。相比之下,Java 的最小 Docker 镜像本身 openjdk:8-jre-alpine  或 gcr.io/distroless/java:8  大小在 85 MB 到 125 MB 之间。不需要解释器或者虚拟机也意味着镜像基本没有启动时间. 鉴于我们在 Kubernetes 中运行服务的要求,小镜像和低启动时间是非常可取的,因为它们允许我们快速部署和自动扩展。
  go fmt
  间距和支撑位置可以说是围绕软件工程的辩论中最具争议的两个话题。除非您使用的语言"语义依赖于不可见的字符",它们本质上受制于个人风格,对代码的正确性或性能没有影响。Go 附带了一个源代码格式化程序。这是一个例子: if err!=nil {return err}$ go fmt example.goif err != nil {     return err }
  几乎每种语言都存在自动格式化源代码的工具,那么为什么要提到它作为选择 Go 而不是其他任何语言的理由呢?此外,"如果我更喜欢第一个版本怎么办?确定必须有一个设置来配置行为?"。
  关键是,您可以花费数天、数周甚至数月的时间,试图找到一种所有人都同意的编码风格,但仍然失败。将代码格式化程序集成到工具链中而不是外部工具链中,可以防止在琐碎的细节上浪费大量时间。这就是为什么我们喜欢 go fmt  我们的代码而是专注于功能。
  结论
  Go 已被证明非常适合我们的微服务,但它并不是唯一的。Rust 是另一种支持静态链接二进制文件的现代语言,并且数据竞争主要是通过 Rust 的所有权系统来防止的。这意味着它们将在编译时被捕获,而不仅仅是在运行时。然而,Go 的简单性和复杂的工具让我们不仅可以扩展我们的服务,更重要的是,软件工程本身的过程。减少入职和培训人员的摩擦对公司的生产力有重大影响,在像 trivago 这样不断变化的环境中更是如此。

190元英特尔工作站X系列酷睿I7处理器沦为3060显卡破解挖矿亮机U之前为了评测X系列的处理器,魔改君从某猫购买过一张全新的华擎X299KILLER主板,不过测试结果大家也知道了,确实不尽人意。留着无用,自然就7天无理由退货了。如果没记错,当时的价100元微星B450主板,CPU核显跑分6万大战绝地求生竟能流畅吃鸡之前给AMD的锐龙4代APU处理器4350G挖了坑,没等闻到香气,就瞬间售罄。然后,悲催的价格从1030元涨到了1259元。映泰方面虽然送来了499元的B550MSLIVER主板,300元华强北国产魔改I7处理器又出正式版?有望成为下一个黑科技300多元的魔改I7处理器是什么玩意?熟悉的小伙伴们自然已经猜到是QNCT这颗ES版的笔记本酷睿I78850H了。这货虽然刚开始的时候是300多元,但现在已经450了。基于魔改君身不是2499元!最低5599元!新版3060显卡预售价格出现,何时矿难?亲爱的小伙伴们,你们所熟悉的那个,对硬件新闻完全不感冒,不相信的魔改君这次难得地发表了一篇新闻类的文章!某星的某东店铺,前几天进行了一场新版本的RTX306012G显卡的预售活动,速度高达100G每秒!1000元3600频率16G内存4条64G英特尔视频平台拖着疲惫的身躯,给粉丝留下一片作业文章!平台如下英特尔X系列10980XE处理器(不锁内存不锁CPU频率)主板,微星X299RAIDER内存,16GDJR36004一般选择英特尔工60元3热管铜底散热器力压英特尔11代I9处理器,电脑小机箱福音从沈阳出发跑来跑去大概半个月了,终于找到了落脚的地方。亲爱的粉丝们,魔改君终于暂时落脚广东,开始为你们寻找新的产品。最近的散热器市场,雅浚B3一直独领风骚,据说跟利民也有点关系,不198元8GD4内存条额外多了双通道?900元10代I5处理器组电脑新思路有毒的魔改君,成功地发布了一篇国产长鑫颗粒内存的文章。价格199元,频率3000,时序优秀。然后成功地让它瞬间售罄,再无性价比可言!于是有粉丝怒了!一方面,文章成了空谈!另外一方面中报光大信用卡2021年中期业绩,新增发卡350万张光大信用卡2021年上半年业绩发布,累计发卡量8390。25万张,新增发卡349。98万张,较上年末增长4。35光大信用卡透支余额4413。33亿元(不含在途挂账调整),比上年末下中报华夏信用卡2021年中期业绩,实现业务收入75亿元华夏信用卡2021年上半年业绩发布,累计发卡2894。38万张,较上年末增长7。14有效卡量1943。01万张,较上年末增长4。12有效户数1634。43万户,较上年末增长2。47中报交银信用卡2021年中期业绩,整体处于调整状态交银信用卡2021年上半年业绩发布,在册卡量7377万张,较上年末增长1。52交银信用卡透支余额4632。42亿元,较上年末下降0。16交银信用卡交易金额14515。56亿元,同比中报郑州银行信用卡2021年中期业绩,累计发卡量超过50万张郑州银行信用卡2021年上半年业绩发布,累计发卡54。32万张,较上年末增长10。22郑银信用卡贷款余额30。31亿元,较上年末增长2。6郑银信用卡消费金额113。91亿元,实现2
测试之后真的很喜欢它了波多星Y1,好用的网络电视盒子就应该选它好久之前我就去买了这款波多星Y1的网络电视盒子,用了之后我确实感觉很不错,所以今天就要来给大家推荐电视盒子了,我很喜欢他们家这款没有广告的电视盒子,我每一次在看电视剧的时候是很节省使用iPad充电头,可以给iPhone充电吗?前两天聊到了充电头的问题,我发现很多同学问我找不到充电器的时候,可以用iPadMac等电源适配器给iPhone充电么?咱们都知道,iPhone11Pro系列发布之前,iPhone一iPadMini6渲染图曝光A14处理器加持告别Home键,迎接全面屏众所周知,苹果会在每年9月份的发布会上公布最新款iPhone,同时也有很大可能会更新平板电脑耳机等产品。时间已经来到了8月末,关于9月份苹果发布会新品的爆料也越来越多,其中就有传闻型号确认!苹果iPhone13包装贴纸曝光中关村在线消息根据现有爆料信息显示,苹果iPhone13将于9月17日正式开售。而近日,博主科技Yu也曝光了苹果iPhone13的配件贴纸。从图片来看,贴纸上面显示苹果新一代iPh手机发烫咋回事?降温小技巧收藏一下iPhone发烫的原因运行高耗能的App边充电边玩游戏或通话使用不良的锂电池或品质不佳的山寨机手机软件出现故障保护壳和其他覆盖物影响手机散热。手机发烫iPhone发烫的危害手机发热隐蔽防水!铁三角新一代ES945O及ES947C电容界面纽扣式话筒铁三角推出新一代ES945O全指向性电容式界面话筒ES947C心形指向性电容式界面话筒,专为会议录音监听和其他高要求收音应用而生。话筒采用坚固的全金属外壳和两层穿孔保护网格隐藏式设每日好价新贵国风小键盘大促最低319元到手外设好物每日推,新贵国风设计的60配列小键盘又迎来了一波大促,价格来到了319元,感兴趣的用户可以加车购买了。它采用XDA球帽,PBT材质,并使用了全五面热升华工艺,精致的中国风图传统电视换代智能电视来临,华为V75Super挑战三星75QN85A从华为智慧屏V75Super上市第一天起就受到众多消费者关注,华为V75Super已经成为智能电视领域的全新代表,其他厂商想要在智能电视领域分到一杯羹,恐怕是有点困难了。今天要说到iPhone在中国为什么这么火?用了无数个手机,最后还是发现苹果好用。废话不多说,直接列举我所记得的用过的所有的智能手机。第一台手机诺基亚的N几来着,塞班系统,上面有个赛车游戏超级喜欢玩,还有一个吞噬细胞一直进化从6299元跌至5199元,苹果新机发布在即,旧款iPhone现已加速让路挤牙膏已经成为了苹果iPhone手机升级的代名词,虽然iPhone12发布的时候,热度最高的段子就是十三香,但是真正了解苹果公司的果粉们都知道,十三很难香得起来,果不其然根据目前已百元WiFi6路由器能带给你怎样的上网体验?荣耀路由X3SEWiFi6与5G是我们听得最多的网络技术了,但是对于它们的认知我们还仅仅停留在速度快好用的层面,当然对于我们消费者来说这也是这项技术带给我们最贴切的使用体验。当然,在未来的长期网络