常见类型
学习到了go的类型,我第一印象是go的类型怎么这么多?光整数就有13种。所以尽量就分类总结下:
大类 | 小类 |
---|---|
int | int int8 int16 int32 rune int64 |
unit | uint uintptr uint8 byte uint16 uint32 uint64 |
float | float32 float64 |
complex | complex64 complex128 |
bool | bool |
string | string |
error | error |
常见类型就是7种,其中int和uint以及uintptr是机器相关的,不同位数的机器长度不一样。byte就是unit8, rune就是int32。
类型定义
C语言有#typedef预编译指令用于给类型取别名,go也保留了这个语法。我迫不及待要试一试了,话说目前这些语言中,我最爱go。在编程语言这方面,我比较喜新厌旧,说不定未来我又喜欢上一门新的语言了。好了,闲话不说了,试试类型别名,不过Go的规范是类型名首字母要大写:
package main
import "fmt"
type Natural rune
func main() {
var x Natural = 19
fmt.Println(x * x * x)
}
运行一下:
PS F:\learn\go\demo3> go build .\natural.go
PS F:\learn\go\demo3> .\natural.exe
6859
但是这个类型声明有个陷阱,其实本质上不是别名,而是不同类型了。我举个例子:
package main
import "fmt"
type Natural rune
type Integer rune
func main() {
var x Natural = 19
var y Integer = 19
fmt.Println(x == y)
}
这段代码是会编译报错的,报错信息如下:
.\types.go:11:19: invalid operation: x == y (mismatched types Natural and Integer)
这两个东西,不再是rune了。不过也不要灰心,转一下类型就可以了,如下:
package main
import "fmt"
type Natural rune
type Integer rune
func main() {
var x Natural = 19
var y Integer = 19
fmt.Println(x == Natural(y))
}
结构体
除了上述的方式外,还可以定义结构体。回想C语言,除了结构体还有共用体之类的。C语言的共用体,说实话,我学过,但是从来没用过,所以go语言没有共同体,我觉得是合理的,不实用的语法是应该剔除。对于知识,我都是迫不及待尝鲜,马上写代码:
package main
import "fmt"
type Book struct {
name string
isbn string
price float32
}
func main() {
var book Book
book.price = 91.1
book.name = "王者荣耀上分秘籍"
book.isbn = "123456"
fmt.Println(book)
}
结果是自动格式化输出啊,这点不比java和python舒服?
{王者荣耀上分秘籍 123456 91.1}