一.基础语法:
package main :导入main包,程序入口包。
import(“fmt”):导入标准库中fmt包,用来屏幕输入输出字符串,格式化字符串。
运行程序:go run helloworld.go
编译成二进制:go build helloworld.go
编译完成后:./helloworld 运行
字符串:内置类型,直接通过加号拼接,如 g :=”foo” ,可用等号直接比较两字符串相等。
变量声明:
1. var a=”initial” 自动推导变量类型 ,也可显式声明变量类型 ,如 var a, b int = 1, 2
2. 使用变量名 :=值,如 f :=float32(e)
常量:将var改为const 如 const s string = “constant”, 常量没有确定的类型,会根据前后文自动确定类型。
判断语句:if后面没有小括号,必须有大括号
switch:switch后变量名不需要括号,如switch a{…}
不同的是:switch中的case不需要加break,默认只跑符合的那一个。
switch后可以放任意类型变量,也可不写任何东西,当成ifelse来用,如
switch { case t.Hour()<12: fmt.Println(“…”)
循环语句:只有for循环
1. for{…} : 死循环
2. for j :=7; j<9;j++{…} :正常循环 可用break,和continue。
数组: var a [5]int , a[4]=100
切片: 可变长度的数组,s :=make([]string, 3) len()函数可查看数组的长度。
append() 函数可以追加字符串,必须将append重新赋给原变量,如:s=append(s,”d”) 。因为如果容量不够,会发生扣容。
c :=make([]string,len(s)) 可以直接指定长度
copy(c,s)可以拷贝数值。
s[2:5]:从二到五的值
map: m :=make(map[string]int) string是key值,int是值的类型,m[“one”]=1;
delete(m,”one”) 删除key值
r,ok :=m[“unknow”] 来获取map中有无该key值
完全无序,随机的顺序
range:nums := [] int{1,2,3,4}, 用在for循环中,for i , num := range nums{…} range返回两个值,第一个是下标,第二个是值,可以都接收,也可以只接收key值。
函数:func +函数名,变量类型是后置的,
指针:为了实现函数中地址传递,对变量能够改变有效。
结构体:type user struct {
name string
password string
}
结构体初始化: a :=user{name: “wang”,password: “1024”}
a :=user{“wang”,password: “1024”}
结构体方法:在func和函数名之间加上(u user),即采用结构体定义的方法,相当于C++中类成员函数的定义和使用。
错误处理:采用error来返回错误,当error类型的参数不为nil时,代表发生了错误。
字符串操作:
字符串格式化:fmt.Println 换行 fmt.Printf(“%v”,s) 可以用%v表示任何类型输出
%+v可以显示详细一些的信息,%#v可以显示更详细的信息。
JSON处理:要保证结构体中变量开头大写,就可以通过json.Marshal(a) 来将结构体序列化。
时间处理:time.Now() 获取当前时间,time.Date() 构造时间,t.Year(), t.Month()…
字符串和数字之间的转换: 在strconv包下,需要先行导入
n,_ := strconv.ParseInt(“111”,10,64), 10代表十进制
也可以用strconv.Atoi(“123”) 来快速的把一个字符串转换成数字。