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

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 这样不断变化的环境中更是如此。

WEYVV7主打颜值科技,轴距2950mm,推荐2。0T科技版!中型SUV市场,竞争同样属于激烈状态,合资品牌中汉兰达以及途观L都有很多追捧者。近些年,国产品牌把目光放到了中型SUV市场,并且价格上更亲民一些,就比如说WEYVV7。从颜值跟科技华硕灵耀X个性迷你屏设计加持,彰显科技潮玩新密码笔记本电脑现在已是职场人士的必备电子产品,但目前市面上大部分笔记本在设计上同质化比较明显,也让消费者在选购时产生了审美疲劳。在众多的轻薄笔记本中,华硕灵耀X系列凭借独特的设计和配置极米不是下一个石头科技中一签可能赚10万,牛年第一支大肉签极米科技来了。从公司名称来看,极米科技极具迷惑性,会让人以为它是小米生态链的企业。但实际上,这家主打智能微型投影仪产品的企业,跟小米没有半毛钱关乐享互动高增长背后数据算法和兴趣推荐引领营销科技未来美国著名的技术思想家布莱恩阿瑟在技术的本质一书中提出,众多的技术集合在一起创造出了我们称之为经济的东西,经济是技术的一种表达,技术进化引发经济进化。这一点,在今年体现得尤为明显。当K12业务发力,达内科技2020年Q4净收入大增27。63月19日,达内科技发布了2020年第四季度及全年未经审计财报。财报显示,2020年第四季度达内科技总净收入为6。50亿元,同比增长27。6,高于预期的5。4亿至5。7亿营收区间。乐信金融科技的重估与新消费的升维3月19日,乐信发布2020年Q4和全年财报。4季度,乐信录得毛利15。2亿元,环比增长55NonGAAP息税前利润7亿元,环比增长412020年实现营收116。5亿元,创历史新高感觉自己做的梦可以接起来变成一个故事会连续三天做梦梦到了小孩子,第一次是梦到一个高中同学要生孩子啦,我帮忙送到了医院,最后生出来是一对双胞胎,我还抱着一个。感觉那个孩子好小啊。其实现实中我的同学已经有两个孩子,是一男一全国三十一个医疗队,这样说,你喜欢吗?全国三十一支医疗队。参加人数42000多人。北京代号叫,京兵强将。参加人数1215。天津代号叫津字招牌。参加人数1289。河北代号叫冀来之则安之。参加人数1090。山西代号叫竭晋全试驾五菱宏光MINIEV,170km续航满足日常代步,两厢定位够灵活!对于女孩子来讲,不一定要追求多么高档的代步工具,反而是一些车身小巧可爱的车型更受欢迎。这也是为什么五菱宏光MINIEV能够取得成功的原因,作为一款微型车电动车型,指导售价在2。88广东小伙喜提宝骏Valli,三个月后,说出了他发自肺腑的用车感受我是个来自广东省且热爱旅游的90后,这两年反反复复的疫情让我在旅游出行方式上更倾向于自驾游。为了满足我的自驾游需求,我考虑购入一款休旅车,正巧我有个朋友是宝骏RC5的车主,他就向我Win10自带,更新BIOS好简单在以前,我们更新笔记本和台式机产品的BIOS通常需要通过BIOS里的EZFlash来操作。操作步骤1。连接电源后,按住F2键后点击电源键开机进入BIOS,按F7键进入Advance
有什么好用的电脑软件神器?谢谢邀请,小编今天向你推荐的不只是软件,更重要的是收集整理应用软件的思维和方法。确实,善用利器,能让我们的工作效率翻倍,但你有没有发现?在别人推荐了一堆软件给你的时候,都感觉非常实台北电脑展特邀AMDCEO苏姿丰锐龙霄龙显卡齐飞7nm新架构Computex台北电脑展主办方台北外贸协会(TAITRA)今天宣布,将于5月27日开幕的新一届台北电脑展将首次增设CEOKeynote(首席执行官主题演讲)环节,并邀请AMDCE一图读懂华为40W超级快充移动电源手机电脑都能用CNMO新闻大容量的移动电源非常多,但是充电功率高达40W的移动电源,只有华为40W超级快充移动电源这一款。华为40W超级快充移动电源将于4月11日在国内首销,有珍珠白宝石蓝两款配电脑必装的四个逆天黑科技软件,装了就不可能卸载一CCleanerCCleaner是一款神奇的电脑清理软件。电脑中的清理软件数不胜数,什么百度腾讯360等这些清理软件小编都不去推荐,只有它值得我去推荐,它可以帮你清理电脑的杂物,iOS13将迎来巨大变革,iPad将成为真正的平板电脑iOS13将大变革自从iOS10开始,iOS系统又开始进入了停滞不前的时期,每个大版本的更新仿佛都没有太大的新功能和界面更新。不过近期有不少开发者和媒体表示,今年推出的iOS13将日媒中国电动汽车正在驶向全世界参考消息网4月26日报道日本经济新闻网站4月24日发表题为中国电动汽车驶向世界设计也不错的文章,全文编译如下2021年9月,在挪威奥斯陆的中心地段,有一家与众不同的汽车展厅开业,名多元主体科城融合世界领先科技园区发展新态势环球视野多元主体科城融合世界领先科技园区发展新态势作者李国平(北京大学首都发展研究院院长),宋昌耀(北京第二外国语学院讲师)全球科技园区发展态势世界各国兴建科技园区的历史最早可以追这是一家全世界都在追赶的中国公司华尔街日报曾这样评价它先进得不像一家中国企业,这是一家全世界都在追赶的中国公司。从三个人的创客团队,到如今的无人机行业的领头羊,大疆背后有哪些故事,今天我们来聊聊汪滔与他的无人机帝报告一季度OPPO排名国内智能手机市场销量第一张兴旺中国证券报中证网中证网讯(记者张兴旺)4月25日,市场调研机构CINNOResearch发布数据显示,2022年第一季度,中国智能手机市场销量约为7439万部,同比下滑14。华为Mate50系列结合华为近两年的发布情况,华为Mate50系列或将于2022年三季度正式发布。预计将会有标准版和Pro版两个版本。处理器方面,由于漂亮国对华为的制裁和打压。这款手机不出意外会搭载高专业影像旗舰,vivoX80系列正式发布!详细参数汇总影像旗舰vivoX80系列正式发布,这次升级的有点太多了吧!一性能升级全系搭载天玑9000处理器,其中X80Pro还有骁龙8版本X80Pro的天玑9000版本和骁龙8版本除了处理器