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语言的接口:具有非侵入性式接口,两个接口只要拥有相同的方法列表那么他们就是等同的

操作符的优先级:由高到低
* / % << >> & &^
+ - | ^
== != < <= > >=
&&
||