• 命名
    命名规则:一个名字必须以一个字母或下划线开头后面,可以跟任意数量的字母、数字或下划线,大写字母和小写字母所代表的意义不同。以大写字母开头,就可以被外部的包访问。
    go语言通常使用驼峰式命名(当名字由几个单词时,优先使用大小写命名)
  • 声明
    go语言有四个声明语句:var(变量),const(常量),type(类型),fun(函数)
var 变量名字 类型= 表达式

go语言中不存在未初始化的变量:数值被初始化为0,布尔类型被初始化为false,字符串被初始化为" ",slice,map,chan和函数初始值为nil.
go语言在声明时,可以一次性声明多个变量

var i,j,k int
var b,f,s=true,3.1,"hello"
var f,err=os.Open(name)
  1. 简短变量声明

简短变量用于声明和初始化局部变量,简短变量中必须要有一个新的变量,声明的方式如下:

名字:=表达式
i:=100
  1. 指针
    一个指针变量保存的是另一个变量的地址,通过指针可以直接读或更新对应变量的值。
x:=1      //声明x变量
p:=&x   //声明指针p,指针p指向变量x
*p=x    //*p对应p指针指向的变量值

3.new函数
使用内建new函数,new(T)创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回值为*T,new声明变量时,不需要声明临时的变量名。

p:=new(int)          //*int类型,指向匿名的int变量

4.变量的声明周期
包一级声明的变量,声明周期随整个程序,局部变量的生命周期从创建到函数体结束,结束后,存储空间被回收。

  • 赋值
x=1    //命名变量赋值
*p=true    //通过指针间接赋值
persion.name="bob"  //结构体字段赋值
count[x]=count[x]*scale    //数组,slice或map元素的赋值

类型

type  类型名字 底层类型          //创建一个新的类型名称

数据类型

go语言的数据类型包括:

  1. 数组

数组长度是数组类型的一个组成部分,因此[3]int和[4]int是两个不同的数组类型,数组的长度必须是常量表达式

var a [3]int
for i,v:=range a{               //遍历数组
	fmt.Println("%d %d\n",i,v)
}
var a [3]int={1,2}         //定义并初始化数组
  1. 切片类型
    切片代表变长的序列,序列中每个元素都有相同的类型值,一个slice类型一般写作[]T,T代表slice元素中的类型,slice没有固定长度。slice可以用来访问数组的子序列,一个slice由三部分组成:指针,长度和容量。
    sliced的切片操作s[i:j],其中(0<=i<=j<=cap(s))用于创建一个新的slice,应用s的第i个元素到第j-1个元素的自序列,slice之间不能进行大小比较。
  2. make函数
    make函数用于创建一个指定函数类型、长度和容量的slice,容量部分可以省略。在底层,make创建了一个匿名的数组变量,然后返回一个slice。
make ([]T,len)    //slice是整个数组
make([]T,len,cap)     //slice只引用了底层数组的前len个元素,但容量包含整个数组
  1. append函数
    append函数用于向slice追加元素。
var x[]int
x=append(x,1)
  1. map
    map存储量键/值(key/value)的集合,key的值必须可以用"=="进行比较,valeu可以是任意类型,map中所有的key值都有相同的类型,value也有相同的类型,但是key和value可以有不同的类型,判断key值是否相等来判断是否存在。map的迭代顺序是不确定的,如果需要按照顺序遍历map,必须显示的对key进行排序,使用sort包的Strings函数对字符串slice进行排序。map的value类型也可以是map或slice
ages:=make(map[string]int)  //使用内置的make函数创建map
ages:=map[string]int{       //使用map字面值语法创建map
"alice": 31
"charlie": 34
}
//等价于
ages:=make(map[string]int)
args["alice"]=31
args["charlie"]=34

另一种创建map的方式是map[string]int{},map中的元素通过key对应的语法下标来访问。
break和continue的区别:
break用来中断当前的循环,开始执行循环之后的内容,continue会跳过当前循环,开始执行下一次循环。

4.delete

delete(map,key)

结构体

type Employee struct{
ID   int
Name  string
Address string
Position  string
}
var dilbert Employee

声明了Employee的结构体,并声明了一个Employee类型的变量dilbert,交换结构体成员的顺序,就会变成两个不同的结构体,结构体成员名字以大写字母开头,那么该成员就是导出的。如果结构体成员都是可以比较的,那么结构体也是可以比较的。

type Point struct{X,Y int}
p:=Point{1,2}
q:=Point{2,1}
fmt.Println(p.X==q.X&&p.Y==q.Y)         //false

JSON

JSON是用于接收和发送结构化信息的标准,一个JSON数组是一个有序的值序列,JSON 键值对是用来保存 JS 对象的一种方式,和 JS 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值:

{"firstName": "Json"}