首页 > 其他分享 >Go开发工程师入门到项目实战 Google架构师联合大厂架构师出品

Go开发工程师入门到项目实战 Google架构师联合大厂架构师出品

时间:2023-11-01 15:44:39浏览次数:27  
标签:Google 语言 编程 开发 Go 架构师 main

01 | Go语言课程介绍

蔡超Mobvista技术副总裁兼首席架构师,前亚马逊(中国)首席软件架构师

本节内容

你好,我是蔡超,目前在 Mobvista 担任技术副总裁兼首席架构师。在加入 Mobvista 前,我也曾在亚马逊,惠普等公司担任过首席软件架构师。

我是从小学四年级开始学习计算机编程的,并一直从事至今。学习和使用过很多的编程语言,如:BASIC,PASCAL,Perl,Python,C/C++,Java,Lisp,Haskel l 等,当然,也包括 Go 语言。

在 Mobvista ,我们使用 Go 语言构建了国内最大,全球排名前十的移动广告平台,这个平台每天处理着来自世界各地的超过 500 亿次请求。

为什么选择 Go 语言来完成这么大一个项目呢?我们不妨回到 Go 语言的源头看一看。

Go 语言的初步设想始于 2007 年,当时 Go 语言的三位创始人是想通过开发一种新型的语言来解决 Google 在软件开发中面临的问题:

  • 多核硬件架构;
  • 超大规模分布式计算集群;
  • Web 开发模式导致的前所未有的开发规模和更新速度。

这些也是目前广大互联网公司普遍面临的问题。Go 语言就是针对这些问题而设计的,所以它被越来越多的公司和组织所使用,包括阿里、腾讯、百度、滴滴等众多的业界知名公司,几乎都在自身业务中用到了 Go 语言。就在不久之前,知乎也舍弃了 Python,转用 Go 重构了推荐系统。

除了用于构建大规模互联网系统,在业界,包括大家熟知的 Docker,Kubernetes 也都是通过 Go 语言开发的,这也使得 Go 语言成为了云端应用的开发语言。另外,以太坊,HyperFabric 等著名区块链项目都可以通过 Go 语言开发,Go 也成为区块链开发中的常用语言。同时,企业应用及物联网等领域也都有 Go 语言的身影。

Go 语言的应用范围还在不断扩展,所以,今天学习和掌握 Go 语言,对于你未来的职业发展和个人成长都有着非常重要的意义。

从开发者的角度看,Go 语言有着很多为开发人员所喜爱的特性:

简单:较之 C 语言的 37 个关键字和 C++ 11 的 84 个关键字,Go 只有 25 个关键字;特别是对于一些复杂编程任务如:并发编程,内存管理,Go 语言有内置的并发支持及垃圾回收机制。

高效:Go 是编译的静态类型语言,尽管支持了垃圾回收,但 GO 中仍可以通过指针进行直接内存访问。

生产力:Go 语言有简单清晰的依赖管理,简洁的语法,以及独特的接口类型,甚至是一些编程方式的约束,如支持复合而不是继承的扩展方式,这些特性使得它成为一门极具生产力的语言。

如果你有 PHP、Java、C/C++ 等等其他一门或多门编程语言的使用经验,现在想转到 Go 语言上面,并希望学完后快速用 Go 语言进行实际的项目开发,那么这门课程非常适合你来学习。

我们会从基本的 Go 语言语法讲起,并逐步过渡到进阶部分,包括实际开发中的常见并发任务的实现,常见架构模式(pipe-filter,micro-kernel) 的实现,性能调优及高可用服务的实现等,相信你学完本课程之后,就可以快速开始使用 Go 语言进行实际项目开发了。

我身边有不少有过其他语言编程基础的工程师都开始学习和使用 Go 语言,但是正如 C 语言程序员学习 C++ 一样,由于原有习惯思维模式的影响,很多工程师在使用 Go 语言时也会常常会陷入一些误区,很多人会写出用 Go 语言表示的 C 程序或 Java 程序。

比如左边这段代码,在 C/C++ 程序员的眼里是不是觉得存在严重 Bug?可是他在 Go 程序里是完全正确的:

复制代码



  func foo() *string {
  s := "Hello World"
  return &s
  }

在实际的开发工作中,工程师们常常陷入的误区还有:

  1. 大量使用共享内存的方式进行并发控制,而忽略了 Go 内置的 CSP 并发机制;

  2. Java 程序员在编写 Go 程序喜欢在方法调用间直接传递数组,导致大量内存复制。其实,与 Java 不同,Go 的数组参数是通过值复制来传递的。

  3. Java 程序员用 Go 时也总是喜欢创建一个只包含接口定义的包,以处理依赖关系。而 这 Go 中其实大可不必,在 Go 中接口的实现对接口定义是没有依赖的。

类似的问题还有很多很多,那么针对这些问题,我在这个课程中融入了个人及团队在使用 Go 语言进行实际项目开发中的经验和教训,还会通过大量代码实例讲解 Go 语言的特性,并与其他语言的进行比较,指出它们在编程和应用上的差异。

通过这门课程,我可以帮助那些有其他语言编程基础,特别是有 C,C++ 或 Java 编程经验的工程师们打破已有的思维模式,快速掌握 Go 语言,有效利用其特性来进行实际项目的开发。

在接下来的学习过程中,也希望你多多和我留言互动,将自己碰到的问题或者学习心得分享出来,让更多的人能够从中受益。我是蔡超,我在极客时间等你。

 

02 | 内容综述

蔡超Mobvista技术副总裁兼首席架构师,前亚马逊(中国)首席软件架构师

学习资料

Go 语言官方文档 https://golang.org/doc/faq

本节内容

在 QCon2017 演讲了之后,我发现许多人对 Go 语言的学习有需求和热情,便想让更多有基础的开发者,能更快捷高效地从 Go 语言到实战开发。

于是我和极客时间合作制作了《 Go 语言从入门到实战》视频课程,我会按照下面这个路线图来带你学习,建议你可以保存至手机,随时回顾课程内容。

 

03 | Go语言简介:历史背景、发展现状及语言特性

蔡超Mobvista技术副总裁兼首席架构师,前亚马逊(中国)首席软件架构师

学习资料

Go 语言官方文档 https://golang.org/doc/faq

本节内容

通过本节课您将习得如下内容:

一、简述 Go 语言背景和发展

  1. 软件开发的新挑战
  • 多核硬件架构
  • 超大规模分布式计算集群
  • Web 模式导致的前所未有的开发规模和更新速度
  1. Go 的三位创始人

Rob Pike
Unix 的早期开发者
UTF-8 创始人

Ken Thompson
Unix 的创始人
C 语言创始人
1983 年获图灵奖

Robert Griesemer
Google V8 JS Engine 开发者
Hot Spot 开发者

二、Go 语言的特点

简单
Go 只有 25 个关键字;特别是对于一些复杂编程任务如:并发编程,内存管理,Go 语言有内置的并发支持及 GC

高效
Go 是编译的静态类型语言,并且可以通过指针进行直接内存访问

生产力
简单清新的依赖管理,简单清新的语法,以及独特的接口类型

 

04 | 编写第一个Go程序

蔡超Mobvista技术副总裁兼首席架构师,前亚马逊(中国)首席软件架构师

学习资料

Go 语言官方文档 https://golang.org/doc/faq

本节内容

通过本节课您将习得如下内容:

1. 开发环境构建

GOPATH 在 1.8 版本前必须设置这个环境变量
1.8 版本后(含 1.8)如果没有设置使用默认值
在 Unix 上默认为$HOME/go, 在 Windows 上默认为%USERPROFILE%/go

2. 基本程序结构

复制代码



  package main1 // 包,表明代码所在的模块(包)
   
  import "fmt" // 引入代码依赖
   
  // 功能实现
  func main() {
  fmt.Println("Hello World!")
  }

3. 应用程序入口

  • 必须是 main 包
  • package main
  • 必须是 main 方法
  • func main()
  • 文件名不一定是 main.go

4. 退出返回值

  • Go 中 main 函数不支持任何返回值
  • 通过 os.Exit 来返回状态

5. 获取命令行参数

  • main 函数不支持传入参数
    func main(arg []string)
  • 在程序中直接通过 os.Args 获取命令行参数

 

   

标签:Google,语言,编程,开发,Go,架构师,main
From: https://www.cnblogs.com/add1188/p/17803290.html

相关文章

  • Opencv中goodFeaturesToTrack函数(Harris角点、Shi-Tomasi角点检测)算子速度的进一步
    搜索到某个效果很好的视频去燥的算法,感觉效果比较牛逼,就是速度比较慢,如果能做到实时,那还是很有实用价值的。于是盲目的选择了这个课题,遇到的第一个函数就是角点检测,大概六七年用过C#实现过Harris角点以及SUSAN角点。因此相关的理论还是有所了解的,不过那个时候重点在于实现,对于......
  • Go 并发编程 - runtime 协程调度(三)
    GoRuntimeGoruntime可以形象的理解为Go程序运行时的环境,类似于JVM。不同于JVM的是,Go的runtime与业务程序直接打包在一块,是一个可执行文件,直接运行在操作系统上,效率很高。runtime包含了一些Go的一些非常核心的功能:协程调度、垃圾回收、内存分配等。本文将着重介绍......
  • ZEGO 即构科技首发适配鸿蒙系统的 Express SDK 1.0 版本
    ​ 2019年8月,华为在开发者大会上正式发布鸿蒙系统。HarmonyOS鸿蒙系统是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持......
  • Python使用got库如何写一个爬虫代码?
    got库是一个Python的HTTP库,可以用于爬取网页数据。它提供了简单易用的API,支持异步请求和爬虫IP设置等功能。使用got库进行爬虫开发,可以快速地获取所需数据。下面是使用got库进行爬虫的基本步骤:1、安装got库:可以使用pip命令进行安装,命令为pipinstallgot。2、导入got库:在Python代码......
  • mongodb获取空闲磁盘空间
    这篇文章mongodb使用内存和硬盘特性我们介绍过mongodb删除数据后,并不会释放磁盘空间。大部分数据库为了性能都会这样做,比如mysql也是。不过mysql可以整理磁盘空间,把空闲的磁盘释放掉,还给操作系统,但是mongodb却不会。虽然说mongodb也有整理磁盘的接口调用(compact),但是它并不是释放......
  • tinygo webassembly 试用
    主要是简单测试下tinygo的使用,同时基于vite进行web的集成构建wasm生成注意只测试标注类型支持比较多,其他的就没添加,其他类型的需要自己处理,这点上wasm-pack处理的比较好main.gopackagemain //go:wasm-module//exportaddfuncadd(x,yuint32)uint......
  • [PG] Function Candidates Selection Algorithm
    FunctionCandidatesSelectionAlgorithmenvironmentsetupInlightdborafceextension,executesqlbelow,CREATEDOMAINoracle.clobASTEXT;--version1CREATEFUNCTIONoracle.btrim(text,text)RETURNStextAS'btrim'LANGUAGEinternalSTRICT......
  • gorm 一对一分页查询
    先看一下表结构typeProductsstruct{ //商品ID ProductIdint64`json:"productId"form:"productId"gorm:"primaryKey;column:product_id"` //分类ID CategoryIdint64`json:"categoryId"form:"categoryId"gorm:"......
  • html+css设计logo
    1.实现以下logo2.代码如下......
  • 【Django-DRF】多年积累md笔记 0基础到高手. 第(3)篇:使用Django开发REST 接口
    本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计RESTAPI,通过使用Django来实现一个RESTAPI为例,明确后端开发RESTAPI要做的最核心工作,然后介绍DjangoRESTframework能帮助我们简化开发RESTAPI的工作。完整版笔记直接地址:请移步这里共5章,24子模块,总计1.7......