这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
今天主要学习了go的基础语言和工程实践。对go的内容做一下总结吧!!!
什么是go语言
1.高性能,高并发
2.语法简单,学习曲线平缓
3.丰富的标准库
4.完善的工具链
5.静态链接
6.快速编译
7.跨平台
8.垃圾回收
go 语言近几年热度不断上升,go语言在性能上很快,类似于c++与java,go语言的创新是goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。
go语言
go语言的语法与其他语言类似,如果有其他多种语言的基础的话,以下几个简单的例子便可以轻松入门
一、变量
var a = "initial" 字符串
var b, c int = 1, 2 整型
var d = true 布尔型
var e float64 浮点型
f := float32(e)
g := a + "foo"
const s string = "constant"
const h = 500000000
const i = 3e20 / h
二、语法
1. if-else 比c++少了条件的括号
if 判断式 {
fmt.Println()
}else{
fmt.Println()
}
2. for 循环 依旧是少括号
for n :=0; n < 5;n++{
fmt.Println()
}
3. switch 还是少括号
a := 2
switch a{
case 1:
fmt.Println()
case 2:
fmt.Println()
default:
fmt.Println()
}
4. 数组 类型写在了后面
var a [5]int
b := [5]int{1,2,3,4,5}
5. 切片 和python的切片类似
s := make([]string, 3)
s[0] = 'a'
s[1] = 'b'
s[2] = 'c'
s = append(s, "d") [a b c d]
s = append(s, "e", "f") [a b c d e f]
c := make([]string, len(s))
copy(c, s) [a b c d e f]
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]
6. map 像是python中的字典
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m) // map[one:1 two:2]
fmt.Println(len(m)) // 2
fmt.Println(m["one"]) // 1
7.range 和python类似
nums := []int{2, 3, 4}
sum := 0
for i, num := range nums {
sum += num
if num == 2 {
fmt.Println("index:", i, "num:", num) // 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) // b 8; a A
}
for k := range m {
fmt.Println("key", k) // key a; key b
}
8. 函数
func add(a int, b int) int {
return a + b
}
9. 指针
func add2ptr(n *int) {
*n += 2
}
10.结构体
type user struct {
name string
password string
}
三、一些用法
1. 错误处理 err
go语言的错误处理相较于java的异常,可以准确的定位到具体的函数,使用时只需要在返回值后方加入一个error
2. 字符串操作
go语言的字符串操作存放于strings库中,相较于其他语言功能大同小异
3. 字符串格式化
go语言的printf类似于c,但go可以用%v轻松打印出任意类型的变量,%+v打印详细结果,%#v打印详细结果
4. JSON处理
存放于encoding/json中,可以使用JSON.marshaler去直接序列化一个结构体,变成JSON字符串,也可以使用JSON.unmarshaler去反序列化
5. 时间处理
存放于time库中 time.now()获取当前时间,time.data()构造时间 .UNIX获取时间戳
6. 数字解析
字符串和数字类型之间的转换都在strconv下 常用ParseFloat,ParseInt解析字符串 Atoi把10进制字符串转换为数字,itoA把数字转换为字符串。
7. 进程信息
os库中存放了一些方法,可用来读取相关信息
Go语言的特性缺失问题(自学)
1.go语言不支持函数重载和操作符的重载,也没有类和类的继承
2.不支持静态变量
3.没有主要的框架