Go特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态编译
- 快速编译
- 跨平台
- 垃圾回收
入门
基础语法
-
- 运行 go run main.go
-
- 编译 go build main.go ./main来运行
- 3.变量
- 变量 var a=自动推导 或 var b,c int = 1,2来指定
- f:=value
- 4.常量
- const s=
- 5.if else -`package main
import "fmt"
func main() {
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
- 6.for
- 7.switch
- 8.数组 var a [5] int
- 9.切片s:=make([]string,3)
- s.append(s,'e','f')
- fmt.Println(s[1:])像python
- 10.map m:=make(map[string]int)
- r,ok:=m["unknow"] //0,false判断有没有存在这个键值对
-
- range 遍历 nums:=[]int{2,3,4} for i,m :=range nums
.....
[16] 字符串格式化
首先,最常用的是 Println() ,它的作用是打印变量并换行
Go 中也是有 Printf() 的,与 C 中的相比更加智能,你可以用 %v 来自动判断类型,而无需纠结整型用 %d ,实行用 %f 之类的
使用 %+v 可以打印详细信息,而 %#v 则可以更加详细
保留位数的浮点数与 C 中的做法相同
[17] JSON 处理
Go 中的 JSON 处理极为方便,对结构体使用 json.Marshal() 函数就能自动序列化(不要忘记首字母大写)
序列化后得到一个 byte 数组,如果要打印的话需要转换为 string 类型
正常序列化之后得到的都是首字母大写的,可以在结构体处为 JSON 格式加一个 tag
序列化的 JSON 可以使用 json.Unmarshal() 来解析到一个空的变量里面
js
package main
import ( "encoding/json" "fmt" )
type userInfo struct {
Name string
Age int json:"age"
Hobby []string
}
func main() {
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
if err != nil {
panic(err)
}
fmt.Println(buf) // [123 34 78 97...]
fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}
buf, err = json.MarshalIndent(a, "", "\t")
if err != nil {
panic(err)
}
fmt.Println(string(buf))
var b userInfo
err = json.Unmarshal(buf, &b)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}
[18] 时间处理
使用 time.Now() 可以快速获取当前时间
也可以用 time.Date() 去构造一个带时区的时间,有很多方法可以使用获取年月日时分秒
可以使用 Sub() 方法得到时间段,时间段又可以使用方法去得到它有多少小时,多少分钟,多少秒
使用 Format() 方法去格式化时间,不像其他编程语言使用诸如 yyyy-M-d 之类的标识符,Go 是以一个特殊的时刻(2006 年 1 月 2 日 下午 3 点 4 分 5 秒,这个时刻是写在包里面的)为例子,来理解你想表达时间的格式
同样地,使用 Parse() 并提供这个时刻的示例,可以解析你写成字符串的时间
你可以使用 now.Unix() 来获取当前的 Unix 时间戳
[19] 数字解析
使用 strconv 包中的 ParseFloat() 和 ParseInt() 来快速解析字符串
如果确定是 10 进制,也可以使用 Atoi() 来快速转换成数字
同样的,可以使用 Itoa() 来把数字转换为字符串
[20] 进程信息
使用 os.Args 来获取执行时获取的一些命令行参数
使用 os.Getenv() 与 os.Setenv() 来获取与写入环境变量
使用 exec.Command() 来启动子进程并获取其输入输出