语言简介
GO 语言的特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
初始样例————实现一个简单的HTTP静态文件服务器
package main
import (
"net/http"
)
func main(){
http.Handle("/",http.FileServer(http.Dir("."))) //在标准库的http包调用File Server类里面链接一个路由,实现静态文件的访问
http.ListenAndServe(":8080",nil) //监听8080端口并启动服务器
}
基础语法
变量
常见变量
常见的变量类型包括字符串、整数、浮点型、布尔型等。其中字符串是内置类型,可以直接通过“+”号拼接。也可以直接用“=”号比较字符串。Go的变量优先级与Java、C++类似。
var a = "initial"
g := a + "fop"
变量声明
1. var a = "initial" //自动推导变量类型
var b,c int = 1,2 //也可以显式指出变量类型
2. f := float32(e)
常量
把var改为const。const没有确定类型,可根据上下文自动推导类型。
const s string = "constant"
if / else 条件判断
if后面没有括号,单行不能省略大括号,其他与C/C++无异。
for / while 循环
Go只有for循环,没有while和do-while循环。
1. for{
fmt.Println("loop")
break
}
2. for j:=7;j<9;j++ {
fmt.Println(j)
}
Switch分支结构
功能强大,在case里面默认不需要加break语句会自动退出,可以使用任意变量类型,可以取代if/else语句,其他与C/C++一致。
数组
长度固定,不可变。在日常使用中多用长度可变的切片而不是数组。
1 var a[5] int
a[4]=100
2. b:=[5]int{1,2,3,4,5}
fmt.Println(b)
切片
可变长度的数组,可以用make创建。可以任意时刻更改长度,修改后仍可当数组使用。
s:=make([]string,3)
s[0]="a"
s[1]="b"
s[2]="c"
s=append(s,"d")
s=append(s,"e","f")
c:=make([]string,len(s))
copy(c,s)
fmt.Println(s[2:5]) //[c d e]
fmt.Println(s[:5]) //[a b c d e]
fmt.Println(s[2:]) //[c d e f]
map
C/C++中的哈希表。可以用make创建。是完全无序的。遍历时是随机的。
m:=make(map[string]int)
m["one"]=1
m["two"]=2
f,ok:=m["unknow"]
fmt.Println(r,ok) //0 false
delete(m,"one")
range
可以遍历数组和切片。
nums:=[]int{2,3,4}
sum:=0
for i,num:=range nums{
sum+=num
if num==2{
fmt.Println("index:",i,"num:",num)
}
}
函数
几乎所有函数都是返回多个值,第一个值是返回结果,第二个是错误信息。
指针
使用有限,对函数中传入的参数进行修改。
结构体
结构体是带类型字段的集合。
结构体方法
类似于类成员函数。
错误处理
在函数的返回值里添加error变量,方便查看是哪个函数发生错误。
字符串操作
Contrains、Count、Split等函数。
字符串格式化
最常用的方法是fmt.println(),fmt.printf("%v"),%v可以输出任何类型的变量,%+v更加详细的结构,%#v进一步详细,%.2f保留两位小数的浮点数。
JSON 处理
保证字段结构体的每一个字段的第一个字母大写。
时间处理
最常用的方法是time.Now(),可以获取当前时间,格式化方法是time.format("2006-01-02 15:04:05")。
数字解析
方法都在strconv包里,可使用此包的ParseFloat()等函数进行转换。
进程信息
使用fmt.println(os.Args)可以打印当前进程信息。