Go基本语法

变量声明

声明变量一般使用var关键字,变量声明的标准格式如下:

var name type
// example
var a,b *int

Go 中变量的基本类型有:

bool
string
intint8int16int32int64
uintuint8uint16uint32uint64uintptr
byte // uint8 的别名
rune // int32 的别名 代表一个 Unicode 码
float32float64
complex64complex128

与 C 语言等不同的是,在 Go 中当某个变量被声明后,系统自动对变量所在的内存区域进行初始化,每个变量会初始化其类型的默认值。

可以用批量声明的方式声明变量:

var (
    a int
    b string
    c []float32
)

除了 var 关键字外,还可以使用简短的方式声明变量,注意这种方式只能用在函数内部

名字 := 表达式
// example
i ,j := 1,2

变量初始化

使用var进行变量声明时,系统会自动变量初始化一个值,当然也可以手动为变量赋予一个初始值:

// 变量初始化的标准格式
var hp int = 10

在标准格式基础上还可以更简化,可以用编译器推导类型的格式

var attack = 40

最精简的写法则是短变量声明并初始化,这种初始化方式在开发中较为普遍:

hp := 10

::: warning

:=的左值变量必须是没有定义过的,若定义过将会发生编译错误。

但是在多个短变量声明并赋值时,只要求至少有一个新声明变量出现在左值中,剩下的变量可以重复声明且不会报错:

var (
  hp int
  mp int
)
hp, b := 20, 5  // b为新变量,而hp为重复声明
print(hp, mp, b)  // 20 0 5

:::

多重赋值

在 Go 中实现两个变量值的交换非常简单,利用多重赋值:

a, b := 100, 200
a, b = b, a  // 多重赋值

匿名变量

匿名变量的特点是下划线“_”(“_”本身就是一个特殊的标识符,称为空白标识符)

任何类型的值都可以赋值给一个匿名变量,但是任何赋给这个标识符的值都将被抛弃,因此这些值也无法在后续的代码中被使用。

func GetData() (int, int) {
    return 100, 200
}

func main() {
    a, _ := GetData()
    _, b := GetData()
    fmt.Println(a, b)
}

匿名变量不会分配内存,因而不会占用内存空间。

整数类型

分为有符号整数int和无符号整数uint

int8、int16、int32、int64分别对应各自大小的有符号整数

浮点类型

Go 提供两种精度浮点数float32float64

float32类型的累计计算误差很容易扩散,所以优先使用float64

浮点数在声明时可以只写整数部分或者小数部分:

const a = .718  // 0.718
const b = 1.  // 1

很大的数尽量用科学计数法书写:

const c = 6.02214129e23  // 阿伏伽德罗常数

fmt.Prinf打印时候可以用如%.2f的方式保留几位小数

fmt.Printf("%.2f", f)

复数

有两种复数类型,分别为complex64(32 位实数和虚数)和complex128(64 位实数和虚数)

complex函数构建复数,用realimag返回复数的实部和虚部

var a complex128 = complex(1,2)
var b complex128 = complex(3,4)
fmt.Println(real(a))
fmt.Println(imag(b))

最好使用complex128类型


文章作者: 玄霄
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 玄霄 !
评论
 上一篇
如何让Tor流量走自建的链路 如何让Tor流量走自建的链路
有个问题困扰了我很久,情景如下: 我们使用“嵌入”的方式在Tor启动前运行一段基于stem库的Python代码,用于选择我们自主部署的节点并建立circuit,但在测试中发现,只要将Tor作为proxy并有流量传输时,Tor会自动建立新的
2019-11-10
下一篇 
学习React Hooks 学习React Hooks
1. Hook 的定义React Hooks 设计的目的:加强版函数组件,让函数组件也拥有类组件的功能。 “Hook”的意思是钩子,React Hooks 想要达到的效果就是在尽量使用纯函数,且如需要外部功能或副作用,就用 Hooks 将它
2019-09-26
  目录