Go程序结构

Go程序结构

1、名称

​ 名称的开头是一个字母下划线,且区分大小写

实体第一个字母的大小写决定其可见性是否跨包:

​ 若名称以大写字母开头,它是导出的,对包外是可见和可访问的,可以被自己包以外的其他程序所引用,比如fmt包中的Printf。

包名本身总是由小写字母组成的。

一般使用驼峰式命名;

像ASCII和HTML这样的首字母缩写词通常使用相同的大小写,如html,而不是Html;

2、声明

​ 声明是给一个程序实体命名,并且设定其部分或者全部属性。

有四个主要的声明:

变量(var)、常量(const)、类型(type)、函数(func);

go程序存储在一个或多个以.go为后缀的文件里;

每一个文件以package声明开头,表明文件属于哪个包;接着是import声明

3、变量

​ var声明创建一个具体类型的变量,给它一个附加的名字,设置它的初始值。

var name type = expression
//类型和表达式部分可以省略一个,但不能都省略
var s string  //""
var b = true //bool

Go中所有变量都是初始化的,若未设置初始值,则为零值

类型 默认零值
数字(int、float) 0
布尔型 (bool) false
接口和引用类型(slice、指针、map、通道、函数) nil
复合类型(数组或者结构体) 零值是所有元素的零值
3.1、短变量声明

​ 短变量声明可以用来声明和初始化局部变量

name := expression
//name的类型由expression决定
i := 100 //一个int类型的变量
// := 表示声明, = 表示赋值

​ var声明通常是为那些跟初始化表达式类型不一致的局部变量保留的,或者用于后面才对变量赋值以及变量初始值不重要的情况。

​ 短变量声明不需要声明所有在左边的变量;

3.2、指针

​ 变量是存储值的地方;

​ 指针的值是一个变量的地址,不是所有的值都有地址,但是所有的变量都有。

​ 使用指针可以在无须知道变量名字的情况下,间接读取或更新变量的值。

x := 1
p := &x  // p是整型指针,指向x
fmt.Println(*p) // 1 , *p获取变量的值
*p = 2 //p指向的变量写成*p, *p代表一个变量, 本式等于 x = 2
fmt.Println(x)
3.3、new函数

​ 另一种创建变量的方式是使用内置的new函数,表达式new(T),创建一个未命名的t类型变量,初始化为T类型的零值,并返回其地址(*T)

p := new(int) // *int类型的p,指向未命名的int变量,new函数返回 *int
fmt.Println(*p) //输出“0”
*p = 2 

note: 使用new创建的变量和取其地址的普通局部变量没有什么不同,只是不需要引入一个虚拟的名字。通过new(T)就可以直接在表达式中使用,故只是语法上的便利。

new是一个预声明的函数,不是一个关键字,使用的相对较少。

4.赋值

​ 赋值语句用来更新变量所指的值,赋值符号 “=” 。

​ 多重赋值,允许几个变量一次性被赋值;(在实际更新变量前,右边所有的表达式被推演)

5、类型声明

​ 变量或表达式的类型定义这些值应有的特性,例如大小、在内部如何表达、可以对其进行何种操作以及它们所关联的方法

​ type声明定义一个新的命名类型,它和某个已有类型使用同样的底层类型。

type name underlying-type
type Celsiue float64 //定义类型Celsiue

note:对于每个类型T,都有一个对应的类型转换操作T(x)将值x转换为类型T。如果两个类型具有相同的底层类型或者二者都是指向相同底层类型变量的未命名指针类型,则二者是可以相互转换的。

6、包初始化

func init() {/*...*/}

在每一个文件里,当程序启动时,init函数按照它们声明的顺序自动执行,init函数不能被调用和被引用;

你可能感兴趣的:(Go语言,golang,开发语言,后端)