Day 1 Go语言基础语法
为什么选择go语言:
部署简单,性能比较好,学习成本低,内部RPC和HTTP框架的推广
go的声明:(变量类型后置)
① var 变量名 类型 = 数值
var b, c int = 1, 2
② 变量名 := 类型(值)
f := float32(e)
③const 常量 = 值(类型自动匹配)
const h = 500000000
一些基础语法
1、if else:if后面没有括号,必须后面接大括号,不能直接把if里面的语句同一行
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
2、循环:只有唯一的一种for循环,可以用break或continue来跳出或者继续循环
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
3、switch分支结构:不同于C++,go中的switch不需要break来跳出执行,功能更加强大,可以完全取代if else
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
4、数组:比起数组,go中使用的更多是切片
5、切片slice:make创建切片,append追加元素,拥有像Python一样的切片操作
c := make([]string, len(s))
copy(c, s)
fmt.Println(c) // [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:和C++类似,注意存储遍历是无序的
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
fmt.Println(k, v) // b 8; a A
}
7、函数:实际业务逻辑代码里面几乎所有函数都返回两个值,第一个值是真正的返回结果,第二值是一个错误信息
8、指针:传入参数进行修改(*),调用时加&
9、结构体:可带指针
10、错误处理:单独返回值传递错误信息(return nil 和 errror)
11、字符串操作:函数很多,查询使用
12、字符串格式化:%v打印任意类型的变量,%+v打印详细结果
其实很多用法与C++类似,感悟最深的一点是,一般语言都有异常捕获和异常处理的概念,Go不同,Go在设计的时候没有异常的概念。这仿佛把缺少一个特性当成了Go的特性。但是仔细想,它是有用的。当出现错误的时候,我们没有办法确定到底是哪种错误--磁盘空间不足?IO网络问题?如果是捕获异常可能需要包含所有类型的异常。Go给出了不同的解决方案,将错误当做返回值
这不一定是最优雅的解决方案,但这是最有效的方法鼓励开发者处理错误