Go基本代码结构,包+变量+函数

包Package

1、用来结构化代码,每个程序都是由包组成的

2、包名,采用小写字母。例如pack1包,编译后产生的对象文件将会是pack1.a

3、每个go文件都只能属于某一个包的,一个包下面可以包含多个文件

4、你必须要在每个文件开头第一行使用 `package pkg_name`来指名当前文件属于哪个包

5、这个包的概念有点类似其他编程语言中的命名空间

标准库

1、标准库包含大量可以直接使用的包,如`fmt`\`os`

2、一般会位于go的根目录中的pkg目录下

包的导入

1、包的引入通过`import`关键字来将一组包链接在一起

2、例如 `import "fmt" `表示Go编辑器要引入fmt包。

3、fmt包是有格式化IO相关的函数,包名采用""双引号包裹

4、想引入多个包,可以采用多次import或者使用因式分解的方法

    import (

        "fmt"

        "os"

    )

5、包的加载,如果包名不是以.或者/引入的,则Go会进行全局文件下查找

6、包的加载,如果包是以./开头的,则会在相对目录下查找

7、导入包,则表示包含这个包所有的代码对象

8、包中的代码必须是唯一的,避免名称冲突,相同的标识符可以在不同的包中可以用包名加上标识符来进行区分

9、包的别名,为了解决包名之间有可能冲突,可以`import out "fmt" ` 从而对包进行重新命名

10、导入包之后,可以定义声明常量、变量、函数、等

可见性规则

1、标识符大写字母开头,则可以被外界通过引入包进行调用。如其他语言面向对象的public

2、标识符小写字母开头,则对包外是不可见的,但是在包内是可用的。如其他面向对象的private

程序构建

1、包以及包内的文件必须要正确的进行编译

2、包的依赖关系将决定构建顺序

3、同一个包的源文件必须同时被一起编译

4、一个包将作为一个编译的基本单元

5、每个目录只包含一个包

6、如果对一个包进行更改或者重新编译,那么引用这个包的程序也都必须重新编译

7、包与包之间,显示依赖=>快速编译

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

Go程序执行流程

1、按顺序导入所有被main包引用的其他包,然后在每个包下面执行同样流程

2、如果这个包又导入其他包,将递归进行执行,但是每个包只会被导入一次

3、初始化包中的常量、变量、如果有init则进行调用

4、执行main函数

函数

1、一个可执行程序,必须有main函数,一般都是启动后首先执行main函数,如果有init函数则优先进行init初始化

2、main函数既没有参数,也没有返回值

3、函数的代码主题,"{"左大括号必须与方法声明放在同一个行,"}"右大括号放到下一行

    func functionName(parameter_list) (return_value_list) {}

4、parameter_list    是函数形参,可以传入多个参数,(param1 type1, param2 type2)

5、return_value_list 是函数返回值参数,(ret1 type1, ret2 type2)

6、functionName      是函数名,遵循驼峰命名法,首字母大写可以被外部包调用,首字母小写则对外不可见

7、程序正常结束退出代码为0,因为异常而进行终止的退出代码非0

注释

1、单行注释//、多行注释

2、注释不会被编译,godoc 工具会收集这些注释并产生一个技术文档。

3、每一个包开始最好也有相关注释,应该提供一些相关信息并对整体功能做简要的介绍

类型

1、使用 var 声明的变量的值会自动初始化为该类型的零值

2、基本数据类型:int、float、bool、string

3、结构化复合类型:struct、array、slice、map、channel、func

4、行为描述:interface

5、结构化的类型,没有真正的值,它使用nil作为默认值

6、go语言中,不存在类型继承

7、使用 type 可以为某个类型定义别名,`type IZ int`,之后我们可以声明别的变量`var a IZ = 6`

8、type也可以使用因式分解定义别名

类型转化

1、所有类型转化必须显性说明 valueOfTypeB = typeB(valueOfTypeA)

2、精度问题,小范围的类型转成大范围的类型,一般不会丢失精度,反之可能会发生截断甚至编译失败

一些规范

1、已经import引入的包,没有使用,则会提示报错

2、已经定义的变量、没有使用,则会提示报错

3、gofmt 来强制实现统一的代码风格
明天我们吃什么 悲哀藏在现实中 Tacks
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!