GO语言具有 1.高性能、高并发 2.语法简单、学习曲线平缓 3.丰富的标准库 4.完善的工具链 5.静态链接 6.快速编译 7.跨平台 8.垃圾回收 GO已经在主流语言中具有他的一席之位所以不可忽视这股新兴之力 GO语言定义一个变量经常用var去声明,例如:var a = "hello world"//hello world var b, c int = 1,2//1 2 var s := "hello!!!"//hello!!! 等,这些变量的声明和c/c++和Java有所不同,例如变量类型在变量后面,可以不用写变量类型,可以用:=来快速定义一个变量,字符串可以直接相加拼接例如g := a+"!!!" //hello world!!! const和c++一样定义一个常量 关于if—else语句 和c/c++的if—else类似但是注意的是1.GO语言if后面不加括号(如果加了保存之后会自动消失)else需要在if后面的}直接接上不然会报错例如: if 7%2 == 0 { fmt.Println("it's even") } else { fmt.Println("it's odd") } 关于循环语句 GO语言只有for循环,for循环的写法和c/c++类似,但是仍然没有括号,可以直接写个for{……}来做一个死循环 示例 for j := 7; j <= 9; j++ { fmt.Println("hello!!!") } for{ fmt.Println("it's loop") break } switch语句 GO语言的switch的case语句不需要加break,这也是c/c++的一个通病吧,而且及其炸裂的是switch后面不加变量写的话相当于if—else的嵌套效果,示例如下: a := "a" switch a { case "a": fmt.Println("one") case "2": fmt.Println("two") case "3": fmt.Println("three") default: fmt.Println("other") } t := time.Now() fmt.Println(t) switch { case t.Hour()<12: fmt.Println("it's before noon") default: fmt.Println("it's after noon") } 数组 普通数组一般是这样定义的 var s [10]int for i := 0; i < 10; i++ { s[i] = 10 - i fmt.Println(s[i]) } var a[5] int a[1]=100 fmt.Print(a[4],len(a)) 一般用切片对数组进行定义 切片很像c++中的vector和Java中的stringbuilder可以定义类型,追加元素,复制一个切片到另一个切片中就是一个动态数组,特别有意思的是可以直接用fmt.Println(s[num1:num2])来访问切片中下标从num1到num2的元素,示例如下: s := make([]string, 6) s[0] = "a" s[1] = "b" s[3] = "c" fmt.Println("get:",s[0])//get: a fmt.Println("lenth:",len(s))//lenth: 6 s=append(s, "d") fmt.Println("ALL:",s)//ALL: [a b c d] c:=make([]string,len(s)) copy(c,s) fmt.Println(c) fmt.Println(c[1:2])//[b] fmt.Println(s[:1])//[a] fmt.Println(s[1:])//[b c d] map数据结构 和c++与Java类似,GO也提供了map,具体使用也需要用make函数进行定义例如:m := make(map[string]int) map中的unknow元素对应着int/float中的0 string中的换行示例代码如下: m := make(map[string]int) m["one"] = 1 m["two"] = 2 fmt.Println(len(m))//2 fmt.Println(m["one"],m["unkonw"])//1,0 r,ok:=m["unknow"] fmt.Println(r,ok)//0,false delete(m,"one") range的出现可以帮助我们更快的遍历数组,具体用法是 for index,value := range array{……} 如果不需要返回值可以用_去去除 示例如下:nums:=[]int{2,3,4} sum:=0 for i,n := range nums{ sum+=n if n==2{ fmt.Println("index:",i,"num:",n)//index: 0 num: 2 } } fmt.Println(sum)//9 m:=map[string]string{"a":"A","b":"B"} for k,v := range m{ fmt.Println(k,v)//a A;b B } 函数 函数的头部一般格式是 func add(a,b int)int{……},GO语言可以返回多个值,也可以返回多个不同类型的值,而返回不同类型的值的时候需要在形参之后的括号后面再加一个返回值类型的参数,例如func add(a, b int) (result int,ok bool) { return a + b,true } 函数的调用与c/c++类似 指针 GO中的指针用法较少,基本就是修改实参的值,书写函数首部的时候要在需要修改的形参的前面加上*号,调用实参的时候需要在实参前面加上&号 结构体 在GO中有结构体的概念,具体定义方法是:type name struct{……} 具体的使用方法是:a := user{name: "wang", password: "1024"} b := user{"wang", "1024"} c := user{name: "wang"} c.password = "1024" var d user d.name = "wang" d.password = "1024" fmt.Println(a,b,c,d) 结构体方法需要在func的后面添加结构体的名称,例如 func (u user) checkPassword(password string) bool { return u.password == password } 错误处理 GO语言也有属于它的错误处理,具体用法是在方法中定义一个error类型的变量,如果没有问题就返回nil有问题就用errors.New(“错误类型”)返回错误 在主函数中需要用一个变量来接受错误并打印出来,打印错误可以用panic(error)来进行对错误的抛出 字符串操作(一下均是string中的方法,使用时需要用strings.方法来进行使用) Contains(s string,s1 string)//这个是判断字符串s中是否包含s1字符串,返回值为bool类型 Count(s string,s1 string)//这个是判断字符串s1在s中出现的次数,返回值为int HasPrefix(s string,s1 string)//这个是判断s字符串是否以s1字符串作为开头 HasSuffix(s string ,s1 string)//这个是判断s字符串是否以s1字符串作为结尾 Index(s string,s1 string)//是判断字符串s1在s出现的位置,如果没有的话就返回-1 Join([]string{s1,s2},s3)//是在s1和s2字符串中间加入s3字符串 Repeat(s1,s2,s3,num)//是替换s1中的s2字符为s3,个数为num,如果为-1就是全局替换 Split(s1,s2)//是将s1中的s2去除并分成好几个子串 tolower(s)//小写toupper//大写 len(s)//长度 在GO中%v可以代表一切格式 json处理 在GO中可以将结构体内的数据转换为json数据,但是结构体内的变量名首字母大写,如果在json数据中不想让他大写,可以加上‘json:“小写内容”’ 转换为json的方法为json.Marshal(a)//a是转换的结构体;转换中时加入error来接收错误类型,示例:buf,err:=json.Marshal(a);然后判断err是否为空;json中还有一个方法是buf,err:=marshalindent(struct st,s2,s3)//是规定json输出时的格式s2是输出st每行数据的末尾符号,s3是每行数据的开头数据 最后输出的时候需要将json数据转换为string类型,否则会输出一串数,具体如下fmt.Printf(string(buf)) 也可以定义一个相同的结构体变量,用json.Unmarshal(buf json,&b)其中b是结构体数据需要对其取地址& 时间处理 在GO中最常用的是time.now()来获取当前时间,或者可以用time.date()去构造一个时间示例:time.date(year,month,day,hour,minute,second,time.UTC)可以用t.format(“2006-01-02 15:04:05”)来格式化一下时间;t1.sub(t2)来获取时间段;now.unix()来获取时间戳 可以用strconv.parsefloat(s1,num1,num2)来获取s1中的数字