(文章持续更新中...有志同道合的人能够一块儿探讨下。整个系列(1~8)准备重写,不过都是很基础的入门笔记,想学到很深刻的东西则不建议阅读...)bash
变量(内存块)是用来存储数据。类型有:整型、浮点型、布尔型、结构体等。Go 语言的每个变量都拥有本身的类型,必须通过声明才能开始用。数据结构
变量声明基本格式:tcp
var 变量名 变量类型
var a int
var b string
var c []float64 // 切片格式
var d func() bool // 声明一个返回值为布尔类型的函数变量
var e struct{
x int
}
批量声明
var (
a int
b string
c []float64
d func() bool
e struct {
x int
}
)
复制代码
变量声明会默认进行初始化函数
var 变量名 类型 = 表达式
var hp int = 100
推导式申明,编译器会尝试根据等号右边的表达式推导 hp 变量的类型
var hp = 100
短变量声明并初始化
hp := 10
conn, err := net.Dial("tcp","127.0.0.1:8080")
匿名变量 用_表示,匿名变量不占用命名空间,不会分配内存。匿名变量不会由于屡次声明而没法使用。
func GetName() (string, string) {
return "wu", "winyh"
}
a, _ := GetData()
_, b := GetData()
// 打印浮点数时,可使用 fmt 包配合动词%f
package main
import (
"fmt"
"math"
)
func main() {
fmt.Printf("%f\n", math.Pi)
fmt.Printf("%.2f\n", math.Pi) // 按默认宽度,2 位精度输出
}
复制代码
Go语言有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有切片、结构体、函数、map、通道(channel)等ui
Go 语言的标准库支持对图片像素进行访问(好强大的样子),而且支持输出各类图片格式,如 JPEG、PNG、GIF 等。spa
Go 语言中不容许将整型强制转换为布尔型,布尔型没法参与数值运算,也没法与其余类型进行转换。 Go 使用类型前置加括号的方式进行类型转换指针
var a int32 = 1047483647
b := int16(a) // 会截断输出
复制代码
切片比原始指针具有更强大的特性。code
栈(Stack)是一种拥有特殊规则的线性表数据结构。后进先出(LIFO) 栈可用于内存分配,栈的分配和回收速度很是快。 变量生命周期生命周期
func calc(a, b int) int {
var c int
c = a * b
var x int
x = c * 10
return x
}
以上默认状况下会将 c 和 x 分配在栈上,这两个变量在 calc() 函数退出时就再也不使用,函数结束时,保存 c 和 x 的栈内存再出栈释放内存,整个分配内存的过程经过栈的分配和回收都会很是迅速。
复制代码
堆和栈分配内存相比,堆适合不可预知大小的内存分配。可是为此付出的代价是分配速度较慢,并且会造成内存碎片。图片
常量是恒定不变的值,没法被修改
const (
pi = 3.141592
e = 2.718281
)
复制代码
Go语言type关键字(类型别名)
type TypeAlias = Type
package main
import (
"fmt"
)
// 将NewInt定义为int类型
type NewInt int
func main() {
// 将a声明为NewInt类型
var a NewInt
// 查看a的类型名
fmt.Printf("a type: %T\n", a)
}
复制代码
TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类型。