2.程序结构

Go语言和其他编程语言一样,一个大的程序是由很多小的基础构件组成的。变量保存值,简单的加法和减法运算被组合成较复杂的表达式,基础类型被聚合成数组或者结构体等更为复杂的数据结构。然后使用if和for之类的控制语句来组织和控制表达式的执行流程。然后多个语句被组织到一个个函数种,以便代码的隔离和复用。函数以源文件和包的方式被组织。

本章将会更深入讨论Go程序基础结构方面。

命名

关键字:
image

预定义的名字:
image
Go 语言中预先定义的名字并非关键字,可在特定场景重新定义,但需避免过度使用导致语义混乱;名字的作用域取决于定义位置(函数内仅局部有效,函数外包内所有文件可访问),包级名字首字母大写则导出(可被外部包访问)、小写仅包内可见,包名一般为小写。命名风格上,Go 无长度限制但推崇短命名(尤其局部变量如 i),作用域和生命周期越长的名字越适合用长名;命名习惯优先驼峰式(大小写分隔)而非下划线分隔,ASCII/HTML 等缩略词避免大小写混合(如 HTMLEscape、htmlEscape,而非 escapeHtml)。

声明

声明语句定义了程序的各种实体对象以及部分或者全部的属性,Go语言主要有四种类型的声明语句:var,const,type和func,分别对应变量,常量,类型和函数实体对象的声明。

变量

其中“类型”或者“=表达式”两个部分可以省略其中一个。如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。如果初始化表达式被忽略那么将用0来初始化。

简短变量声明

在函数内部,有一种称为简短变量声明语句的形式可用于声明和初始化局部变量。他以名字:=表达式来声明变量。变量的类型根据表达式来自动推导。因为简洁和灵活的特点,简短变量声明被广泛用于大部分的局部变量的声明和初始化。var形式的声明语句往往是用于需要显式指定变量类型地方,或者因为变量稍后会被重新赋值而初始值无关紧要的地方。

:=是一个变量声明语句,=是一个变量赋值操作。

指针

Go语言中变量对应存储其类型值的内存空间,普通变量绑定名字,x[i]、x.f等表达式也可引入变量,这类表达式通常读取值,出现在赋值语句左侧时可更新值;指针存储另一个变量的内存地址,每个变量必有内存地址(并非所有值都有),通过&取变量地址生成对应类型指针(如&x生成int类型指针),指针表达式可读取或更新指向变量的值;聚合类型成员(结构体字段、数组元素)均可取地址,可寻址的值才能接受&操作,任意类型指针零值为nil,指针相等仅当指向同一变量或均为nil;Go中返回函数局部变量地址安全,每次调用会返回不同地址;指针作为函数参数可更新原变量值,还会为变量创建别名(slice、map等引用类型也会创建别名);指针是flag包的核心技术,通过flag.Bool/String等函数创建指向命令行标志参数变量的指针,需先调用flag.Parse解析参数更新变量值,再通过*指针访问,非标志参数可通过flag.Args()获取,解析错误时程序会打印提示并终止。

new函数

另一个创建变量的方法是调用用内建的new函数。表达式new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为 *T
image
new用的很少

posted @ 2026-03-23 13:53  cyusouyiku  阅读(15)  评论(0)    收藏  举报