[Day 13] -『 GO语言学习笔记』- 核心型别(I)

以下笔记摘录自『 The Go Workshop 』。

前言

Go语言是强型别(strongly typed)语言,意即所有的资料都必须属於某个型别,而且这个型别是固定的、无法变更的。对资料可做或不可做的事,都取决於资料的型别。

像Python, Javascript等语言其变数可以随意变换型别,所以被称为弱型别(weakly typed)语言。另一种分法是『静态型别』(statically typed)与『动态型别』(dynamically typed):前者在编译时检查型别,後者则在执行阶段才检查型别。

型别定义

  • 能储存何种资料
  • 能对他进行何种操作
  • 操作会对资料做什麽
  • 会占用多少记忆体

布林值(true/false)

真与伪这两个逻辑值都属於布林(boolean),Go语言写成bool。当程序码需要非黑即白的判断式时就可以使用。

For example,

package main

import "fmt"

func main() {
	fmt.Println(10 > 5)
	fmt.Println(10 == 5)
}
// Output
true
false

数字

Go语言中有两种数:整数(integers)和浮点数(floating-point numbers)。

整数

分成两种,可以储存负值的型别称为有号整数(signed number),无法存负值的型别称为无号整数(unsigned number),每一种可储存的最小和最大值都取决於型别的内部储存容量有几个位元组。

  • 无号整数

https://ithelp.ithome.com.tw/upload/images/20210927/20140071y10qnrWmyQ.png

  • 带号整数

https://ithelp.ithome.com.tw/upload/images/20210927/20140071Zc22ryG9NT.png
(图片参考)

byte是unit8的别称,rune是unit32的别称

特殊的整数型别,unit - 无号32或64位元整数,int - 有号32或64位元整数。长度是32还是64取决元在哪一种位元系统编译程序。在64位元系统上,int型别和int64的整数范围就会完全一样,但Go将他们视为两种不同的型别。


int能完成大部分的工作,只有当int会造成问题时,才考虑其他型别。与int有关的问题,多半都跟记忆体用量有关。
假设某个应用程序把记忆体耗光了,因为宣告了大量整数,但这些数字永远是正整数、也未超过255,此时可能的解法是把型别从int改成unit8,这样可以把每个数字占用的记忆体从64位元小少到8位元


一开始使用int来处理整数是OK的,等到它造成性能问题时再来考虑更换型别。

浮点数

Go语言有两种浮点数型别,float32:用32个位元来储存数值,与float64:用64个位元来储存数值,float64容量较大,精确度也较高,需要在精确度与储存空间做出取舍。

package main

import "fmt"

func main() {
	var a int = 100
	var b float32 = 100
	var c float64 = 100
	fmt.Println((a / 3) * 3)
	fmt.Println((b / 3) * 3)
	fmt.Println((c / 3) * 3)
}
// Output
33
33.333332
33.333333333333336

浮点数得实用性在於,若有一直重复乘除的动作,误差可能会因此逐渐放大,所以除非想进一步节省记忆体用量,否则一般建立浮点数时,首选都是floart64。

package main

import "fmt"

func main() {
	var a int = 100
	var b float32 = 100
	var c float64 = 100
	fmt.Println((a / 3) * 3)
	fmt.Println((b / 3) * 3)
	fmt.Println((c / 3) * 3)
}
// Output
99
100
100

<<:  D13/ 怎麽做翻卡片的动画 - Animation Part 2 & GraphicsLayer

>>:  Day 14:vim-plug

[Day 10] SRE - ON-CALL

ON-CALL 今天为大家介绍ON-CALL常见的须注意之事项 建立心态 我为人人,人人为我,今天你...

Day-28 轻松使用Excel生成乱数并排名

今日练习档 ԅ( ¯་། ¯ԅ) 今日的内容是要带大家认识如何使用Excel判断最大值和最小值,以及...

皇城大内宣: 让老板有感的资安简报学(向上)

在讲这主题前,我们先来回顾一下,如果我们要对老板谈资安,中间的认知gap是什麽? 对於资安认知,我相...

2.建立unity专案、页面简介、建立角色

建立专案 1.点击新专案来建立一个新专案:D 2.选择要使用的样板,这次要做2DRPG雏形,因此选择...

系统分析师的养成之路—案例分享(3)

其实写前一篇的案例主要是提醒後进们在处理收到的需求时,真的需要谨慎地确认,否则就会像我一样面临几乎打...