Go基础语法-1 | 青训营笔记
Go 语言的设计目的是作为 C/C++ 的替代工具,是谷歌内部为了解决 C/C++ 开发中的一些痛点:编译慢、不受控制的依赖、三方库混乱、编程范式繁多(每个人都选择其中一部分特性)、并发编程麻烦、跨平台代码兼容、内存安全、工程开发效率低等等。
目录
- <语言特点>
- <基本类型>
- <整体结构>
- <变量和常量的声明>
语言特点
- 语法简单,易上手,语言新内容少,学习周期短
- 丰富标准库,完善的工具链,非常适合网络服务开发
- 静态编译,编译速度快
- 云原生+跨平台
- 异步线程
- 垃圾回收机制
基本类型
常用的基本类型:bool,int,float,struct,string,slice,map,channel
Golang 更明确的数字类型命名,支持 Unicode,支持常用数据结构,支持八进制、 六进制,以及科学记数法。
标准库 math 定义了各数字类型取值范围。
| 类型 | 长度(字节) | 默认值 | 说明 |
|---|---|---|---|
| bool | 1 | false | |
| byte | 1 | 0 | uint8 |
| rune | 4 | 0 | Unicode Code Point, int32(相当于char[]) |
| int, uint | 4或8 | 0 | 32 或 64 位 |
| int8, uint8 | 1 | 0 | -128 ~ 127, 0 ~ 255,byte是uint8 的别名 |
| int16, uint16 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 |
| int32, uint32 | 4 | 0 | -21亿~ 21亿, 0 ~ 42亿,rune是int32 的别名 |
| int64, uint64 | 8 | 0 | |
| float32 | 4 | 0.0 | |
| float64 | 8 | 0.0 | |
| complex64 | 8 | 复数 | |
| complex128 | 16 | ||
| uintptr | 4或8 | 以存储指针的 uint32 或 uint64 整数 | |
| array | 值类型 | ||
| struct | 值类型 | ||
| string | "" | UTF-8 字符串 | |
| slice(切片) | nil | 引用类型(相当于一个动态窗口,优点是可以直接改变数组中的值) | |
| map | nil | 引用类型 | |
| channel(通道) | nil | 引用类型 | |
| interface(接口) | nil | 接口 | |
| function(函数) | nil | 函数 |
(在golang中nil有几种不同的含义,它代表了pointer, channel, func, interface, map 或者 slice 的zero value。nil值是有类型的,指针的nil值指向0x0)
语句结构
结构大致如下:
-
main方法的包名必须是main
-
单行单句无需
; -
整体大致是:
- 声明所属包名
- 导入包
- 主要内容
- main方法
package main
import ("fmt")
func main() {
fmt.Println("Hello World!")
}
变量的声明
基本语法:go是一个强类型的语言,声明变量必需可以让编译器推断出值的类型
- 直接声明
var a int
var a,b,c,d bool
a = 1
var s string//(默认为"")
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
-
类型推断(i
赋值后自动判断类型
var d = true
var a,b,c = "a",false,322
-
类型推断(ii
进一步简化,改用
:=只需要写变量名,直接赋值后自动推断类型
d := true
s := "hello world"
a,b,c := "a",false,322
(Tip: 如果在相同的代码块中,我们不可以再次对于相同名称的变量使用初始化声明)
常量的声明
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
const
常量的声明只需要把var换为const
Go语言中的map基础类型
const d = 2525
const d int = 1324
const a,b,c = "a",false,322
常量还可以用作枚举
const (
Unknown = 0
Female = 1
Male = 2
b = "abc"
a = len(b)
)
其中只可以使用内置函数
iota
特殊的常量,可以认为是一个可以被编译器修改的常量。
iota在 const 关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
iota 可以被用作枚举值:
const (
a = iota //0
b //1
c //2
)
实例:
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
}
//结果:0 1 2 ha ha 100 100 7 8
const (
i=1<<iota
j=3<<iota
k
l
)
//i= 1
//j= 6
//k= 12
//l= 24
运算符除指针->和三目运算符部分外其他与c完全一致,**为乘方