码迷,mamicode.com
首页 > 其他好文 > 详细

[go]go如何把代码运行起来的?

时间:2020-01-11 14:45:43      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:mic   函数   机器   打包   表示   没有   build   高级   pac   

代码在硬盘上是一堆二进制

  • 弄清楚文件在硬盘/内存中的存储值
package main

import "fmt"

func main() {
    fmt.Println("hello world")
}

vim查看 :%!xxd

技术图片

在终端里执行 man ascii

技术图片

观察发现, 中间列和最右列 是一一对应的。
也就是说,刚刚写完的 hello.go 文件都是由 ASCII 字符表示的(文本文件)

  • 汇编转换位机器指令

技术图片

  • go语句转换为机器指令过程

Go 程序并不能直接运行,每条 Go 语句必须转化为一系列的低级机器语言指令,将这些指令打包到一起,
并以二进制磁盘文件的形式存储起来,也就是可执行目标文件。

技术图片

一般而言,先执行一些初始化的工作;
找到 main 函数的入口,执行用户写的代码;
main 函数退出;
执行一些收尾的工作,整个过程完毕。

探索编译和运行的过程。

通常将编译和链接合并到一起的过程称为构建(Build)。

编译过程就是对源文件进行词法分析、语法分析、语义分析、优化,最后生成汇编代码文件,以 .s 作为文件后缀的汇编指令。
汇编器会将汇编代码转变成机器可以执行的指令。
由于每一条汇编语句几乎都与一条机器指令相对应,所以只是一个简单的一一对应,比较简单,没有语法、语义分析,也没有优化这些步骤。
编译器的作用:
  将高级语言翻译成机器语言的一个工具,编译过程一般分为 6 步:
    1. 扫描
    2. 语法分析
    3. 语义分析
    4. 源代码优化
    5. 代码生成
    6. 目标代码优化

[go]go如何把代码运行起来的?

标签:mic   函数   机器   打包   表示   没有   build   高级   pac   

原文地址:https://www.cnblogs.com/iiiiiher/p/12179867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!