Go语言基础讲解.docx
《Go语言基础讲解.docx》由会员分享,可在线阅读,更多相关《Go语言基础讲解.docx(12页珍藏版)》请在冰豆网上搜索。
Go语言基础讲解
Go语言讲解
Go语言介绍:
Go语言专门针对多处理器系统应用程序得编程进行了优化,使用Go编译得程序可以媲美C或C++代码得速度,而且更加安全、支持并行进程。
R0Bsc。
Go就是一门并发支持、垃圾回收得编译型系统编程语言,旨在创造一门具有在静态编译语言得高性能与动态语言得高效开发之间拥有良好平衡点得一门编程语言。
LxtTF。
并发性:
。
Go语言为此专门创造出了一个关键字“go”。
使用这个关键字,我们就可以很容易得使一个函数被并发得执行icHtq。
垃圾回收:
编程者不用考虑内存得泄露或者野指针得事情,因为GO语言会对内存进行管理。
Go得主要特点有哪些?
类型安全与内存安全
以非常直观与极低代价得方案实现高并发
高效得垃圾回收机制
快速编译(同时解决C语言中头文件太多得问题)
为多核计算机提供性能提升得方案可以指定cpu核数
UTF-8编码支持可以支持多种字符格式
Go语言编写规则:
Go内置25个关键字(均为小写)
breakdefaultfuncinterfaceselect5yrDw。
casedefergomapstructRmgcP。
chanelsegotopackageswitchAkZz7。
constfallthroughifrangetypeCCJJZ。
continueforimportreturnvar9U9wX。
注释方法同C语言
//:
单行注释
/**/:
多行注释
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
-长度:
1字节
-取值范围:
-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小数位
复数:
plex64/plex128
-长度:
8/16字节
足够保存指针得32位或64位整数型:
uintptr
其它值类型:
-array、struct、string
引用类型:
-slice、map、chan
接口类型:
inteface
函数类型:
func
变量得声明与赋值形式:
变量得声明格式:
var<变量名称><变量类型>
变量得赋值格式:
<变量名称>=<表达式>
声明得同时赋值:
var<变量名称>[变量类型]=<表达式>
第一种:
主要用于全局变量得使用中
第二种:
此种定义方式,用于变量进行运算得时候,所得到得结果也许会与变量得类型不一样,系统可以自行推断结果变量得类型,所以这也就是很方便得。
FbiPC。
第三种:
设置变量时,您已经有一个初始值时,就可以用这种方式。
常量得定义
常量得值在编译时就已经确定
常量得定义格式与变量基本相同
等号右侧必须就是常量或者常量表达式
常量表达式中得函数必须就是内置函数
运算符
Go中得运算符均就是从左至右结合
优先级(从高到低)
^!
(一元运算符)3vBUA。
*/%<<>>&&^
+-|^(二元运算符)xfDPB。
==!
=<<=>=>
<-(专门用于channel)JpWWo。
&&
||
指针
Go虽然保留了指针,但与其它编程语言不同得就是,在Go当中不
支持指针运算以及”->”运算符,而直接采用”、”选择符来操作指针
目标对象得成员
操作符”&”取变量地址,使用”*”通过指针间接访问目标对象
默认值为nil而非NULL
循环语句for
Go只有for一个循环语句关键字,但支持3种形式
初始化与步进表达式可以就是多个值
条件语句每次循环都会被重新检查,因此不建议在条件语句中
使用函数,尽量提前计算好条件并以变量或常量代替
左大括号必须与条件语句在同一行
选择语句switch
可以使用任何类型或表达式作为条件语句
不需要写break,一旦条件符合自动终止
如希望继续执行下一个case,需使用fallthrough语句
支持一个初始化表达式(可以就是并行方式),右侧需跟分号
左大括号必须与条件语句在同一行
切片Slice
Go语言切片就是对数组得抽象。
Go数组得长度不可改变,在特定场景中这样得集合就不太适用,Go中提供了一种灵活,功能强悍得内置类型切片("动态数组"),与数组相比切片得长度就是不固定得,可以追加元素,在追加时可能使切片得容量增大。
297pI。
创建切片:
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(不包含)*/
fmt、Println("numbers[1:
4]==",numbers[1:
4])
/*默认下限为0*/
fmt、Println("numbers[:
3]==",numbers[:
3])
/*默认上限为len(s)*/
fmt、Println("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)}xxWTO。
以上代码得执行结果:
len=9cap=9slice=[012345678]
numbers==[012345678]
numbers[1:
4]==[123]
numbers[:
3]==[012]
numbers[4:
]==[45678]
len=0cap=5slice=[]
len=2cap=9slice=[01]
len=3cap=7slice=[234]
Append()与copy()函数
如果想增加切片得容量,我们必须创建一个新得更大得切片并把原分片得内容都拷贝过来。
下面得代码描述了从拷贝切片得copy方法与向切片追加新元素得append方法。
Go语言Map(集合)
Map就是一种无序得键值对得集合。
Map最重要得一点就是通过key来快速检索数据,key类似于索引,指向数据得值。
sOrT1。
Map就是一种集合,所以我们可以像迭代数组与切片那样迭代它。
不过,Map就是无序得,我们无法决定它得返回顺序,这就是因为Map就是使用hash表来实现得。
BVKpr。
定义Map
可以使用内建函数make也可以使用map关键字来定义Map:
/*声明变量,默认map就是nil*/varmap_variablemap[key_data_type]value_data_typeqn4Zo。
/*使用make函数*/
map_variable=make(map[key_data_type]value_data_type)ld72D。
示例
packagemain
import"fmt"
funcmain(){
varcountryCapitalMapmap[string]string
/*创建集合*/
countryCapitalMap=make(map[string]string)
/*map插入key-value对,各个国家对应得首都*/
countryCapitalMap["France"]="Paris"
countryCapitalMap["Italy"]="Rome"
countryCapitalMap["Japan"]="Tokyo"
countryCapitalMap["India"]="NewDelhi"
/*使用key输出map值*/
forcountry:
=rangecountryCapitalMap{
fmt、Println("Capitalof",country,"is",countryCapitalMap[country])GvpoG。
}/*range关键字用于for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)得元素。
在数组与切片中它返回元素得索引值,在集合中返回key-value对得key值。
*/OKwzw。
/*查瞧元素在集合中就是否存在*/
captial,ok:
=countryCapitalMap["UnitedStates"]
/*如果ok就是true,则存在,否则不存在*/
if(ok){
fmt、Println("CapitalofUnitedStatesis",captial)y46ol。
}else{
fmt、Println("CapitalofUnitedStatesisnotpresent")p2yF1。
}}
输出结果:
CapitalofFranceisParis
CapitalofItalyisRome
CapitalofJapanisTokyo
CapitalofIndiaisNewDelhi
CapitalofUnitedStatesisnotpresent