golang学习笔记2:基本结构与数据类型

编程老司机 · · 1293 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

下面列举了 Go 代码中会使用到的 25 个关键字或保留字:


除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数。


程序一般由关键字、常量、变量、运算符、类型和函数组成。


程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。


程序中可能会使用到这些标点符号:. ,  ; : 和 …


程序的代码通过语句来实现结构化。每个语句不需要像 C 家族中的其它语言一样以分号;结尾,因为这些工作都将由 Go 编译器自动完成。


如果你打算将多个语句写在同一行,它们则必须使用;人为区分,但在实际开发中我们并不鼓励这种做法。


如果对一个包进行更改或重新编译,所有引用了这个包的客户端程序都必须全部重新编译。


Go 中的包模型采用了显式依赖关系的机制来达到快速编译的目的,编译器会从后缀名为.go 的对象文件(需要且只需要这个文件)中提取传递依赖类型的信息。


如果 A.go 依赖 B.go,而 B.go 又依赖 C.go:


编译 C.go, B.go, 然后是 A.go.


为了编译 A.go, 编译器读取的是 B.go 而不是 C.go.


这种机制对于编译大型的项目时可以显著地提升编译速度。


每一段代码只会被编译一次


一个 Go 程序是通过 import 关键字将一组包链接在一起。


import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。包名被封闭在半角双引号 "" 中。如果你打算从已编译的包中导入并加载公开声明的方法,不需要插入已编译包的源代码。


函数


这是定义一个函数最简单的格式:


func functionName()


在程序开始执行并完成初始化后,第一个调用(程序的入口点)的函数是 main.main()(如:C 语言),该函数一旦返回就表示程序已成功执行并立即退出。


函数里的代码(函数体)使用大括号 {} 括起来。


Go 语言虽然看起来不使用分号作为语句的结束,但实际上这一过程是由编译器自动完成.


类型


可以包含数据的变量(或常量),可以使用不同的数据类型或类型来保存数据。使用 var 声明的变量的值会自动初始化为该类型的零值。类型定义了某个变量的值的集合与可对其进行操作的集合。


类型可以是基本类型,如:int、float、bool、string;结构化的(复合的),如:struct、array、slice、map、channel;只描述类型的行为的,如:interface。


结构化的类型没有真正的值,它使用 nil 作为默认值(在 Objective-C 中是 nil,在 Java 中是 null,在 C 和 C++ 中是NULL或 0)。值得注意的是,Go 语言中不存在类型继承。


Go 程序的一般结构

下面的程序可以被顺利编译但什么都做不了,不过这很好地展示了一个 Go 程序的首选结构。这种结构并没有被强制要求,编译器也不关心 main 函数在前还是变量的声明在前,但使用统一的结构能够在从上至下阅读 Go 代码时有更好的体验。


总体思路如下:


  • 在完成包的 import 之后,开始对常量、变量和类型的定义或声明。


  • 如果存在 init 函数的话,则对该函数进行定义(这是一个特殊的函数,每个含有该函数的包都会首先执行这个函数)。


  • 如果当前包是 main 包,则定义 main 函数。


  • 然后定义其余的函数,首先是类型的方法,接着是按照 main 函数中先后调用的顺序来定义相关函数,如果有很多函数,则可以按照字母顺序来进行排序。




Go 程序的执行(程序启动)顺序如下:

按顺序导入所有被 main 包引用的其它包,然后在每个包中执行如下流程:

如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次。

然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数。

在完成这一切之后,main 也执行同样的过程,最后调用 main 函数开始执行程序。 




关注置顶走一波~




有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:编程老司机

查看原文:golang学习笔记2:基本结构与数据类型

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1293 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传