学习golang需要多久?

250 2023-12-09 05:12

一、学习golang需要多久?

如果有其他语言的经验的话,1,2天差不多就可以上手了。因为go没有过多的语法糖,写法比较单一,而且go的语言特性也会比较少一些,所以学起来内容并不多。

如果没有编程语言经历,那学个半个月也差不多能把基本的掌握并写出一些东西来了

二、golang语言就业前景?

就业前景广。Golang的并发模型也领先于Java。Gorouting是为并发而生的,所以现在学习golang是一个很好的选择,但是golang也有它自己的优点它的缺点是项目管理和包依赖管理不如Java,通用支持也不是很好。

与Java的生态相比,go的国内生态还很欠缺。另外,爪哇的就业比哥朗简单,因为差距很大,但哥朗的就业工资并不低于爪哇。因此,从语言的角度来看,golang优于Java,生态上低于Java,理论上比Java有着光明的前景,这需要看到国内的趋势。

三、golang语言就业方向?

工作职责:

1、负责数据库架构设计及中长期规划;

2、负责数据库的监控,备份,性能优化及故障处理等 ;

3、数据库分库分表方案的设计、实施及数据迁移;

4、负责根据项目需求设计并制定数据库解决方案;

5、负责SQL review,慢SQL优化等工作;

6、负责高可用及容灾落地实施工作;

7、制定并不断完善数据库的运维规范、开发规范及安全规范。

任职资格:

1、计算机相关专业本科及以上,三年以上Oracle 、Mysql 、DB2运维管理经验,精通RAC,DATAGUARD,OGG,具备ES,MongoDB、Redis使用经验优先考虑; 2、熟悉MySQL数据库体系结构和工作原理,熟悉常见存储引擎的原理、特点以及主从复制原理和实践,熟悉目前常用的开源中间件解决方案,有分表分库相关项目经验;

3、具备较强的数据库设计、SQL优化能力,并能根据业务需求,提供高可用、高性能、可扩展、稳定可靠的数据库解决方案;

4、有一定的脚本语言编程(python,golang等)等自动化开发能力优先;

5、良好的沟通、协调能力,能在一定的压力下有效开展工作,有阿里云数据库工作经验优。

四、golang语言能生成动态库不?

是的,Golang语言可以生成动态库。动态库是一种可以在运行时加载的共享库,它包含了一些函数和变量,可以在程序运行时被调用。在Golang中,可以使用cgo工具来生成动态库。 

五、golang语言有没有手机编译器?

安装termux,你有了一切。

还不满足,那么termux安装纯正Linux,你的世界里面有了光。

不相信?看这里,你会发现,手机也可以是个生产力工具:

空童:极致安卓之—Termux安装完整版Linux

六、精通golang语言是怎样一种体验?

如果你了解任何一种编程语言,那么通过在「Go 语言之旅」学习几个小时就能够掌握 Go 的大部分语法,并在几天后写出你的第一个真正的程序。阅读并理解 实效 Go 编程,浏览一下「包文档」,玩一玩 Gorilla 或者 Go Kit 这样的网络工具包,然后你将成为一个相当不错的 Go 开发者。

这是因为 Go 的首要目标是简单。当我开始学习 Go,它让我想起我第一次 发现 Java:一个简单的语言和一个丰富但不臃肿的标准库。对比当前 Java 沉重的环境,学习 Go 是一个耳目一新的体验。因为 Go 的简易性,Go 程序可读性非常高,虽然错误处理添加了一些麻烦(更多的内容在下面)。

Go 语言的简单可能是错误的。引用 Rob Pike 的话,简单既是复杂,我们会看到简单背后有很多的陷阱等着我们去踩,极简主义会让我们违背 DRY(Don't Repeat Yourself) 原则。

基于 goroutines 和 channels 的简单并发编程

Goroutines 可能是 Go 的最佳特性了。它们是轻量级的计算线程,与操作系统线程截然不同。

当 Go 程序执行看似阻塞 I/O 的操作时,实际上 Go 运行时挂起了 goroutine ,当一个事件指示某个结果可用时恢复它。与此同时,其他的 goroutines 已被安排执行。因此在同步编程模型下,我们具有了异步编程的可伸缩性优势。

Goroutines 也是轻量级的:它们的堆栈 随需求增长和收缩,这意味着有 100 个甚至 1000 个 goroutines 都不是问题。

我以前的应用程序中有一个 goroutine 漏洞:这些 goroutines 结束之前正在等待一个 channel 关闭,而这个 channel 永远不会关闭(一个常见的死锁问题)。这个进程毫无任何理由吃掉了 90 % 的 CPU ,而检查 expvars 显示有 600 k 空闲的 goroutines! 我猜测 goroutine 调度程序占用了 CPU。

当然,像 Akka 这样的 Actor 系统可以轻松 处理数百万的 Actors,部分原因是 actors 没有堆栈,但是他们远没有像 goroutines 那样简单地编写大量并发的请求/响应应用程序(即 http APIs)。

channel 是 goroutines 的通信方式:它们提供了一个便利的编程模型,可以在 goroutines 之间发送和接收数据,而不必依赖脆弱的低级别同步基本体。channels 有它们自己的一套 用法 模式。

但是,channels 必须仔细考虑,因为错误大小的 channels (默认情况下没有缓冲) 会导致死锁。下面我们还将看到,使用通道并不能阻止竞争情况,因为它缺乏不可变性。

丰富的标准库

Go 的 标准库 非常丰富,特别是对于所有与网络协议或 API 开发相关的: http 客户端和服务器,加密,档案格式,压缩,发送电子邮件等等。甚至还有一个html解析器和相当强大的模板引擎去生成 text & html,它会自动过滤 XSS 攻击(例如在 Hugo 中的使用)。

各种 APIs 一般都简单易懂。它们有时看起来过于简单:这个某种程度上是因为 goroutine 编程模型意味着我们只需要关心“看似同步”的操作。这也是因为一些通用的函数也可以替换许多专门的函数,就像 我最近发现的关于时间计算的问题。

Go性能优越

Go 编译为本地可执行文件。许多 Go 的用户来自 Python、Ruby 或 Node.js。对他们来说,这是一种令人兴奋的体验,因为他们看到服务器可以处理的并发请求数量大幅增加。当您使用非并发(Node.js)或全局解释器锁定的解释型语言时,这实际上是相当正常的。结合语言的简易性,这解释了 Go 令人兴奋的原因。

然而与 Java 相比,在 原始性能基准测试 中,情况并不是那么清晰。Go 打败 Java 地方是内存使用和垃圾回收。

Go 的垃圾回收器的设计目的是 优先考虑延迟,并避免停机,这在服务器中尤其重要。这可能会带来更高的 CPU 成本,但是在水平可伸缩的体系结构中,这很容易通过添加更多的机器来解决。请记住,Go 是由谷歌设计的,他们从不会在资源上面短缺。

与 Java 相比,Go 的垃圾回收器(GC)需要做的更少:切片是一个连续的数组结构,而不是像 Java 那样的指针数组。类似地,Go maps 也使用小数组作为 buckets,以实现相同的目的。这意味着垃圾回收器的工作量减少,并且 CPU 缓存本地化也更好。

Go 同样在命令行实用程序中优于 Java :作为本地可执行文件,Go 程序没有启动消耗,反之 Java 首先需要加载和编译的字节码。

语言层面定义源代码的格式化

我职业生涯中一些最激烈的辩论发生在团队代码格式的定义上。 Go 通过为代码定义规范格式来解决这个问题。 工具会重新格式化您的代码,并且没有选项。

不管你喜欢与否, 定义了如何对代码进行格式化,一次性解决了这个问题。

标准化的测试框架

Go 在其标准库中提供了一个很好的 测试框架。它支持并行测试、基准测试,并包含许多实用程序,可以轻松测试网络客户端和服务器。

Go 程序方便操作

与 Python,Ruby 或 Node.js 相比,必须安装单个可执行文件对于运维工程师来说是一个梦想。 随着越来越多的 Docker 的使用,这个问题越来越少,但独立的可执行文件也意味着小型的 Docker 镜像。

Go还具有一些内置的观察性功能,可以使用 包发布内部状态和指标,并易于添加新内容。但要小心,因为它们在默认的 http 请求处理程序中 自动公开,不受保护。Java 有类似的 JMX ,但它要复杂得多。

七、golang介绍?

golang是 Google 公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言。

Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布。Go 是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性”。

八、golang基础?

1、初学Go语言首先弄懂基础语法和概念:基本数据类型、Struct、Array、map、Slice、指针、接口、map、内置函数,常用工具包

等,还有接口和Slice的底层数据结构。这些不需要弄特别懂,能自己理解并自己描述我觉得就可以了,关键在实践和应用练习。

2、然后学文件操作、网络编程、锁、协程、对象序列化和反序列化,以及各种数据格式的封装等,这是进阶的内容。

学完上面两个阶段,就可以自己接触一些框架,然后搭建一个web服务器,来做一些测试和练习。Go各种框架都非常多了,github上

star数过万的就有很多,这里列举几个:beego、iris、gin、echo、revel等。对于学习一些使用方法还是很有帮助的。

3、在第三个阶段做的过程中,自然就接触到了数据库,io,操作系统,网络,存储优化、需要排很多雷。到这一步,已经能够模块化

九、golang作者?

Golang:Go的三个作者分别是: Rob Pike(罗伯.派克),Ken Thompson(肯.汤普森)和Robert Griesemer(罗伯特.格利茨默)

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

十、「Go」(又称:Golang)是一种怎样的编程语言?

Go 简介

Rob Pike:我们之所以开发 Go, 是因为过去 10 多年间软件开发的难度令人沮丧。

Go 语言的设计初衷是谷歌为了解决其内部软件开发低效,用于替换 C\C++ 的工具。那么 C\C++ 有哪些问题呢?

  1. 编译慢、工程开发慢
  2. 不受控的依赖关系(#include)、混乱的三方库
  3. 编程范式繁多:面向过程、面向对象、泛型编程、函数编程等等,每个程序员都选择使用其中一部分语言特性
  4. 代码可读性差:语言特性多、各种最佳实践
  5. 并发编程麻烦
  6. 跨平台、兼容性、内存安全问题
  7. 等等

所以, 为了解决这些问题,Go 的主要特性如下:

  1. 语言特性不多,最佳实践只有一种简单易学
  2. 自包含(self-contain、独立性):安装包包含文档、源代码、标准库和代码编译、构建、性能分析、依赖管理工具链;
  3. 多核并行,并发编程几乎无痛点;
  4. 跨平台,Windows 下也可以直接编译运行;
  5. 支持 GC
  6. 等等

总的来说,Go 是一门简洁、高效、注重实用主义的开发语言;作为一名的普通开发者,你可以快速高效地写出性能不错、可维护性高的代码;并且 Go 的应用场景非常广泛,Web 开发、微服务、云计算、DevOps、CLI 工具、数据科学、人工智能,甚至在移动端、桌面端都能有一些应用;特别是近年来云计算进入云原生时代以来,涌现了 Docker,Kubernetes,etcd,Prometheus,istio 等一大批使用 Go 语言开发的“杀手级”应用。下面就开始你的 Go 之旅吧,包括 Go 的安装,IDE 推荐,第一个 Go 程序。

Go 的安装

截止目前最新版本为 1.17,点击下面的链接可以直接进行下载安装包:

另外,你可以从 Go 官网下载页面可以下载各个平台的安装包,或者下载源代码进行编译安装。注意一下 golang 官网在国内有官方镜像地址 golang.google.cn 可以正常访问(上面有大量学习文档、入门教程、官方博客等等,大家有空多去看看)。

下面以 macOS 为例,简要说明一下安装要点:

一. 双击安装包后,安装包会把 Go SDK 分发物置于/usr/local/go目录,除此之外还会把路径/usr/local/go/bin加入到环境变量 PATH

二. 在终端中执行命令go version,执行成功后会输出一下内容:

➜  go version
go version go1.17 darwin/amd64

三. Go 语言会依赖一些环境变量,因为某些原因,这里推荐你设置一下:

# 通过该命令可以查看 Go 相关的环境变量
go env 
# 代理服务器设置,这样国内可以正常下载安装三方依赖 Go 模块了
go env -w GOPROXY=https://goproxy.cn,direct
# 设置你自己的私有仓库,这样私有仓库就不会走代理
go env -w GOPRIVATE={{私有仓库的域名}}

除此之外,还有个环境变量 GOPATH(Go 的工作目录),以前这个环境变量非常重要,不过在 Go modules(依赖管理) 出现之后,GOPATH 几乎没啥用,不过 Go 会把下载的依赖储存在 $GOPATH/pkg/mod 目录中,也会把 go install 的二进制文件存放在 $GOPATH/bin 目录中,所以你可以把 $GOPATH/bin 路径加到环境变量 PATH 中。而且,安装完 Go 后,会有一个默认的 GOPATH 环境变量。

其他平台是类似的,请参考官方的安装说明文档

IDE(集成开发环境)

goland:jetbrains 出品的 Go 集成开发环境,若你之前使用过它们家的 IDEA 的话,它其实就是在 IDEA 上集成上了 Go 官方插件吧,个人觉得体验挺不错的,就是需要花点钱(有点小贵哈):

这里推荐一些好用的插件:

  1. Generate struct tags for golang
  2. String Manipulation
  3. GitToolBox
  4. .ignore
  5. Indent Rainbow
  6. IdeaVim
  7. One Dark:Goland 主题

vs code:世界上”最好的“代码编辑器,开发什么语言都可以选择它,而且是免费的,也不需要太多的配置;如果你不想花钱,可以使用vs code,这里推荐安装以下插件:

一. Go:Go 官方插件及其依赖的命令行工具(gopkgs、go-outline、staticcheck、gopls,安装完插件 vs code 会推荐安装):

    • 实时编译和分析你的 Go 代码,提示代码中的错误(编译错误)
    • 代码补全、代码导航、代码编辑和代码生成
    • 在编辑器中运行、调试和测试代码
    • 更多

二. Tabnine:提供基于 AI 的自动代码补全功能,帮助你更快地写代码

除此之外,还有很多其他选择,比如 vim

第一个 Go 程序

本节内容将开始你的第一个 Go 程序,从经典的”Hello World“开始到一个简单的 CLI 工具——httpie,本节的学习目标如下:

  • 熟悉 Go 项目代码组织方式
  • 熟悉常用的 Go 命令工具
  • 了解 Go 项目依赖管理
注 1:httpie 是用 python 写的一个类似 cURL 的命令行工具,通过它直接发起 HTTP 请求,这个直接参考了陈天老师的 《Rust 编程第一课》课程中的一个例子;大家对 Rust 有兴趣的话,可以去看看。注 2:本节内容使用 Go Modules 作为依赖管理工具

Hello World

首先,我们来理解两个概念——包(package)和 模块(module):

  • 包(package):Go 程序由一系列的包组织在一起。而包由一些位于相同目录下的源代码文件组成,这些源代码文件是为了实现某个特定功能而组织在一起的,包与包之间是正交的。有一个特殊的包叫做main,它是每个可执行 Go 程序的运行入口;
  • 模块(module):每个 Go 项目仓库可以由一个或多个模块组成。不过,建议不要整多个模块在一个项目依赖,因为 Go 的依赖管理依赖像 Github 这种代码仓库托管平台,有些平台可能并不支持。从模块的定义可知,一个模块是由一系列相关的包组成的,所以三方库都是一个模块对外进行发布的。

下面让我们开始创建一个 Go 项目吧,相关命令行如下:

一. 创建目录 go-httpie,进入 go-httpie 目录

二. 执行命令go mod init go-httpie,该命令用于创建一个模块(module)

➜  ~ mkdir go-httpie
➜  ~ cd go-httpie
➜  ~ go mod init go-httpie
go: creating new go.mod: module go-httpie
➜  ~ go-httpie cat go.mod
module go-httpie

go 1.17

三. 创建一个名为 main.go 的文件,其内容如下:

package main

import "fmt"

func main() {
 fmt.Println("Hello World.")
}

四. 使用 Go 命令行工具编译(build)、安装、运行 Go 程序:

go build main.go # 编译
go run main.go   # 编译并运行
go install go-httpie # 编译,并安装可执行程序 go-httpie 到目录 $GOPATH/bin/ 下

以上步骤也可以在 goland 或 vs code 中进行,但是底层还是都是利用 Go 命令行来实现的,Go 的命令行工具链非常完备、强大,大家一定注意去学习一下。当然一个 Hello World 太简单了,没有太大意义,下面让我们来实现一个 CLI 工具来真实感受一下 Go吧。

httpie

httpie 是用 python 写的一个类似 cURL 的命令行工具,通过它直接发起 HTTP 请求,并打印响应到控制台。

我们分析一下 httpie 的整个数据流:

  1. 解析命令行,处理子命令、参数、校验输入等(go-httpie get {URL}go-httpie post {URL} k1=v1 k2=v2);
  2. 根据第一步中的参数,向外部服务发起 HTTP 请求,获取响应;
  3. 把响应数据用户友好地打印到控制台。

上述的功能,我们完全可以基于 Go 的标准库来实现,不过避免重复造轮子,可以利用第三方库来实现,在 Go 社区中的 CLI 工具已经有一套标准的实现方式了,例如官方的 cobra

CLI 模式:APPNAME COMMAND ARG --FLAGCommands represent actions, Args are things and Flags are modifiers for those actions.

总结一下我们项目依赖的库:

  • 命令行解析利用 cobra 实现
  • HTTP 请求使用 Go 标准库 net/http
  • 响应高亮显示利用 color 实现

以下我们将一步一步详细地说明如何利用它们实现我们的 go-httpie:

一. 安装 cobra:go install github.com/spf13/cobra-cli@latest

二. 利用 cobra 生成一个标准的 CLI 模板:

cd go-httpie
cobra init --author "name@126.com" --license mit
go run main.go

三. 添加子命令 getpost

cobra add get
cobra add post

到了这里我们项目的整个框架已经搭建好了,可以通过执行命令tree查看一下:

tree .
├── LICENSE
├── cmd
│   ├── get.go
│   ├── post.go
│   └── root.go
├── go.mod
├── go.sum
└── main.go

四. 实现 getpost的命令逻辑(TODO)

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片