Go语言入门1:Go简介

Keywords: #技术 #Golang
Table of Contents

Go 语言入门基础学习笔记之 Go 语言简介

简介

image.png

Go 语言,又称为 Golang,是由 Google 开发的一种静态强类型、编译型的开源编程语言。它由 Robert Griesemer、Rob Pike 和 Ken Thompson 在 2007 年设计,并于 2009 年正式对外发布。Go 语言的设计目标是提高编程效率,解决多核处理器并发编程的问题,并提高代码的可读性和可维护性。Go 语言以其高性能、高并发和简洁的语法,在现代软件开发中越来越受欢迎。

优势

  • 极其简单的部署方式
    • 可直接编译成机器码
    • 不依赖其他库(可执行文件较大,把全部所需的库静态编译)
    • 直接运行即可部署
  • 静态类型语言
    • 编译的时候检查出来隐藏的大多数问题
  • 语言层面的并发
    • 天生的基因支持并发
    • 充分利用多核
  • 强大的标准库
    • runtime 系统调度机制
    • 高效的 GC 垃圾回收机制
    • 丰富的标准库:网络通信、数学、文件系统、数据结构、应用构建、加解密、测试、Email、输入输出、压缩、同步锁机制、进程线程等
  • 简单易学
    • 25 个关键字
    • C 语言简洁的基因,内嵌 C 语法支持
    • 面向对象特征(继承、多态、封装)
    • 跨平台
  • “大厂”领军
    • Google、Facebook
    • 腾讯、百度、京东
    • 小米、七牛、滴滴、阿里、新浪、哔哩哔哩、字节

利用斐波那契数列算法简单看看 Go 的性能情况:

  1. 编译性能:Go > C > Node.js > PHP > C++ > Java > Python 3
  2. 运行性能:C++ > C > Go > Java > Node.js > PHP > Python 3

强项

  1. 云计算基础设施领域。代表项目:docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。
  2. 基础后端软件。代表项目:tidb、influxdb、cockroachdb 等。
  3. 微服务。代表项目:go-kit、micro、monzo bank 的 typhon、bilibili 等。
  4. 互联网基础设施。代表项目:以太坊、hyperledger 等。

明星产品:Docker、Kubernetes

image.png

缺点

  1. 包管理,大部分包都在 GitHub 上。
  2. 所有的 Exception 都用 Error 来处理(比较有争议,与 Java 完全相反)
  3. 对 C 的降级处理,并非无缝,没有 C 降级到 asm 那么完美(序列化问题,还不能取代 C)

环境安装

All releases - The Go Programming Language

Windows 下载 go1.23.2.windows-amd64.zipgo1.23.2.windows-amd64.msi ,并将其中的 bin 文件夹添加进环境变量:

在系统变量中,新建一个变量名为 GOROOT ,变量值为 Go 安装目录路径。再新建一个变量名为 GOPATH,变量值为 Go 所有项目的根目录路径。最后在系统变量中的 path 路径添加 %GOROOT\bin%

image.png

在 Go 项目目录中创建 bin pkg src 三个目录,其中 src 为我们编写项目的根文件夹,binpkg 分别存放我们安装的第三方依赖和插件。

image.png

在终端中输入 go version 返回版本号 go version go1.23.2 windows/amd64,则安装成功。

打开 VsCode 并安装 Go 语言官方插件,打开终端并执行以下语句,方便安装 Go 开发工具包

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

在 VsCode 中打开命令面板 Ctrl+Shift+p,输入 Go install,选中 Install/Upadte Tools,勾选全部工具并安装,工具会安装到我们上方设置的 GOPATH 环境变量中的 bin pkg 文件夹中。

安装完成后,新建一个项目文件夹 test,创建一个 main.go 文件,这时一定还要在这个文件夹中输入 go mod init testtest 需要与项目文件夹的名字一样。完成后会出现一个 go.mod,就可以编写代码了。

如果完成了以上所有操作,在 vscode 中编写代码依旧会报错,则还需要在 VsCode 中重新设置 GOPATHGOROOT 的路径。

image.png

语言结构

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

  1. 包声明
  2. 引入包
  3. 函数
  4. 变量
  5. 语句 & 表达式
  6. 注释
package main

import "fmt"

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

package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main 表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。当前程序有 main 函数,就是 main 包。 这与当前程序文件名没有关系。

import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包,fmt 包实现了格式化 IO(输入/输出)的函数。导入多个包时,可使用以下两种方式,推荐第二种。

import "fmt"
import "time"

import (
    "fmt"
    "time"	
)

///* */ 分别是单行注释和多行注释,这与 C 语言一致

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

需要注意的是,Go 语言中函数后的 { 必须跟函数名同一行,否则不能报错。同时语句结尾的 ; 可加可不加,推荐不加。

func main(){
    fmt.Println("hello Go!")
    fmt.Println("hello Go!");
}

fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行 \n,使用 fmt.Print(...) 效果相同。 PrintPrintln 这两个函数也支持使用变量,如:fmt.Println(arr),如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。

标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);

标识符小写字母开头,则对包外是不可见的,但是他们在整个包的内部可见并且可用的(像面向对象语言中的 protected )。

Go 语言的执行有两种方式:

  1. go run hello.go 直接编译程序并执行
  2. go build hello.go 编译成二进制文件后,./hello.go 执行二进制文件

参考课程:8小时转职Golang工程师