😃 Go-01-计算机核心基础

😃 Go-01-计算机核心基础

mbp_with_m1_chip

1 开篇介绍

👋 Hello,大家好,我是 NagaseLife is short, Let's Go! 人生苦短,即刻出发!又到了学习 Go 的时刻,接下来就让我们感受一下 Go 独特的魅力吧。

在正式学习 Go 之前呢,我们首先来学习一下前续知识 — 计算机核心基础 ,祝你学的开心 🥳

不要怂就是干

2 编程语言

在了解编程语言之前呢,我们首先搞清楚一个概念 — 什么是语言???

image-20201012204703307

2.1 什么是语言

语言指的是一种事物与另外一种事物进行沟通交流的媒介/工具,比如:汉语、英语、韩语、日语等。

2.2 什么是编程语言

各种编程语言

编程语言指的是人类与计算机进行沟通交流的媒介/工具。

2.3 编程语言的分类

image-20201020220533836

2.3.1 按照语言本身分类

2.3.1.1 机器语言

机器语言指的是站在计算机的角度,讲计算机能听懂/理解的语言,而计算机能直接理解的就是二进制指令,所以机器语言就是直接用二进制编程,这意味着机器语言是直接操作硬件的,因此机器语言属于低级语言,这里所说的 低级意思是贴近底层计算机硬件

用二进制代码 01 描述的指令称为机器指令,由于计算机内部是基于二进制指令工作的,所以机器语言是直接控制计算机硬件的。

用机器语言编写程序,编程人员首先要熟记所用计算机的全部指令代码以及代码的含义,然后在编写程序的时候,程序员需要自己处理每条指令和每一个数据的存储分配和输入输出,还需要记住编程过程中每步所使用的工作单元处于何种状态,这是一件十分繁琐的事情,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些 01 的指令代码,直观性差,不便阅读和书写,还容易出错,且依赖于具体的计算机硬件型号,局限性很大。

除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

# 机器语言是被微处理器理解和使用的,存在有多至100000种机器语言的指令,下述是一些简单示例:
# 指令部分的示例
0000 代表 加载(LOAD)
0001 代表 存储(STORE)
...

# 暂存器部分的示例
0000 代表暂存器 A
0001 代表暂存器 B
...

# 存储器部分的示例
000000000000 代表地址为 0 的存储器
000000000001 代表地址为 1 的存储器
000000010000 代表地址为 16 的存储器
100000000000 代表地址为 2^11 的存储器

# 集成示例
0000,0000,000000010000 代表 LOAD A, 16
0000,0001,000000000001 代表 LOAD B, 1
0001,0001,000000010000 代表 STORE B, 16
0001,0001,000000000001 代表 STORE B, 1[1]
image-20201020220931499

机器语言总结:

  1. 执行效率高
    • 编写完成的程序可以被计算机无障碍理解,直接运行,因此执行效率高
  2. 开发效率低
    • 各种二进制代码,不好记忆,过于复杂,因此开发效率低
  3. 跨平台性差
    • 由于机器语言开发的程序依赖于具体的某台计算机的硬件,因此跨平台性差
image-20201021185728502

2.3.1.2 汇编语言

汇编语言仅仅是用一个英文标签代表一组二进制指令,毫无疑问,相比较于机器语言,汇编语言是一种进步,但是汇编语言的本质还是直接操作硬件,因此汇编语言仍然是比较低级(底层)的语言,贴近计算机硬件。

汇编语言的实质和机器语言是一致的,都是直接对硬件进行操作,只不过指令采用了英文缩写的标识符,这样以来就变得更加容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。

汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经过汇编生成的可执行文件不仅比较小,而且执行速度很快。

# 汇编的hello world,打印一句hello world, 非常的麻烦,如下代码所示:

; hello.asm 
section .data            ; 数据段声明
        msg db "Hello, World", 0xA     ; 要输出的字符串
        len equ $ - msg  ; 字串长度
        section .text    ; 代码段声明
        global _start    ; 指定入口函数
        _start:          ; 在屏幕上显示一个字符串
        mov edx, len     ; 参数三:字符串长度
        mov ecx, msg     ; 参数二:要显示的字符串
        mov ebx, 1       ; 参数一:文件描述符(stdout) 
        mov eax, 4       ; 系统调用号(sys_write) 
        int 0x80         ; 调用内核功能
                         ; 退出程序
        mov ebx, 0       ; 参数一:退出代码
        mov eax, 1       ; 系统调用号(sys_exit) 
        int 0x80         ; 调用内核功能
image-20201021191549503

汇编语言总结:

  1. 执行效率高
    • 相对于机器语言,使用英文标签编写程序相对简单,执行效率高,但相较于机器语言来说稍低
  2. 开发效率低
    • 仍然是直接操作硬件,比起机器语言来说,复杂度稍低,但依旧居高不下,所以开发效率依旧较低
  3. 跨平台性差
    • 同样依赖具体的硬件,跨平台性差

2.3.1.3 高级语言

高级语言是站在人类的角度,直白地讲,也就是用人类的字符编写程序,而人类的字符是在向操作系统发送指令,并不是直接操作硬件,因此,高级语言是与操作系统打交道的,此处的高级不是说某种 “高级” 的含义,而指的是 高层次 ,开发者无需要考虑硬件细节,因而开发效率可以得到极大的提升,但正是因为高级语言距离硬件较远,更贴近人类语言,人类可以理解,但是计算机就必须通过翻译才能理解,所以执行效率会比较低。

2.3.2 按照翻译方式分类

2.3.2.1 编译型语言 (C、Go)

编译型语言是需要通过编译之后才能运行,所谓的编译,其实就类似于谷歌翻译,将程序所有的代码编译成计算机能够识别的二进制指令,之后操作系统会拿着编译完成的二进制指令直接操作硬件。

image-20201027104705025

编译型语言总结:

  1. 执行效率高
    • 编译是将程序的所有代码翻译成计算机能够直接识别的二进制指令(机器语言),计算机能够直接识别,所以执行效率高
  2. 开发效率低
    • 应用程序一旦需要修改,必须先修改源代码,然后重新编译、生成新的目标文件才能执行,而在只有目标文件而没有源代码的情况下,修改会很不方便,所以开发效率低于解释型
  3. 跨平台性差
    • 编译型代码是针对某一个平台进行编译的,关联性较强,针对不同的平台需要重新进行编译,所以跨平台性差
  4. 其他
    • 现在大多数的编程语言都是编译型的
    • 编译程序将源程序翻译成目标程序后保存在另外一个文件夹,该目标程序可脱离编译程序直接在计算机上多次运行
    • 大多数软件产品都是以目标程序形式发行给用户的,不仅便于直接运行,又可以使他人难以盗用其中的技术

2.3.2.2 解释型语言 (Python、Shell)

解释型语言是需要通过解释之后才能运行,所谓的解释,其实就类似于同声传译,将程序的一行代码解释成计算机能够直接识别的二进制指令运行,然后在继续解释下一行代码,一边解释一边执行。

image-20201027104901727

解释型语言总结:

  1. 执行效率低
    • 在解释型语言的实现中,解释器并不产生目标机器代码,而是产生易于执行的中间代码
    • 这种中间代码与机器代码是不同的,中间代码的解释是由软件支持的,不能直接使用硬件,软件解释器通常会导致程序的执行效率较低
  2. 开发效率高
    • 使用解释型语言开发的程序是由另一个可以理解中间代码的解释程序执行的,与编译程序不同的是,解释程序的任务是逐一将源程序的语句解释成可以执行的机器指令
    • 解释程序的优点是当语句出现语法错误的时候,可以立即提示给开发人员,开发人员可以立即进行改正
  3. 跨平台型强
    • 代码运行时依赖于解释器,不同平台有对应版本的解释器,所以解释型的跨平台性强
  4. 其他
    • 对于解释型 Basic 语言,需要一个专门的解释器解释执行 Basic 程序,每条语句只有在执行时才被翻译,这种解释型语言每执行一次就翻译一次,因而效率低下。一般的,动态语言都是解释型的,例如:Ruby、JavaScript、Perl

2.3.2.3 混合型语言 (Java)

所谓的混合型语言,直白地讲,就是既经历了编译的过程又经历了解释的过程,比如我们的 Java 语言,Java 是一种特殊的编程语言,Java 程序也需要编译,但是却没有直接编译为机器语言,而是编译成了字节码,然后在 JVM(Java 虚拟机) 上通过解释的方式来执行字节码。

2.3.3 总结

不同类型的编程语言之间进行对比

  • 执行效率:机器语言 > 汇编语言 > 编译型语言 > 解释型语言
  • 开发效率:解释型语言 > 编译型语言 > 汇编语言 > 机器语言
  • 跨平台性:解释型语言具有极强的跨平台性
image-20210212151238228

2.4 描述编程语言的特性

2.4.1 编译型 && 解释型

2.3.2 所述。

2.4.2 强类型 && 弱类型

强类型: 如果一门语言倾向于不对变量的类型做隐式转换,那么我们称之为强类型语言

弱类型:如果一门语言倾向于对变量的类型做隐式转换,那么我们称之为弱类型语言

  • 强类型语言(Python、C、Java、Go)

数据类型不可以被忽略的语言,直白地讲,变量的数据类型一旦被定义,那么就不会再改变,除非进行强制类型转换。

  • 弱类型语言(JavaScript、PHP、Perl、Shell)

数据类型可以被忽略的语言,比如说 JavaScript 中定义一个变量,是随着调用方式的不同,数据类型可以随意切换的那种。

2.4.3 动态类型 && 静态类型

动态类型:如果一门语言可以在运行时改变变量的类型,那么我们称之为动态类型语言

静态类型:如果一门语言不可以在运行时改变变量的类型,那么我们称之为静态类型语言

  • 动态类型(Python)

只有在运行的时候才进行数据类型检查,直白地讲,在变量赋值的时候,才确定变量的数据类型,不需要事先给变量指定数据类型。

  • 静态类型(C、Go、Java)

需要事先就对变量指定数据类型。

3 编程

image-20201012204741618

3.1 什么是编程

编程指的是把人类想让计算机做的事情用编程语言翻译出来并写在文件中(这一系列的文件就是程序)。

3.2 为什么要编程

编程的目的就是为了让计算机按照人类的思维逻辑去工作,从而解放人力。

因此,接下来我们的学习方向就是:

  1. 编程语言。为了能够与计算机进行沟通交流,我们必须要学会一种与计算机进行沟通交流的语言,这个语言就是编程语言,常见的编程语言有:Python、Java、C、C++、Go。
  2. 我们要交流的对象 — 计算机。由于我们想让计算机帮助我们人类做一些事情,所以我们就必须对计算机有所了解,因此,我们要学习计算机是由什么组成的、它能做什么事以及它是怎么样工作的。

4 编译器 && 解释器

计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具,被称为编译器

编译器翻译的方式有两种:一个是编译,另外一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器

001_编译型和解释型语言工作对比

5 计算机组成原理

5.1 什么是计算机

计算机俗称”电脑“,也就是通电的大脑,它包含了我们人类对计算机的终极期望,希望计算机通电以后,就真的能够像我们人类一样去工作,从而解放人力。

5.2 为什么要有计算机

在奴隶制社会,奴隶主一般会让奴隶帮助他做一些事情,但是奴隶也是人啊,是人就没法一直不停歇的工作,那么计算机就是这样的,计算机作为一台机器,可以一直不停歇的进行工作,所以我们要使用计算机,控制计算机帮助我们做一些事情。

5.3 计算机的五大组成部分

计算机有五大组成部分。由于我们想要控制计算机帮助人类做一些事情,那么计算机在设计的时候就一定是仿照我们人类去设计的,所以我们将计算机的五大组成部分比喻成人类的各种器官。

20180830595507_xKflYA

5.3.1 控制器

作用:控制器是计算机的指挥系统,负责控制计算机其他硬件是如何运行的

类比:人类的大脑

5.3.2 运算器

作用:运算器是计算机的运算功能,用来做运算,包括数学运算和逻辑运算

类比:人类的大脑

控制器 + 运算器 = CPU(中央处理单元)

5.3.3 存储器

作用:存储器是计算机的记忆功能,用来存储数据

存储器主要分为两种:

  • 内存:存储性能强,基于电工作,断电数据丢失,不能永久保存数据
    • 类比:人类的大脑
  • 外存:存储性能弱,基于磁工作,断电数据不丢失,能够永久保存数据
    • 类比:人类的纸质笔记本

5.3.4 输入设备

作用:输入设备是计算机接收外界输入数据的工具,比如:键盘、鼠标

类比:人类的眼睛、耳朵

5.3.5 输出设备

作用:输出设备是计算机向外输出数据的工具,比如:显示器、音箱、打印机

类比:人类的嘴巴

5.4 三大核心硬件

我们编写的程序一定是要运行于计算机硬件之上的,而站在硬件的角度,与程序运行有关的三大核心硬件为:CPU内存硬盘

我们需要明确以下 3 点内容:

  1. 软件运行前,软件的代码及其相关数据都是存放于硬盘之中的
  2. 任何软件的启动都是将数据从硬盘中读入内存,然后 CPU 从内存中取出指令并执行
  3. 软件运行过程中产生的数据最先都是存放于内存中的,如果想永久保存软件产生的数据,则需要将数据由内存写入硬盘
image-20210216122310855

5.4.1 文本编辑器读取文件内容的流程

  • 启动一个文本编辑器,比如:GoLand、PyCharm、IntelliJ IDEA
  • 文本编辑器会将文件内容从硬盘加载到内存中
  • 文本编辑器会将刚刚读入内存的内容显示到屏幕 🖥 上

6 字符编码

文本文件 的内容是由字符组成的,只要是涉及到了字符的存取,都需要考虑字符编码的问题。

字符编码这个知识点的典型特性就是理论多、结论少,但是对于开发而言,只需要记住其结论即可,接下来就让我们一点点的认识它吧!

接招吧

6.1 什么是字符编码

人类在与计算机交互的时候,使用的都是人类能够读懂的字符,比如说:中文字符、英文字符、日文字符等,而计算机只能够识别二进制数,所谓的二进制数就是由一堆 0 和 1 组成的数字,比如说:010010101010。计算机是基于电工作的,电的特性即高低电平,人类从逻辑层面将高电平对应为数字 1 ,低电平对应为数字 0 ,这直接决定了计算机可以识别的是由 0 和 1 组成的数字。

毫无疑问,由人类的字符到计算机中的数字,必须经历一个过程,如下:

image-20210216123338728

翻译的过程必须参照一个特定的标准,该标准称之为 字符编码表 ,该表上存放的就是字符与数字一一对应的关系。

字符编码中的编码指的是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字。

6.2 字符编码表的发展简史

字符编码的发展经历了三个重要的阶段,如下所示。

6.2.1 阶段一:独自为王

现代计算机起源于美国,所以最先考虑仅仅是让计算机识别 英文 字符,于是诞生了 ASCII 表。

ASCII 表的特点:

  • 只有英文字符与数字的一一对应关系
  • 一个英文字符对应1Bytes,1Bytes = 8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符。

ASCII表

6.2.2 阶段二:各自分家

我们知道,在第一阶段的时候,计算机只能识别英文字符,为了让计算机能够识别中文,因此中国人定制了 GBK 表。

GBK 表的特点:

  • 只有中文字符、英文字符与数字的一一对应关系
  • 一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符。
  • 一个中文字符对应2Bytes,2Bytes=16bit,16bit最多可以包含65536个数字,可以对应65536个字符,足够表示所有中文字符

每个国家都各自的字符,为让计算机能够识别自己国家的字符外加英文字符,各个国家都制定了自己的字符编码表。

Shift_JIS 表的特点:

  • 只有日文字符、英文字符与数字的一一对应关系

Euc-kr 表的特点:

  • 只有韩文字符、英文字符与数字的一一对应关系

此时,美国人用的计算机里使用字符编码标准是 ASCII ,中国人用的计算机里使用字符编码标准是 GBK ,日本人用的计算机里使用字符编码标准是 Shift_JIS ,如下图所示:

image-20210216124733265

字符编码发展到了这个阶段,可以用一句话概括:诸侯割据、天下大乱。

图1 中,文本编辑存取文件的原理如下:

文本文件内容全都为字符,无论存取都是涉及到字符编码问题

  1. 存文本文件

人类通过文本编辑器输入的字符会被转化成 ASCII 格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的 ASCII 格式的二进制写入硬盘

  1. 读文本文件

直接将硬盘中的 ASCII 格式的二进制读入内存,然后通过 ASCII 表反解成英文字符

图2图3都是相同的过程,此时无论是存还是取由于采用的字符编码表一样,所以肯定不会出现乱码问题,但问题是在美国人用的计算机里只能输入英文字符,而在中国人用的计算机里只能输入中文字符和英文字符....,毫无疑问我们希望计算机允许我们输入万国字符均可识别、不乱码,而现阶段计算机采用的字符编码 ASCIIGBKShift_JIS 都无法识别万国字符,所以我们必须定制一个兼容万国字符的编码表,请看阶段三。

6.2.3 阶段三:分久必合

unicode于1990年开始研发,1994年正式公布,具备两大特点:

  • 存在所有语言中的所有字符与数字的一一对应关系,即兼容万国字符。
  • 与传统的字符编码的二进制数都有对应关系,详解如下:

很多地方或老的系统、应用软件仍会采用各种各样传统的编码,这是历史遗留问题。此处需要强调:软件是存放于硬盘的,而运行软件是要将软件加载到内存的,面对硬盘中存放的各种传统编码的软件,想让我们的计算机能够将它们全都正常运行而不出现乱码,内存中必须有一种兼容万国的编码,并且该编码需要与其他编码有相对应的映射/转换关系,这就是unicode的第二大特点产生的缘由。

image-20210216125510327

文本编辑器输入任何字符都是最新存在于内存中,是unicode编码的,存放于硬盘中,则可以转换成任意其他编码,只要该编码可以支持相应的字符。

  • 英文字符可以被 ASCII 识别
    英文字符 ---> unciode格式的数字 ---> ASCII 格式的数字
  • 中文字符、英文字符可以被 GBK 识别
    中文字符、英文字符 ---> unicode格式的数字 ---> GBK 格式的数字
  • 日文字符、英文字符可以被 Shift_JIS 识别
    日文字符、英文字符 ---> unicode格式的数字 ---> Shift_JIS 格式的数字
20191112516365_jOKmDh

6.3 编码与解码

由字符转换成内存中的unicode,以及由unicode转换成其他编码的过程,都称为编码encode。

image-20210216125924825

由内存中的unicode转换成字符,以及由其他编码转换成unicode的过程,都称为解码decode。

image-20210216125952558

在诸多文件类型中,只有文本文件的内存是由字符组成的,因而文本文件的存取也涉及到字符编码的问题。

6.4 UTF-8 的起源

注意:如果保存到硬盘的是 GBK 格式二进制,当初用户输入的字符只能是中文或英文,同理如果保存到硬盘的是 Shift_JIS 格式二进制,当初用户输入的字符只能是日文或英文……如果我们输入的字符中包含多国字符,那么该如何处理?

多国字符—√—》内存(unicode格式的二进制)——X—》硬盘(GBK格式的二进制)

多国字符—√—》内存(unicode格式的二进制)——X—》硬盘(Shift_JIS格式的二进制)

多国字符—√—》内存(unicode格式的二进制)——√—》硬盘(???格式的二进制)

理论上是可以将内存中 unicode 格式的二进制直接存放于硬盘中的,但由于 unicode 固定使用两个字节来存储一个字符,如果多国字符中包含大量的英文字符时,使用 unicode 格式存放会额外占用一倍空间(英文字符其实只需要用一个字节存放即可),然而空间占用并不是最致命的问题,最致命地是当我们由内存写入硬盘时会额外耗费一倍的时间,所以将内存中的 unicode 二进制写入硬盘或者基于网络传输时必须将其转换成一种精简的格式,这种格式即utf-8(全称Unicode Transformation Format,即unicode的转换格式)

多国字符—√—》内存(unicode格式的二进制)——√—》硬盘(utf-8格式的二进制)

image-20210216130313588

那为何在内存中不直接使用utf-8呢?

UTF-8 的特点:英文字符占1Bytes,一个中文字符占3Bytes,生僻字用更多的Bytes存储

unicode 更像是一个过渡版本,我们新开发的软件或文件存入硬盘都采用 utf-8 格式,等过去几十年,所有老编码的文件都淘汰掉之后,会出现一个令人开心的场景,即硬盘里放的都是 utf-8 格式,此时 unicode 便可以退出历史舞台,内存里也改用utf-8,天下重新归于统一

6.5 字符编码的应用

我们学习字符编码就是为了存取字符时不发生乱码问题:

1、内存中固定使用 unicode 无论输入任何字符都不会发生乱码

2、我们能够修改的是存/取硬盘的编码方式,如果编码设置不正确将会出现乱码问题。乱码问题分为两种:存乱了,读乱了

  • 存乱了:如果用户输入的内容中包含中文和日文字符,如果单纯以 Shift_JIS 存,日文可以正常写入硬盘,而由于中文字符在 Shift_JIS 中没有找到对应关系而导致存乱了

  • 读乱了:如果硬盘中的数据是 Shift_JIS 格式存储的,采 GBK 格式读入内存就读乱了

总结:

  1. 保证存的时候不乱:在由内存写入硬盘时,必须将编码格式设置为支持所输入字符的编码格式
  2. 保证读的时候不乱:在由硬盘读入内存时,必须采用与写入硬盘时相同的编码格式

7 操作系统

7.1 操作系统的由来

大前提:我们编程的目的就是为了控制计算机,让计算机硬件自发的运行起来,然而硬件直白的讲,只是一堆铁而已,硬件如果要工作,一定需要受到软件的支配。

假如我们要开发一个应用程序,比如:PPS,该软件的一个核心业务就是播放视频,开发者如果要编写程序实现播放视频这个业务逻辑,就必须先控制硬件,让硬件能够正常运行起来,然而这仅仅是刚开始,事实上,在编写应用程序的业务逻辑之前,需要开发者先编写出一套完整的控制程序来控制计算机硬件能够基本运行,那么这就需要开发者对于计算机硬件了如指掌,才能实现控制,如此一来,所有的开发者在开发应用程序之前,都需要经历以下两个步骤:

  1. 编写一套完整的控制程序,用来控制计算机硬件的基本运行,以及把复杂的硬件操作封装成简单的接口。
  2. 基于控制程序的接口开发包含一系列业务逻辑的程序,为了与控制程序区分,我们称之为应用程序。

这样一来,对于不同的开发者来讲,应用程序的业务逻辑不尽相同,但是用来控制硬件的控制程序基本相同,为了避免不同的开发者做重复劳动,以及不再需要耗费精力学习硬件相关的知识,那么就有公司专门开发用于控制硬件的控制程序,这个控制程序指的就是我们现在的操作系统。

7.2 操作系统的功能

操作系统的功能就是帮助我们把复杂的硬件控制封装成简单的接口,对于开发应用程序来说只需要调用操作系统提供给我们的接口即可。

20181228998710_sGJMAK

8 系统软件 && 应用软件

计算机硬件以上运行的都是软件,软件又分为两大类:

  • 系统软件:系统软件指的是操作系统,操作系统是计算机硬件与应用软件之间的桥梁,是用来协调、管理、控制计算机硬件与应用软件资源的一款控制程序。
  • 应用软件:应用软件指的就是我们平常所使用的 Parallels DesktopFinal Cut Pro 等,我们学习 Go 就是为了开发应用软件。

9 计算机系统的三层结构

通过上面的学习我们知道,我们开发应用程序的本质就是在控制硬件,但是我们直接打交道的是操作系统,应用程序都是通过操作系统来间接控制计算机硬件的,所以一套完整的计算机系统分为以下三层。

image-20201012203241670

10 什么是平台

应用程序都是运行于操作系统之上,而操作系统则是运行于硬件之上的,所以承载应用程序的是一台运行有操作系统的计算机,称之为应用程序的运行平台,直白来讲,平台 = 计算机硬件 + 操作系统

image-20201012204226676

常见的平台有:Windows + 某款硬件、Linux + 某款硬件、macOS + 某款硬件,我们在开发应用程序的时候就需要考虑到应用程序的跨平台性,如果能开发出一款可以在任意平台都能运行的程序,那么对于开发者来讲真是极大的好处。

而决定应用软件跨平台的关键因素往往是编程语言的选择,而 Go 作为编译型语言,Go 拥有 交叉编译 的功能,从某种程度上来说,Go 的这种交叉编译功能,也是跨平台性比较好的一种体现,这也是我们学习它的原因之一。

11 小结

Go 是一门 编译型静态 强类型 语言。

golang_icon12
posted @ 2021-03-12 23:26  码动世界  阅读(2018)  评论(0编辑  收藏  举报