Go预言师强类型语言(静态类型语言) Go语言编写规范: 例子: package main import “fmt” func main(){ fmt.Println(“hello world!”); } (1)package声明,表示该Go代码所属的包,要生成Go的可执行文件,必须建立一个名字为main的包,并且在包中含有一个叫main()的函数(该函数是Go可执行程序的执行起点) (2)包声明之后,是一系列的import语句,用于导入该程序所依赖的包(如同#include) (3)然后是func main(),Go的main函数不带参数而且无返回值 PS:所有的Go语言的函数都以func开头
函数声明: func 函数名(参数列表)(返回值列表){ //函数体 }
多个返回值函数的定义: func GetName() (firstName,lastName,nickName string){ return “May”,”Chan”,”Chibi Maruko” } 若仅仅想要nickName ,,nickName:=GetName()hn`
变量声明: var 变量名 类型 var( v1 int v2 string ) 不需要用分号作为结束符,Go语言摒弃了必须以分号为语言结束标记的习惯
变量初始化: var v1 int = 10 var v2 = 10 //编译器自动推导 v3:=10 //编译器自动推导 var v4 int v4:=10 //Wrong,因为v4是已经声明过的了不能出现在:=的左边 赋值: var v5 int v5 = 10 //正确赋值
输出: import “fmt” fmt.Println(“Array element [“,i,”of array is”,array[i]) fmt.Printf()
len(case) (1)case是数组:返回的是数组的元素个数 (2)case是字符:返回的是字符的长度,Go语言中一个汉字占据三个字节
range:两个返回值一个是数组的下标一个是数组对应的值 for i,v:=range array{ fmt.Println(“Array element [“,i,”of array is”,array[i]) }
数组切片: mySlice = make([]int,5,10) 创建一个元素个数为5的切片,他们的初始值是0,预留了10个元素的存储空间 len()对于切片是得出切片中含有元素个数 cap()对于切片是得出切片的预留空间大小
copy(slice1,slice2)将slice2的元素拷贝到slice1中去 (1)len(slice1)=3 len(slice2)=5 只会拷贝slice2的前三个元素到slice1中去 (2)len(slice1)=5 len(slice2)=3 只会拷贝slice2的三个元素到slice1的前三个中去
map的用法: var myMap map[string] PersonInfo myMap是变量名 string是键的类型 PersonInfo是其中所存放的值类型 建立方法: myMap = make(map[string] PersonInfo,100) 建立一个以string为键值,PersonInfo为值,大小为100的map(大小100可以省略) 元素赋值: myMap[“1234”]=PersonInfo{“1”,”Jack”,”Room 101,…”} 元素删除: delete(myMap,”1234”) 删除键为”1234”的键值对,若这个键值不存在则什么也不会发生,但是如果传入的值是nil,那么调用会导致程序抛出异常 关于map的查找: value,ok:=myMap[“1234”] if ok{//找到了 //处理找到的value }
关于函数调用: import “mymath”//假设要使用的函数放在了一个叫做mymath的包中 C:=mymath.Add(1,2) 关于可见性: 类型,变量,函数都一致:小写字母开头的函数只在本包内课件,大写字母开头的函数可以被其他包使用
关于GO语言中的defer 保证打开的文件句柄被关闭
srcFile.err:=os.Open(src) if err!=nil{ return } defer secFile.Close()顺带一提defer语句的调用时遵照先进后出的原则,即最后一个defer语句将最先被执行
特性 (1)自动垃圾收集工作 (2)更丰富的内置类型slice,map (3)函数多返回值
func getName()(firstName,middleName,lastName,nickName string){ firstName="May" middleName="M" lastName="Chen" nickName="Babe" return }(4)defer:不管程序是否出现异常,均在函数退出时候自动执行相关代码 (5)Go语言反对函数和操作符重载,即出现同名函数或操作符,反对继承,反对虚函数和虚函数重载,放弃了构造函数和析构函数。 Go语言的接口:具有非侵入性式接口,两个接口只要拥有相同的方法列表那么他们就是等同的
操作符的优先级:由高到低 * / % << >> & &^ + - | ^ == != < <= > >= && ||