字节跳动青训营笔记
Go上手
特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- STL丰富
- 工具链完善
- 静态链接
- 编译快速
- 跨平台
- 垃圾回收
字节跳动全面Go原因
- 最初Python,由于性能原因转Go
- Cpp不太适合在线Web业务
- 早期团队非Java背景
- 性能较好
- 部署简单,学习成本低
- 内部RPC和HTTP框架推广
配置Go碰到的问题
-
按照教程先在Go官网下载Go安装程序,然后VSCode安装Go插件。外部终端中使用go version可以弹出版本信息,但VSCode中内部终端无法识别Go命令,编译运行均失败。网络查找资料发现,将VSCode用管理员权限启动即可,问题解决
-
Go tools安装失败,查找资料发现可能是代理问题(然而我明明挂着梯子),试着照着资料更改代理,重新尝试下载,成功解决。
其他问题
- 使用Git clone课程示例代码时Git报错:Recv failure: Connection was reset,经查资料发现是代理问题,但是关闭代理也未能解决。通过两条Git命令重置代理,再使用cmd命令ipconfig/flushdns配置ip刷新dns缓存之后,再进行clone代码便成功解决
git config --global --unset http.proxygit config --global --unset https.proxy
Go语法基础
整体仍与C、Python等有较多互通之处,熟悉习惯一下格式即可,按照示例代码即查即用感觉会更方便快速一些,故只挑部分内容记录
-
go run xxx.go直接运行该Go程序 -
go build xxx.go编译该Go程序为exe,再配合./直接运行 -
声明变量var,常量const,可以直接赋值而不用指定类型,会自动匹配
-
if后无圆括号,但必须有花括号
-
Go无while,只有for,一样无圆括号,省略内容即为死循环,需要什么条件直接添加即可
-
Switch后变量也无圆括号,且不同于C不需要每个case手动加break,会自动break
-
Switch变量可以是任意类型,也可以留空在case注明,比多个if-else直观
-
var a [5] int``var two [2][3]int声明数组 -
数组不可变长,实际业务使用slice-切片更多(实际就是简易可变长数组)
s := make([]string, 3)
s = append(s, "d")
c := make([]string, len(s))
copy(c, s)
m := make(map[string]int) 声明map
- 用range遍历slice和map更简洁
函数指针等其它Go基础内容将为Go基础语法总结第二部分