数据类型
1.基础类型(basic type)
2.聚合类型(aggregate type)
3.引用类型(reference type)
4.接口类型(interface type)
本篇文章介绍 基础类型
整数
go 同时具备有符号整数和无符号整数
有符号整数:int8、int16、int32、int64
无符号整数:uint8、uint16、uint32、uint64
此外还有两种类型int、uint
类型不同时需要显示转化
例:
var apples int32 = 1
var oranges int16 = 2
var compote int = apples + oranges //会报类型不匹配
改:
var compote = int(apples) + int(oranges)
浮点数
go 具有两种大小的浮点数 float32 和 float64
复数
go 具有两种大小的复数 complex64 和 complex128 ,二者分别由 float32 和 float64 构成。内置的
complex 函数根据给定的实部和虚部创建复数,而内置的 real 函数和 imag 函数分别提取实部和虚部。
例:
var x complex128 = complex(1, 2) // 1+2i
var y complex128 = complex(3, 4) // 3+4i
fmt.Println(x*y) // "(-5+10i)"
fmt.Println(real(x*y)) // "-5"
fmt.Println(imag(x*y)) // "10"
bool
if 和 for 语句里的条件就是布尔值
例:
func btoi(b bool) int {
if b {
return 1
}
return 0
}
字符串
字符串是不可变的字节序列,它可以包含任意数据,包括0值字节
内置的 len 函数返回字符串的字节数。
例:
s := "hello,world"
fmt.Println(len(s)) // "12"
切片:
fmt.Println(s[0:5]) // "hello" 与python基本一致
4个标准包操作对字符串操作
1. strings // 用于搜索、替换、比较、切分、连接字符串
2. bytes // 用于操作字节 slice
3. strconv // 把字符串转换为布尔值、整数、浮点数,另外有为字符串添加/去除引号的函数
4. unicode // 判别字符串值特性的函数,如:IsDigit、IsLetter、IsUpper等
例1:函数向表示十进制非负整数的字符串中插入逗号
package main
import "fmt"
func comma(s string) string {
n := len(s)
if n <= 3 {
return s
}
return comma(s[:n-3]) + "," + s[n-3:] //递归调用
}
func main() {
//comma("12345")
fmt.Println(comma("123456789"))
}
字符串和字节slice相互转换
s := "abc"
b := []byte(s)
s2 := string(b)
// 概念上,[]byte(s)转换操作会分配新的字节数组,拷贝填入s含有的字节,并生成一个slice引用,指向整个数组。
整数转换成字符串
例:
x := 123
y := fmt.Sprintf("%d", x) // 第一种方法
fmt.Println(y, strconv.Itoa(x)) // 第二种方法
常量
所有常量本质上都属于基本类型:布尔型、字符串、数字
const p = 3
常量生成器 iota
iota 从0开始取值,逐项加1
例:
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)