Go语言基础讲解Word文件下载.docx
《Go语言基础讲解Word文件下载.docx》由会员分享,可在线阅读,更多相关《Go语言基础讲解Word文件下载.docx(10页珍藏版)》请在冰点文库上搜索。
单行注释
/**/:
多行注释
Go程序的一般结构:
命名方式:
basic_structure.go
Go程序是通过package来组织的(与python类似)
只有package名称为main的包可以包含main函数
一个可执行程序有且仅有一个main包
通过import关键字来导入其它非main包
通过const关键字来进行常量的定义
通过在函数体外部使用var关键字来进行全局变量的声明与赋值
通过type关键字来进行结构(struct)或接口(interface)的声明
通过func关键字来进行函数的声明
Go语言中,使用大小写来决定该常量、变量、类型、接口、结构
或函数是否可以被外部包所调用:
根据约定,函数名首字母小写即为private
函数名首字母大写即为public
Go语言基本类型部分:
布尔型:
bool
-长度:
1字节
-取值范围:
true,false
-注意事项:
不可以用数字代表true或false
整型:
int/uint
-根据运行平台可能为32或64位
8位整型:
int8/uint8
-128~127/0~255
字节型:
byte(uint8别名)
16位整型:
int16/uint16
2字节
-32768~32767/0~65535
32位整型:
int32(rune)/uint32
4字节
-2^32/2~2^32/2-1/0~2^32-1
64位整型:
int64/uint64
8字节
-2^64/2~2^64/2-1/0~2^64-1
浮点型:
float32/float64
4/8字节
-小数位:
精确到7/15小数位
复数:
complex64/complex128
8/16字节
足够保存指针的32位或64位整数型:
uintptr
其它值类型:
-array、struct、string
引用类型:
-slice、map、chan
接口类型:
inteface
函数类型:
func
变量的声明和赋值形式:
变量的声明格式:
var<
变量名称>
<
变量类型>
变量的赋值格式:
=<
表达式>
声明的同时赋值:
[变量类型]=<
第一种:
主要用于全局变量的使用中
第二种:
此种定义方式,用于变量进行运算的时候,所得到的结果也许会和变量的类型不一样,系统可以自行推断结果变量的类型,所以这也是很方便的。
第三种:
设置变量时,你已经有一个初始值时,就可以用这种方式。
常量的定义
常量的值在编译时就已经确定
常量的定义格式与变量基本相同
等号右侧必须是常量或者常量表达式
常量表达式中的函数必须是内置函数
运算符
Go中的运算符均是从左至右结合
优先级(从高到低)
^!
(一元运算符)
*/%<
>
&
^
+-|^(二元运算符)
==!
=<
=>
-(专门用于channel)
||
指针
Go虽然保留了指针,但与其它编程语言不同的是,在Go当中不
支持指针运算以及”->
”运算符,而直接采用”.”选择符来操作指针
目标对象的成员
操作符”&
”取变量地址,使用”*”通过指针间接访问目标对象
默认值为nil而非NULL
循环语句for
Go只有for一个循环语句关键字,但支持3种形式
初始化和步进表达式可以是多个值
条件语句每次循环都会被重新检查,因此不建议在条件语句中
使用函数,尽量提前计算好条件并以变量或常量代替
左大括号必须和条件语句在同一行
选择语句switch
可以使用任何类型或表达式作为条件语句
不需要写break,一旦条件符合自动终止
如希望继续执行下一个case,需使用fallthrough语句
支持一个初始化表达式(可以是并行方式),右侧需跟分号
切片Slice
Go语言切片是对数组的抽象。
Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("
动态数组"
),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
创建切片:
varslice1[]type=make([]type,len)
也可以简写为
slice1:
=make([]type,len)
也可以指定切片的容量
make([]T,length,capacity)
切片的初始化
s:
=[]int{1,2,3}
切片截取
s1:
=s[startIndex:
endIndex]
将s中从下标startIndex到endIndex-1下的元素创建为一个新的切片
示例:
packagemain
import"
fmt"
funcmain(){
/*创建切片*/
numbers:
=[]int{0,1,2,3,4,5,6,7,8}
printSlice(numbers)
/*打印原始切片*/
fmt.Println("
numbers=="
numbers)
/*打印子切片从索引1(包含)到索引4(不包含)*/
numbers[1:
4]=="
numbers[1:
4])
/*默认下限为0*/
numbers[:
3]=="
numbers[:
3])
/*默认上限为len(s)*/
numbers[4:
]=="
numbers[4:
])
numbers1:
=make([]int,0,5)
printSlice(numbers1)
/*打印子切片从索引0(包含)到索引2(不包含)*/
number2:
=numbers[:
2]
printSlice(number2)
/*打印子切片从索引2(包含)到索引5(不包含)*/
number3:
=numbers[2:
5]
printSlice(number3)
}
funcprintSlice(x[]int){
fmt.Printf("
len=%dcap=%dslice=%v\n"
len(x),cap(x),x)}
以上代码的执行结果:
len=9cap=9slice=[012345678]
numbers==[012345678]
4]==[123]
3]==[012]
]==[45678]
len=0cap=5slice=[]
len=2cap=9slice=[01]
len=3cap=7slice=[234]
Append()和copy()函数
如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。
下面的代码描述了从拷贝切片的copy方法和向切片追加新元素的append方法。
Go语言Map(集合)
Map是一种无序的键值对的集合。
Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值。
Map是一种集合,所以我们可以像迭代数组和切片那样迭代它。
不过,Map是无序的,我们无法决定它的返回顺序,这是因为Map是使用hash表来实现的。
定义Map
可以使用内建函数make也可以使用map关键字来定义Map:
/*声明变量,默认map是nil*/varmap_variablemap[key_data_type]value_data_type
/*使用make函数*/
map_variable=make(map[key_data_type]value_data_type)
示例
varcountryCapitalMapmap[string]string
/*创建集合*/
countryCapitalMap=make(map[string]string)
/*map插入key-value对,各个国家对应的首都*/
countryCapitalMap["
France"
]="
Paris"
Italy"
Rome"
Japan"
Tokyo"
India"
NewDelhi"
/*使用key输出map值*/
forcountry:
=rangecountryCapitalMap{
Capitalof"
country,"
is"
countryCapitalMap[country])
}/*range关键字用于for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)的元素。
在数组和切片中它返回元素的索引值,在集合中返回key-value对的key值。
*/
/*查看元素在集合中是否存在*/
captial,ok:
=countryCapitalMap["
UnitedStates"
]
/*如果ok是true,则存在,否则不存在*/
if(ok){
CapitalofUnitedStatesis"
captial)
}else{
CapitalofUnitedStatesisnotpresent"
)
}}
输出结果:
CapitalofFranceisParis
CapitalofItalyisRome
CapitalofJapanisTokyo
CapitalofIndiaisNewDelhi
CapitalofUnitedStatesisnotpresent