内容简介:个人一直觉得语法的学习不存在多大问题,咱们真正要了解的是程序如何运行。对于go语言的编译到运行其实还是一个比较有意思的过程,比如go的代码写完到底层的汇编代码是一个怎样的结构,通过了解底层的结构,我们应该如何去深入的学习go。咱们先简单运行一个go的代码例子,看下要满足什么条件go才能编译执行go的文档肯定会告诉你,打包运行一个程序需要在main包下有一个main方法才行。
go学习记录--如何运行
个人一直觉得语法的学习不存在多大问题,咱们真正要了解的是程序如何运行。对于 go 语言的编译到运行其实还是一个比较有意思的过程,比如go的代码写完到底层的汇编代码是一个怎样的结构,通过了解底层的结构,我们应该如何去深入的学习go。
导读
- go程序编译执行
- 再看汇编码
- 思考总结
go程序编译执行
咱们先简单运行一个go的代码例子,看下要满足什么条件go才能编译执行
代码示例
go的文档肯定会告诉你,打包运行一个程序需要在main包下有一个main方法才行。
写了下面一段简单代码,咱们看下具体的操作流程
package main import "fmt" func main() { fmt.Println("hello world") }
上面代码写完之后咱们先运行一下,通过go run运行结果如下
咱们再把代码改一下package的main随便改一个名字试一下
果然就提示没有main的package不能运行
综上go的编译是先定位到main package,然后找到main函数为入口开始
再看汇编码
咱们先把代码build一下,具体生成如下文件
咱们再把生成的文件放到IDA里面反向查看一下,运行程序反向之后可以看到N多个函数。
可以注意到里面的函数的名字都是根据go里面的包名加函数名构成,比如_runtime_f32hash
就是在go的runtime包下的f32hash函数,这也再一次说明go没有像 java 一样的class这么一个玩意,而是由包和函数共同组成。
再通过过滤器查找一下main方法,果然找到了一个_main_main的函数,如下图所示
咱们具体看一下main的汇编指令,其实就是输出一个helloworld
思考总结
总体来说通过上面的陈述,现在可以完全验证开头的问题了。
- go的垃圾回收等操作是在runtime包里面执行
- go是根据包和源代码文件里面的函数编译,和源文件关系不大
- go的编译运行必须存在main的package以及main的函数
最后各位可以扫下方二维码关注我公众号,基本每周会推送一到两篇的go学习记录,后续学完基础语法,会准备写一个go微服务项目,源码依然放在github上面。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- IMXRT学习记录 – 官方代码运行无结果BUG分析
- 记录Hadoop3.1.1 伪分布式运行模式
- Flutter 混合开发实战问题记录(四)编译运行时问题的一些总结
- 记录一次vue练习的填坑记录
- 【错误记录】git ssh 推送失败的一次记录
- 运行过程+运行效率
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数学与泛型编程
[美]亚历山大 A. 斯捷潘诺夫(Alexander A. Stepanov)、[美]丹尼尔 E. 罗斯(Daniel E. Rose) / 爱飞翔 / 机械工业出版社 / 2017-8 / 79
这是一本内容丰富而又通俗易懂的书籍,由优秀的软件设计师 Alexander A. Stepanov 与其同事 Daniel E. Rose 所撰写。作者在书中解释泛型编程的原则及其所依据的抽象数学概念,以帮助你写出简洁而强大的代码。 只要你对编程相当熟悉,并且擅长逻辑思考,那么就可以顺利阅读本书。Stepanov 与 Rose 会清晰地讲解相关的抽象代数及数论知识。他们首先解释数学家想要解决......一起来看看 《数学与泛型编程》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
图片转BASE64编码
在线图片转Base64编码工具