Go语言基础讲解.docx
- 文档编号:6749261
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:10
- 大小:187.58KB
Go语言基础讲解.docx
《Go语言基础讲解.docx》由会员分享,可在线阅读,更多相关《Go语言基础讲解.docx(10页珍藏版)》请在冰豆网上搜索。
Go语言基础讲解
Go语言讲解
Go语言介绍:
Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Go是一门并发支持、垃圾回收的编译型系统编程语言,旨在创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点的一门编程语言。
并发性:
。
Go语言为此专门创造出了一个关键字“go”。
使用这个关键字,我们就可以很容易的使一个函数被并发的执行
垃圾回收:
编程者不用考虑内存的泄露或者野指针的事情,因为GO语言会对内存进行管理。
Go的主要特点有哪些?
类型安全和内存安全
以非常直观和极低代价的方案实现高并发
高效的垃圾回收机制
快速编译(同时解决C语言中头文件太多的问题)
为多核计算机提供性能提升的方案可以指定cpu核数
UTF-8编码支持可以支持多种字符格式
Go语言编写规则:
Go内置25个关键字(均为小写)
breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar
注释方法同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<变量名称>[变量类型]=<表达式>
第一种:
主要用于全局变量的使用中
第二种:
此种定义方式,用于变量进行运算的时候,所得到的结果也许会和变量的类型不一样,系统可以自行推断结果变量的类型,所以这也是很方便的。
第三种:
设置变量时,你已经有一个初始值时,就可以用这种方式。
常量的定义
常量的值在编译时就已经确定
常量的定义格式与变量基本相同
等号右侧必须是常量或者常量表达式
常量表达式中的函数必须是内置函数
运算符
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(不包含)*/
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)}
以上代码的执行结果:
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类似于索引,指向数据的值。
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)
示例
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])
}/*range关键字用于for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)的元素。
在数组和切片中它返回元素的索引值,在集合中返回key-value对的key值。
*/
/*查看元素在集合中是否存在*/
captial,ok:
=countryCapitalMap["UnitedStates"]
/*如果ok是true,则存在,否则不存在*/
if(ok){
fmt.Println("CapitalofUnitedStatesis",captial)
}else{
fmt.Println("CapitalofUnitedStatesisnotpresent")
}}
输出结果:
CapitalofFranceisParis
CapitalofItalyisRome
CapitalofJapanisTokyo
CapitalofIndiaisNewDelhi
CapitalofUnitedStatesisnotpresent
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Go 语言 基础 讲解