1.为什么用go:
- 高性能,高并发
- 语法简单,学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接(静态编译)
- 快速编译;跨平台
- 垃圾回收(无需考虑内存的分布和释放)
2.开发环境
- 安装go,进行环境配置
- 开发环境: 可以选择vscode(需要装配相关插件)或安装Golang
3.基础语法
3.0 Hello,World!
package main //程序的入口
import (
"fmt" //格式化输入输出,导入fmt包
)
func main() {
fmt.Println("hello world") //主函数
}
- Println输出时,会自动换行
3.1 变量和常量
- c语言基础类型都有,字符串是内置变量
- 变量赋值,用
:=,如a := 7 - 变量声明用var,可以无需说明变量类型,如有需要加在变量名后,如
var a int
字符串定义
var a := "initial"- 这里注意字符串是Go的内置类型,可以直接用
+进行拼接 g := a + "hello"
整型数据
Go语言支持一次定义多个变量,并同时赋值
var a,b int = 1,2
布尔型定义
Go支持布尔类型定义
var d = true
浮点数定义
var e float64
go语言支持科学计数法
f := float32(e)
常量无需声明类型,
- GO中的常量并没有确定类型,类型会在上下文自行判断
- 常量只需把var改成const即可
const s string = "constant" const h = 500000000 const i = 3e20 / h
格式化输入输出
- Printf输出时,只需要用%v进行,不需要区分%d,%s
- 打印结构体时,用%+v,打印结构体字段和值;
- 用%#v,打印整个结构体包括名字
- 打印浮点数和c语言一样,用%f
3.2 if...else条件语句
- 规则和c语言不同的地方:
- go中,if的判断条件无需加括号
- if语句必须用
{},与c语言不同的是条件语句不能和大括号里的语句在同一排
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
3.3 循环
- go语言中只有for循环,且循环条件无需加括号,其余同c语言相同
- continue和break用法和c语言相同
for j := 7; j < 9; j++ {
fmt.Println(j)
}
3.4 switch分支语句
和c语言的不同点:
- case语句中无需break,便可自动跳出
- 条件可以在case后加
- switch后加条件不用加括号
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
3.5 go语言数组
- 切片与python类似,但要注意需要用len找到数组大小
- append:对数组扩容并赋值
- map(python里的数组)
- map映射:一般用make进行自变量映射,同时随机输出
- range:快速遍历,返回数组的内容及其下标
3.6 go函数
- 规则与c语言大同小异,要注意的是传入参数的类型应放在参数名之后
- 函数里对变量本身进行运算,需传入指针变量
func add2ptr(n *int) {
*n += 2
}
3.7 指针
- 指针的定义:和c语言相同(*)
- 和c语言不同,Go中指针的唯一用途就是对传入参数进行修改
3.8 错误处理
在函数的返回类型里加上error,用if...else进行判断,若error存在便需要进行异常处理,否则可能会出现空指针等错误。
3.9 时间处理
- 常用的有time.Now,time.Data
- 用.Year .month .day等输出均可
3.10 数字解析
- ParseInt,ParesFloat(解析的字符串,进制,输出位数);
- 可以灵活运用atoi和itoa:字符串和数组替换
4 引用参考
- 字节青训营Go语法基础课