内容简介:个人一直觉得语法的学习不存在多大问题,咱们真正要了解的是程序如何运行。对于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 推送失败的一次记录
- 运行过程+运行效率
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Iterative Methods for Sparse Linear Systems, Second Edition
Yousef Saad / Society for Industrial and Applied Mathematics / 2003-04-30 / USD 102.00
Tremendous progress has been made in the scientific and engineering disciplines regarding the use of iterative methods for linear systems. The size and complexity of linear and nonlinear systems arisi......一起来看看 《Iterative Methods for Sparse Linear Systems, Second Edition》 这本书的介绍吧!