golang语言生态学习

第三天:golang基础入门之变量常量初始化,import导包学习



前言

首先介绍变量四种初始化方法,然后介绍常量初始化方法,最后介绍import导包相关知识。


一、golang变量初始化方法

1.单变量初始化

golang变量初始化有四种方法,这里以int数据类型为例,列举四种方法:
法一:

var a int // 此方法初始化一个int变量a,初始化值为0

法二:

var a int = 10 // 此方法初始化一个int变量a,初始化值为10

法三:

var a = 10 // 此方法初始化一个变量a,编译器识别其类型为int,并且初始化值为10

法四:

a := 10 // 此方法初始化一个int变量a,初始化值为0

法一,法二,法三既可以作为局部变量声明在函数体内,也可以作为全局变量声明在函数体外。法四则只能作为局部变量声明在函数体内。

2、多变量初始化

法一,相同类型多变量声明:

var a,b int // 此方法初始化一个int变量a,一个int变量b,初始化值均为0

法二,相同类型多变量声明:

var a,b int = 10,20 // 此方法初始化一个int变量a,值10,一个int变量b,初始化值为20

法三,不同类型多变量声明:

var a int,b string // 此方法初始化一个int变量a,初始化值为0,初始化一个string变量b,初始化值为“”
二、使用步骤

1、普通常量声明

单个常量声明

const a = 10

多个常量声明

const (
	a = 10
	b = 20
)

2、itoa高阶常量声明

itoa关键字每行加1,可以以公式的方式计算常量值
例如:

const (
	a = itoa // 初始化iota = 0, 所以 a = 0 
	b // 每行自增1,iota = 1, 所以 b = 1
	c // 每行自增1,iota = 2, 所以 c = 2
	
	d = itoa * 2 // 每行自增1,iota = 3, 所以 d = 6
	e // 使用相同公式,每行自增1,iota = 4, 所以 e = 8
	f // 使用相同公式,每行自增1,iota = 5, 所以 f = 10
	
	g, h = itoa + 1, itoa * 2 // 每行自增1,iota = 6, 所以 g = 7, h = 12
	i, j // 每行自增1,iota = 7, 所以 i = 8, h = 14
)
三、import导包相关知识

1、如何导入一个$GOPATH/src目录下自己开发的包

以这个包所在目录在$GOPATH/src/project/lib1下为例,调包的Main函数在$GOPATH/src/project/main.go下,
错误的方式为:

import "lib1"

正确的方式为(未开启go module的情况下):

import "project/lib1"

因为没开启go module的前提下,go编译器会从$GOROOT/src下或者$GOPATH/src目录下寻找包,而不是这两个目录的所有子目录,所以import "lib1"会报找不到对应路径的错误。

2、如何导入一个第三方包

首先将第三方包的下载并解压缩到$GOPATH/src目录下,则第三方就如同自己开发的包模块,直接按照相对$GOPATH/src的路径导入即可。

3、导包过程

导包的执行流程如下图所示,递归的去执行所有被导包下的Init()函数并初始化相关变量和常量之后再返回调用方,并且按照全局变量常量初始化,init()函数执行,main()函数的顺序执行。

4、导包进阶

导入匿名包,作用是可以不使用包中任何变量并且执行init()函数:

import _ "lib1"

导入包并改名,作用是改成简单易识别的名字

import mylib "lib1"

mylib.A = 100 // 使用变量要加包的别名

导入包的所有变量常量,作用是相当于把被调用包的所有变量常量放到被调用方下,但是一定要谨慎使用,因为可能调用方与被调用方含有重名变量

import . "lib1"

A = 100 // 使用被调用方的变量不需要加包名