专栏首页老司机的技术博客golang学习笔记2:基本结构与数据类型

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

下面列举了 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 函数开始执行程序。

本文分享自微信公众号 - oldriver编程老司机(bclsj-cn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • golang学习笔记1:初识

    随着软件规模的不断扩大,诸多的学者和谷歌的开发者们在公司内部的软件开发过程中开始经历大量的挫折,在诸多问题上都不能给出令人满意的解决方案,尤其是在使用 ...

    JKXQJ
  • 人人都能学会的python编程教程10:调用函数

    要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。

    JKXQJ
  • 宝宝都能学会的python编程教程10:调用函数

    python里的函数和数学意义上的函数并没有太大差别。 调用函数 python内置了很多有用的函数,我们可以直接调用。 要调用一个函数,需要知道函数的名称和参数...

    JKXQJ
  • go基础编程 day-1

            导入单个包                                                                   ...

    Wyc
  • 牛客网_Go语言相关练习_判断&选择题(4)

    错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中;而异常指的是不应该出现问题的地方出现了问题,比如引用了空指针,这种情况...

    Zoctopus
  • [linux][elf]ELF格式分析与常用工具以及不常见问题

    前言: ELF只linux是最常用的可执行文件格式,这里简单分析一下ELF格式,介绍几个常用命令,并分享几个不常见的问题。 分析: 1,dynamicall...

    皮振伟
  • 记一个实时Linux的中断线程化问题

    有一个项目对实时性要求比较高,于是在linux内核上打了RT_PREEMPT补丁。

    zqb_all
  • 疫情背后线下消费,引发的三层思考

    线上线下融合逐渐释放消费潜力中国经济加快复苏。随着中国国内疫情防控形势持续向好,消费市场潜力迎来集中释放。

    庄帅
  • 疫情危机下,消费券能否刺激消费回补?

    新冠肺炎疫情和防控措施对多个行业带来巨大冲击,很多企业和个体工商户遭受巨额损失,餐饮、旅游、交通出行、酒店住宿等行业的企业甚至面临颗粒无收的灭顶之灾。

    庄帅
  • 【DB笔试面试508】如何选择最优的容灾方案?

    在构建容灾系统时,首先考虑的是结合实际情况选择合理的数据复制技术。在选择合理的数据复制技术时主要考虑以下因素:

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券