今日学习内容
1:Go 程序的基本结构和要素
1.1包的概念、导入与可见性
包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容,每个Go文件都属于且仅属于一个包,每个Go应用程序都包含一个名为main
的包,一个Go程序是通过import
关键字将一组包链接在一起。有如下方式
import "fmt"
import "os"
也可以这样
import "fmt";import "os"
或者
import(
"fmt"
"os"
)
可见性规则:当标识符以一个大写字母开头,如Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(就像是C++的public);标识符如果以小写字母开头,则对包外是不可见的,但对整个包的内部是可见并且是可用的(就像C++中的private)。注意:如果你导入了一个包确没有使用它,则可能会报错,因为Go 的格言:“没有不必要的代码!”,(我在VSCode中发现会删除没有用的包)
1.2函数
定义一个函数最简单的格式
func functionName()
你可以在括号 ()
中写入 0 个或多个函数的参数(使用逗号 ,
分隔),每个参数的名称后面必须紧跟着该参数的类型。
在程序执行并完成初始化后,第一个调用(程序的入口点)函数是main.main
(如C/C++),Go的代码风格是左大括号{
必须与方法的声明放在同一行,这是编译器的强制规定,否则你在使用 gofmt 时就会出现错误提示:
syntax error: unexpected semicolon or newline before {`
可以包含数据的变量(或常量),可以使用不同的数据类型或类型来保存数据。使用 var 声明的变量的值会自动初始化为该类型的零值。类型定义了某个变量的值的集合与可对其进行操作的集合。
1.3类型
类型可以是基本类型,如:int、float、bool、string;结构化的(复合的),如:struct、array、slice、map、channel;只描述类型的行为的,如:interface。
结构化的类型没有真正的值,它使用 nil 作为默认值(在 C 和 C++ 中是NULL或 0)。值得注意的是,Go 语言中不存在类型继承。
函数也可以是一个确定的类型,就是以函数作为返回类型。这种类型的声明要写在函数名和可选的参数列表之后,例如:
func FunctionName (a typea, b typeb) typeFunc
你可以在函数体中的某处返回使用类型为 typeFunc 的变量 var:
return var
一个函数可以拥有多返回值,返回类型之间需要使用逗号分割,并使用小括号 ()
将它们括起来,如:
func FunctionName (a typea, b typeb) (t1 type1, t2 type2)
示例: 返回的形式:
return var1, var2
这种多返回值一般用于判断某个函数是否执行成功(true/false)或与其它返回值一同返回错误消息。
我们可以使用下面的方式声明变量:
var a IZ = 5
这里我们可以看到 int 是变量 a 的底层类型,这也使得它们之间存在相互转换的可能
如果你有多个类型需要定义,可以使用因式分解关键字的方式,例如:
type (
IZ int
FZ float64
STR string
)
每个值都必须在经过编译后属于某个类型(编译器必须能够推断出所有值的类型),因为 Go 语言是一种静态类型语言。