这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、重点内容:
-
Go 语言学习背景介绍
-
Go 语言基础语言详细讲解
- 开发环境
- 基础语法
- 标准库
二、详细知识点介绍:
-
Go特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
-
使用Go语言的公司:字节跳动;腾讯;美团;弟弟;百度;谷歌;脸书;七牛云;哔哩哔哩;pingcap;
-
字节跳动为什么全面拥抱 Go 语言
- 最初使用的 Python,由于性能问题换成了 Go
- C++ 不太适合在线 Web 业务
- 早期团队非 Java 背景
- 性能比较好
- 部署简单、学习成本低
- 内部 RPC 和 HTTP 框架的推广
-
老师迅速过了一遍基础语法,但是我对于go语法还是不熟悉,看了网上的课,做了一些语法笔记
-
hello
- add configuration: goland Add Configurations 配置 - 新Sir - 博客园 (cnblogs.com)
package程序的入口包;import导入包- 终端:
go run 文件地址:运行 ;go build 文件地址:编译再运行 fmt包 输入输出字符串,格式化字符串。fmt.PrintLnPrint意为打印;Ln意为换行- 如果遇到报错“package …… is not in GOROOT” 解决方法:
go env查看环境,发现GO111MODULE是空的,要把它改成off:go env -w GO111MODULE=off - 注释:单行:
/ code /多行:/* code */
- var
- 变量声明
var 变量名字 变量类型var:声明变量关键字 - 把类型放在变量名字之后的好处:避免含糊不清的声明。比如指针类型。在C语言中
int *a,bb不是指针,在go中var a,b *int即可都是指针 - 利用括号可以批量定义变量。
var(
name string
age int
addr string
)
- 如果没有给变量赋初始值,变量会有默认值: 整型:0 ;浮点型:0.0 ;字符串: 空字符串 ; 布尔型: false ;切片、函数、指针: nil
- 声明方法2:
name := "Jiao"Go语言的推导声明写法,编译器会根据右侧类型判断左值类型。 fmt.Printf("%T", a)打印a的类型。fmt.Printf("%p",&name)内存地址b,a=a,b交换a,b_匿名变量,任何赋给这个标识符的值都会被抛弃,eg:
func test() (int,int){
return 100,200
}
func main(){
a,_:=test() //抛弃200,a是100
_,b:=test() //抛弃100,b是200
fmt.Print(a,b)
}
- 常量:
const name type = "value1"type可以省略 - iota: 特殊常量。
const(
a=iota //0
b //每新增一行常量将使iota计数一次 b即1
)
- 类型转换:
b:= type(a)整型不能转换为bool类型。
- 运算符
- 算术运算符: + - * / % ++ --
- 关系运算符: == != > < >= <=
- 逻辑运算符:&& || !
- 赋值运算符:= += -= *= = %= <<= >>= &= ^= |=
- 位运算符: & | ^ &^ << >>
| 位运算符 | 表达含义 |
|---|---|
| & | 全一为一,其余为零 |
| | | 全零为零,其余为一 |
| ^ | 不同为一,相同为零 |
| &^ | a&^b,对于b,如果为0,则取a;若为1,取0 |
| << | 乘以2的n次方 |
| >> | 除以2的n次方 |
- 键盘输入输出
fmt.Scanln(&x,&y) //获取一行的输入,只会获取到一行
fmt.Scanf("%d",&x) //可以指定格式;几个数可以空格分隔或换行分隔。
fmt.Scanln(&x,&y) //只会获取一行的输入
- 流程控制
- 顺序结构:从上到下,逐行执行;
- 选择结构:if,switch,select
- 循环结构:for
if后不需要括号,if {} else {} , if {} else if {} else {}
switch不需要break,使用fallthrough可以强制执行后面的case(不管条件是否满足) break终止穿透。
for
break跳出当前循环,continue退出执行下一次循环。
三、引用参考:
- b站【狂神说】Go语言零基础学习视频