Golang 的语言的特点

Go 语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 静态语言程序的运行速度,又能达到 Python 动态语言的快速开发。

  1. 从 C 语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和 C 语言一样的编译执行方式及弱化的指针

举一个案例(体验)

  1. //go 语言的指针的使用特点(体验)
  2. func testPtr(num *int) {
  3. *num = 20
  4. }
  1. 引入包的概念,用于组织程序结构,Go 语言的一个文件都要归属于一个包,而不能单独存在。 ```go package main //一个go文件需要在一个包 import “fmt”

func main() { fmt.Println(“hello,Golang”) }

  1. 3. 垃圾回收机制,内存自动回收,不需开发人员管理
  2. 3. **天然并发** (重要特点)
  3. 1. 从语言层面支持并发,实现简单
  4. 1. goroutine,轻量级线程,可实现大并发处理,高效利用多核。
  5. 1. 基于 CPS 并发模型(Communicating Sequential Processes )实现
  6. 5. 吸收了管道通信机制,形成 Go 语言特有的管道channel 通过管道 channel , 可以实现不同的goroute之间的相互通信。
  7. 5. 函数可以返回多个值。举例:
  8. ```go
  9. //go 函数支持返回多个值
  10. func getSumAndSub(n1 int, n2 int) (int, int ) {
  11. sum := n1 + n2 //go 语句后面不要带分号.
  12. sub := n1 - n2
  13. return sum , sub
  14. }
  1. 新的创新:比如切片 slice、延时执行 defer

    搭建Go 开发环境-安装和配置 SDK

    下载SDK 工具包

image.png

windows 下安装 sdk

  1. Windows 下:根据自己系统是 32 位还是 64 位进行下载
    1. 32 位系统:gox.x.x.windows-386.zip
    2. 64 位系统:gox.x.x.windows-amd64.zip
  2. 请注意:安装路径不要有中文或者特殊符号如空格等
  3. SDK 安装目录建议:windows 一般我安装在 d:/programs
  4. 安装时,基本上是傻瓜式安装,解压就可以使用
  5. 解压后,我们会看到 d:/programs/go 目录,这个是 sdk

image.png

windows 下配置 Golang 环境变量

环境变量 说明
GOROOT D:\\Program Files\\go指定SDK的安装路径
GOPATH E:\\GoProject工作目录,将来go项目的工作路径
Path %GOROOT%\\bin添加SDK的/bin目录

image.png
image.png
image.png

测试一下我们的环境变量是否配置成功 go version

image.png
注意:配置环境变量后,需要重新打开一次 dos 的终端,这样环境变量才会生效

Linux 下搭建 Go 开发环境-安装和配置 SDK

  1. Linux 下:根据系统是 32 位还是 64 位进行下载
    1. 32 位系统:gox.x.x.linux-386.tar.gz
    2. 64 位系统:gox.x.x.linux-amd64.tar.gz
  2. 请注意:安装路径不要有中文或者特殊符号如空格等
  3. SDK 安装目录建议: linux 放在 /opt目录下
  4. 安装时,解压即可,我们使用的是 tar.gz
  5. 下载并且解压 Go 二进制文件到 /opt 目录

    1. # 下载SDK
    2. $sudo wget -c https://golang.google.cn/dl/go1.18.2.linux-amd64.tar.gz
    3. # 拷贝
    4. $sudo cp go1.18.2.linux-amd64.tar.gz /opt
    5. # 解压
    6. $sudo tar -zxvf go1.18.2.linux-amd64.tar.gz
  6. 查看版本

image.png

Linux 下配置 Golang 环境变量

  1. 使用 root 的权限来编辑 vim /etc/profile 文件 ```bash root@ubuntu:/etc# vim profile root@ubuntu:/etc# cat profile

    /etc/profile: system-wide .profile file for the Bourne shell (sh(1))

    and Bourne compatible shells (bash(1), ksh(1), ash(1), …).

if [ “${PS1-}” ]; then if [ “${BASH-}” ] && [ “$BASH” != “/bin/sh” ]; then

  1. # The file bash.bashrc already sets the default PS1.
  2. # PS1='\h:\w\$ '
  3. if [ -f /etc/bash.bashrc ]; then
  4. . /etc/bash.bashrc
  5. fi

else if [ “id -u“ -eq 0 ]; then PS1=’# ‘ else PS1=’$ ‘ fi fi fi

if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi export GOROOT=/opt/go export PATH=$PATH:$GOROOT/bin export GOPATH=$HOME/goproject

  1. 2. 如果需要生效的话,需要执行`source /etc/profile` 或者注销一下(重新登录),再使用
  2. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2608713/1652339604971-99913d22-81d0-4c8d-bb57-9344be36b80e.png#clientId=uabfeedf4-3053-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=186&id=ubddf5a9b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=233&originWidth=731&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16677&status=done&style=none&taskId=u74d8776d-51c6-40ad-9fc7-1c18b2fb951&title=&width=584.8)
  3. <a name="YCMD8"></a>
  4. ## VSCode配置Golang开发调试环境
  5. 1. 安装插件
  6. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/2608713/1652349505068-01edce0c-9825-406a-aade-d10643d7f206.png#clientId=uabfeedf4-3053-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=137&id=uab9c075b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=171&originWidth=636&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13232&status=done&style=none&taskId=u1af20f23-964a-42c3-9ee8-b3aefbb3a93&title=&width=508.8)
  7. 2. 配置环境变量
  8. ```go
  9. go env -w GO111MODULE=on
  10. # 指定源
  11. go env -w GOPROXY=https://goproxy.io,direct
  1. 安装Go语言开发工具
    1. Windows 平台按下 Ctrl+Shift+P,Mac 平台按 Command+Shift+P,这个时候 VS Code 界面会弹出一个输入框
    2. 输入go:install选择Go:install/Update Tools,勾选所有工具

image.png

  1. 配置调试设置

    1. go env -w GO111MODULE=auto

    按F5进入调试模式
    image.png

    Go 语言快速开发入门

    需求

    要求开发一个 hello.go 程序,可以输出 “hello,world”

    开发的步骤

  2. 开发这个程序/项目时,go 的目录结构怎么处理

image.png

  1. 代码如下

    1. package main
    2. import "fmt"
    3. func main() {
    4. fmt.Println("hello world")
    5. }

    几点说明

    • go 文件的后缀是 .go
    • package main 表示该 hello.go 文件所在的包是 main, 在 go 中,每个文件都必须归属于一个包。
    • import “fmt” 表示:引入一个包,包名 fmt, 引入该包后,就可以使用 fmt 包的函数,比如:fmt.Println
    • func main() {} func 是一个关键字,表示一个函数。main 是函数名,是一个主函数,即我们程序的入口。
    • fmt.Println(“hello”)表示调用 fmt 包的函数 Println 输出 “hello,world”
  2. 通过 go build 命令对该 go 文件进行编译,生成 .exe 文件

image.png

  1. 运行 hello.exe 文件即可

image.png

  1. 注意:通过go run命令可以直接运行 hello.go 程序 [类似执行一个脚本文件的形式]

image.png

Golang 执行流程分析

如果是对源码编译后,再执行,Go 的执行流程如下图

概述 - 图14

如果我们是对源码直接 执行 go run 源码,Go 的执行流程如下图

概述 - 图15

两种执行流程的方式区别

  1. 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有 go 开发环境的机器上,仍然可以运行
  2. 如果我们是直接 go run go 源代码,那么如果要在另外一个机器上这么运行,也需要 go 开发环境,否则无法执行。
  3. 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多。

    编译和运行说明

  4. 有了 go 源文件,通过编译器将其编译成机器可以识别的二进制码文件。

  5. 在该源文件目录下,通过 go build 对 hello.go 文件进行编译。可以指定生成的可执行文件名,在windows 下 必须是 .exe 后缀

    1. go build -o myHello.exe hello.go
  6. 如果程序没有错误,没有任何提示,会在当前目录下会出现一个可执行文件(windows 下是.exe Linux 下是一个可执行文件),该文件是二进制码文件,也是可以执行的程序。

  7. 如果程序有错误,编译时,会在错误的那行报错。有助于程序员调试错误

image.png

  1. 运行有两种形式

    1. 直接运行生成的可执行Go程序,比如hello.exe
    2. 通过运行工具go run 对源代码文件进行运行

      ⚠️Go 程序开发的注意事项

  2. Go 源文件以 “go” 为扩展名。

  3. Go 应用程序的执行入口是 main()函数。 这个是和其它编程语言(比如 java/c)一样
  4. Go 语言严格区分大小写。
  5. Go 方法由一条条语句构成,每个语句后不需要分号(Go 语言会在每行后自动加分号),这也体现出 Golang 的简洁性。
  6. Go 编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错 ```go package main

import “fmt”

func main() { fmt.Println(“hello world”) fmt.Println(“hello world”) fmt.Println(“hello world”)// 此处报错 }

  1. 6. Go 语言定义的变量或者 import 的包如果没有使用到,代码不能编译通过。
  2. ```go
  3. package main
  4. import "fmt"
  5. func main() {
  6. fmt.Println("hello world")
  7. // 定义一个变量 如果你没有使用这个变量 就会编译不通过
  8. var num = 10
  9. }
  1. 大括号都是成对出现的,缺一不可。

    Go 语言的转义字符(escape char)

    常用的转义字符有如下

  2. \t 表示一个制表符,通常使用它可以排版。

  3. \n 换行符
  4. \ 一个\
  5. \” 一个”
  6. \r 一个回车 ```go package main

import “fmt” // fmt包中提供格式化、输入、输出的函数 func main() { // 演示转义字符的使用 fmt.Println(“tom\tjack”) fmt.Println(“hello\nworld”) fmt.Println(“E:\GoProject\src\go_code\project01\main”) fmt.Println(“speak\”I Love You\””) // \r 从当前行的最前面开始输出 覆盖掉以前的内容 fmt.Println(“霍格沃兹\r魔法学院”) }

  1. 输出<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/2608713/1652366557898-d4b87c85-7565-4c21-a774-857b1c3ee050.png#clientId=uabfeedf4-3053-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=118&id=ua3de0e8b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=147&originWidth=756&originalType=binary&ratio=1&rotation=0&showTitle=false&size=8917&status=done&style=none&taskId=u74f2f261-ab55-443f-b016-3ba8ac8ca0b&title=&width=604.8)
  2. > 练习:请使用一句输出语句,达到输入如下图形的效果
  3. ```go
  4. package main
  5. import "fmt" //fmt 包中提供格式化,输出,输入的函数.
  6. func main() {
  7. //要求:要求:请使用一句输出语句,达到输入如下图形的效果
  8. fmt.Println("姓名\t 年龄\t 籍贯\t 地址\njohn\t20\t 河北\t 北京")
  9. }

image.png

规范的代码风格

正确的注释和注释风格

Go 官方推荐使用行注释来注释整个方法和语句

正确的缩进和空白

  1. 使用 gofmt 来进行格式化

image.png
该指令可以将格式化的内容写入到文件中

  1. 运算符两边习惯性各加一个空格。比如:2 + 4 * 5
  2. 函数花括号使用 ```go package main

import “fmt” func main() { fmt.Println(“hello world”) }

  1. ```go
  2. package main
  3. import "fmt"
  4. func main()
  5. {
  6. fmt.Println("hello world")
  7. }
  1. 一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅 ```go package main

import “fmt” func main() { fmt.Println(“helloworldhelloworldhelloworldhellowor\n”, “helloworldhelloworldhelloworldhellowor\n”, “helloworldhelloworldhelloworldhellowor\n”, “helloworldhelloworldhelloworldhellowor\n”, “helloworldhelloworldhelloworldhellowor”) } ```

Golang 标准库API 文档

  1. API (Application Programming Interface,应用程序编程接口)是 Golang 提供的基本编程接口。
  2. Go 语言提供了大量的标准库,因此 google 公司 也为这些标准库提供了相应的 API 文档,用于告诉开发者如何使用这些标准库,以及标准库包含的方法。
  3. Golang 在线标准库文档:https://pkg.go.dev/ 中文版: https://studygolang.com/pkgdoc
  4. Golang 的包和源文件和函数的关系
  5. image.png