Go:Go语言入门

一 什么是Go语言

Go语言(也称为Golang)由谷歌于2009年推出,是一种静态类型、编译型的编程语言。它结合了多种编程语言的优点,并具有一些独特的特性。

二 Go语言与其他编程语言的不同之处

1.简洁性和易用性

Go语言的设计非常简洁,语法简单直观,没有过多的复杂特性。它去掉了许多传统编程语言中的冗余特性(如头文件、类型继承、方法重载等),使得代码更加简洁。与C、C++相比,Go语言的语法更加现代化,省去了许多繁琐的细节,比如内存管理和指针操作,减少了开发者的学习曲线。

2.内置并发模型

Go语言的并发编程非常强大且易用。它通过goroutinechannel提供了轻量级的并发处理模型,这与传统的线程相比更加高效和易于管理。这种内置的并发性使得Go语言非常适合处理多核处理器的并发任务,比如网络服务器和微服务。

3.静态类型但具有动态语言的风格

虽然Go是静态类型的语言,但它的类型推断能力很强,使得代码风格更加简洁,类似于动态语言的灵活性。同时,Go没有继承、泛型等复杂特性,使得它在语法上更加简单,但这也意味着它在一些高级抽象上不如其他语言灵活。

4.快速编译

Go语言的编译速度非常快,这是因为它有一个高度优化的编译器。相比于Java、C++等,Go的编译器更快,开发者可以更快地进行编写-编译-测试的循环。

5.内置垃圾回收

Go语言内置了垃圾回收机制,自动管理内存分配和释放,开发者不需要手动管理内存。这使得开发更为简便,但与需要手动管理内存的C/C++相比,Go的内存控制精细度较低。

三 Go语言的优势

简单易学:由于Go语言的设计简洁、语法直观,它非常适合初学者,开发者可以在短时间内掌握并开始编写高效的代码。

高效并发处理:Go的goroutinechannel使得并发编程变得简单且高效,特别适合需要处理大量并发任务的应用,如服务器、微服务、分布式系统等。

跨平台支持:Go语言能够在不同的平台上编译成独立的二进制可执行文件,而且不依赖外部库,非常适合在云计算和微服务环境中使用。

强大的标准库:Go语言的标准库非常丰富,涵盖了网络编程、文件I/O、编码解码、并发控制等多种功能,开发者不需要依赖外部库就可以完成很多常见的编程任务。

社区支持与生态系统:Go语言拥有活跃的开源社区和快速增长的生态系统,许多企业如Google、Dropbox、Docker、Kubernetes等都在使用Go语言开发关键项目。

四 Go语言的缺点

缺乏泛型支持:Go语言直到1.18版本才引入了对泛型的支持,但相比其他语言(如Java、C++)的泛型功能,Go的泛型仍然较为初步,限制了一些场景下的代码复用性和灵活性。

库和框架较少:尽管Go语言的生态系统在迅速发展,但相比于Java、Python等更成熟的语言,Go的库和框架相对较少,特别是在一些特定领域(如数据科学、机器学习等)。

错误处理繁琐:Go语言没有异常处理机制,使用的是显式的错误返回,这在一定程度上增加了代码的冗长度和复杂性,尤其是在需要处理多个错误的场景中。

内存管理不够细致:由于Go语言依赖于垃圾回收机制,开发者无法像在C/C++中那样精细地控制内存管理,这在某些需要高度优化内存使用的场景中可能成为问题。

五 Go语言的应用

云计算基础设施领域:docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。

基础后端软件:tidb、influxdb、cockroachdb等。

微服务:go-kit、micro、monzo bank的typhon、bilibili等。

互联网基础设施:以太坊、hyperledger等。

六 Go语言语法组成

Go 语言的基础组成有以下几个部分:

包声明

引入包

函数

变量

语句 & 表达式

注释

七 编写第一个Go程序

1.代码编写

首先在 VS Code中打开项目所在文件夹,右键文件夹,选择新建文件,并设置代码文件名称,注意文件后缀名为.go。

在代码区域编写我们的第一个go程序:输出hello,world!完整代码如下:

package main // 定义包名

import "fmt" // 导包

func main() {
	/* 这是我的第一个程序 */
	fmt.Println("Hello, World!")
}

其中,第一行为包的声明语句,我们必须在源文件中非注释的第一行指明这个文件属于哪个包,package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。特别需要注意的是:

  • 文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。
  •  文件夹名与包名没有直接关系,并非需要一致。
  •  同一个文件夹下的文件只能有一个包名,否则编译报错。

第二行语句的作用是导入 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)。

第三行语句声明了一个函数main(),func main() 是程序开始执行的函数。main() 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。

函数体中, fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。我们页可以使用fmt.Print("hello, world\n") 来实现。

整个代码块中,所使用到的/*...*/或者//开头的内容均为注释语句,在程序执行时将被忽略,//开头的为单行注释,/*...*/为多行注释(也称为块注释),以 /* 开头,并以 */ 结尾,且不可以嵌套使用。

需要注意的是,当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

此外,在go语言中,定义函数的时候,‘{’ 必须和函数名在同一行,不能另起一行。

 2.编译运行

我们打开 VS Code的终端控制台,输入指令go mod init 项目文件名,点击enter。

这时,我们可以可以看到我们的项目文件夹下自动生成了一个go.mod文件。

我们在终端中输入 go run hello.go即可直接编译go语言并执行应用程序,可以看到控制台上输出了Hello,world!

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值