Go语言基础
这是我参加「第五届青训营」伴学笔记创作活动的第1天
简介
Go语言特点
- 高性能、高并发
- 语法简单、学习曲线平滑
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
Why
- python性能的问题
- C++在web上不方便的问题
入门
开发环境
-
安装Golang
- 配置GOROOT
- 配置GOPATH
-
安装Goland(收费、可以有学生版本)
- 配置上述
- 配置代理
基础语法
-
Hello World
fmt是Go语言的一个标准包package main import "fmt" func main() { fmp.Println("hello world!") } -
变量,静态语言,每一个变量都要有它的类型,但是可以通过冒号等号来推断类型
- var声明
var name type = value - 冒号等于
x := 123
- var声明
-
分支语句
- if - else都要写大括号,每一个后面都要
- case可以不加break,满足一个条件就过去了
-
循环语句
- 只有 for 没有 while,但是 for 支持了想要的 while 的语法
- 有增强 for
for k, v := range(mp)直接遍历 k 和 v
-
数组
var name [size]type
-
切片
s = make([]string, 3)- append 是有返回值的,需要迭代赋值
-
map
m = make(map[key type]value type)- 赋值加入
- delete删除
- 完全无序的
-
结构体
type name struct{prop1 type prop2 type}- 结构体方法可以理解为成员函数,只有结构体的对象可以调用
func (u user) checkPwd(password string) bool
-
错误异常处理
- error类型
- 会有异常的方法,都必须返回出来,要么用匿名变量舍弃,要么处理
- 方便操作
-
格式化
- 可以用%v来代表任意类型的变量,而不需要像C语言中的%d、%s之类的
- %+v可以显示详细的结构
- %#v比上述更为详细
-
JSON
- 对于结构体中的变量,我们只需要把变量首字母变成大写,那么它就可以通过
json.Marshal()序列化 - 序列化后的可以通过
json.Unmarshal()反序列化
- 对于结构体中的变量,我们只需要把变量首字母变成大写,那么它就可以通过
-
时间
-
可以通过time包处理时间
package main import( "fmt" "time" ) func main() { now := time.Now() // 获取现在的时间 t1 := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC) t2 := time.Date(2022, 3, 27, 2, 230, 36, 0, time.UTC) diff := t2.Sub(t1) // 获取两个时间的差值 x := time.Unix() // 获取当前时间戳 }
-
-
数字解析
strconv.Atoi表示任意实体转换为数字strconv.Itoa表示任意数字转换为实体
实战
猜谜游戏
程序会生成一个 0 - 100 之间的整数,提示玩家进行猜测,每一次猜测给出反馈结果,如果猜测的数比真实数字小,则给予
Your guess is smaller than the secret number. Please try again,如果猜测的数比真实数字大,则给予Your guess is bigger than the secret number. Please try again,如果猜测正确,给予Correct, you Legend!,程序结束
-
生成一个随机数
- 为了防止生成伪随机数,需要一个随机种子,我们用当前时间的时间戳来生成
rand.Intn(n)会生成一个 之间的随机数,我们需要最大的是100,因此设置为101即可
-
进行猜测和判断
>p> 1. 分支语句的实现
- 结果反馈
package day1
import (
"fmt"
"math/rand"
"time"
)
func Guess() {
rand.Seed(time.Now().Unix())
x := rand.Intn(101)
var now int
fmt.Println("Please input your guess")
for now != x {
_, _ = fmt.Scan(&now)
fmt.Printf("Your guess is %d\n", now)
if now > x {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if now < x {
fmt.Println("Your guess is smaller than the secret number. Please try again")
}
}
fmt.Println("Correct, you Legend!")
}