go语言基础语法学习 基本数据类型 变量定义声明 运算符 条件控制语句 方法函数...
当然可以,通过对比 Go 和 JavaScript 的数据类型,我们可以更好地理解它们的差异和各自的使用场景。以下是 Go 和 JavaScript 数据类型的对比,以及每种类型的使用场景。
Go 变量
使用方式
- 第一种: 指定变量类型, 声明后若不赋值, 使用默认值.
func main(){
var i int
fmt.Println("i=",i)
}
- 第二种: 根据值自行判定变量类型(
类型推导
)
var num = 10.01
fmt.Println("num=",num)
- 第三种: 省略声明的关键字(
var
)(简洁写法
)
name := "张三"
- 第四种: 多变量声明
n1,n2,n3 := 100, 200, 300
var(
n1 = 100
n2 = 200
n3 = 300
)
注意事项
- 数据类型一致的值可以进行修改,但不能赋不同类型的值
var i int = 10 i = 30 i = 50 i = 1.2 ❌ : 不能改变数据类型
- go 的变量如果没有初始化赋值, 编译器会使用默认值, 比如
int : 0
,string: ""
float:0
基本数据类型对比
Go 数据类型 | JavaScript 数据类型 | 描述与使用场景 |
---|---|---|
bool | Boolean | 用于逻辑判断,例如条件语句和循环。 Go: var a bool = true JS: var a = true |
int, int8, int16, int32, int64 | Number | 整数,用于计数和索引。 Go: var a int = 100 JS: var a = 100 |
uint, uint8 (byte), uint16, uint32, uint64, uintptr | Number | 无符号整数,通常用于需要非负数的情况,如位运算和索引。 Go: var a uint = 100 JS: var a = 100 |
float32, float64 | Number | 浮点数,用于表示小数或需要高精度的计算。 Go: var a float32 = 3.14 JS: var a = 3.14 |
string | String | 字符串,用于文本数据。 Go: var a string = "hello" JS: var a = "hello" |
- | Symbol | JavaScript 的独特类型,用于创建独一无二的标识符,通常用于对象属性。 JS: var sym = Symbol("id") |
- | undefined | 表示变量未初始化。 JS: var a; console.log(a); // undefined |
- | null | 表示空值。 JS: var a = null |
complex64, complex128 | - | 复数,包含实部和虚部,通常用于高级数学计算。 Go: var a complex64 = 1 2i |
复合类型对比
Go 数据类型 | JavaScript 数据类型 | 描述与使用场景 |
---|---|---|
array | Array | 有固定长度的同类型元素集合,用于存储多个相同类型的值。 Go: var arr [5]int = [5]int{1, 2, 3, 4, 5} JS: var arr = [1, 2, 3, 4, 5] |
slice | Array | 动态长度的数组,用于需要频繁修改大小的集合。 Go: var s []int = []int{1, 2, 3} JS: var s = [1, 2, 3] |
map | Object | 键值对集合,用于快速查找和存储数据。 Go: var m map[string]int = map[string]int{"one": 1, "two": 2} JS: var m = {"one": 1, "two": 2} |
struct | Object | 自定义类型,包含不同类型的字段,用于描述复杂数据结构。 Go: type Person struct { Name string; Age int } JS: var person = { name: "Alice", age: 30 } |
interface | - | 定义一组方法的集合,具体实现由其他类型提供,用于实现多态。 Go: type Speaker interface { Speak() string } |
chan | - | 用于 goroutine 之间的通信和同步。 Go: var ch chan int = make(chan int) |
function | Function | 可执行代码块,用于封装和复用代码逻辑。 Go: func add(a int, b int) int { return a b } JS: function add(a, b) { return a b } |
使用场景
布尔类型
- Go 和 JavaScript:用于条件判断和循环控制。
- Go:
if a == true { ... }
- JS:
if (a === true) { ... }
- Go:
数字类型
- Go:明确区分不同大小和有无符号的整数,适用于需要高效内存管理和高性能计算的场景。
- 使用场景:计数器、索引、位运算。
- JavaScript:使用单一的
Number
类型,适用于一般的计算和表示。- 使用场景:计数器、计算、数据处理。
字符串类型
- Go 和 JavaScript:用于文本处理和字符串操作。
- Go:
var name string = "Alice"
- JS:
var name = "Alice"
- Go:
数组和切片
- Go:
- 数组:适用于固定长度的集合。
- 切片:适用于动态长度的集合和需要高效地添加或删除元素的情况。
- JavaScript:
Array
既可以表示固定长度,也可以动态调整,灵活性较高。- 使用场景:数据存储、列表、栈、队列。
结构体和对象
- Go:使用结构体来定义自定义类型,适用于描述复杂的数据结构。
- 使用场景:描述实体(如用户、订单)、传递数据。
- JavaScript:使用对象来定义键值对集合,灵活且易用。
- 使用场景:描述实体、配置选项、数据传递。
映射和对象
- Go:使用
map
实现键值对集合,适用于快速查找和存储数据。- 使用场景:字典、缓存、配置项。
- JavaScript:使用对象或
Map
实现键值对集合。- 使用场景:字典、缓存、配置项。
函数
- Go 和 JavaScript:用于封装和复用代码逻辑。
- Go:
func add(a int, b int) int { return a b }
- JS:
function add(a, b) { return a b }
- Go:
通道
- Go:用于 goroutine 之间的通信和同步,适用于并发编程。
- 使用场景:并发任务协调、数据传递。
通过对比 Go 和 JavaScript 的数据类型及其使用场景可以更好地理解它们各自的优势和适用场景