Go语言编程基础:值类型数据类型

191 阅读3分钟
值类型:直接存储值,一般在栈中分配内存
int系列

有符号int系列:
    int8, int16, int32, int64, int
    
无符号int系列:
    uint8, uint16, uint32, uint64, uint, uintptr
    
int,uint,uintptr具体多大,要看编译器给多大,不过一般情况下int,uint都是
32位的,uintptr的大小足够装下一个指针。
另外byte类型是int8类型的同义词,rune类型是int32类型的同义词。

需要注意的是它们两两之间不算作一个类型。这意味着它们之间不能直接运算。

除此之外,如果你想声明一个uint或者int8之类的类型(除int类型之外的整数类型)
你需要显示声明(除非右值是一个已经明确了类型的变量或者常量)
例子1var a uint = 1 //如果不加上uint,默认声明的类型是int型
    b := a //a已经确认是uint类型,此时可以隐式声明。
float系列

float32,float64
float32的精度在6位左右
float64的精度在15位左右

开发中尽量使用float64,因为它的精度更高,得出的结果更准确。
bool

bool只有两种值:truefalse

另外比较运算符在比较后会返回一个bool值。
例1return a < b //如果a < b将返回true,如果a >= b将返回false
string

字符串一旦赋值了,字符串就不能修改了。在 Go 中字符串是不可变的。
Go中字符本质是一个整数,直接输出会得到对应的UTF-8编码的码值。

字符串有两种表达形式:双引号,反引号
例1:
    str := "Hello \n World" //双引号中可识别转义字符
    str1 := "hello" + " World" //可以用+号连接多个字符串2:
    str := `
    package main
    import "fmt"
    func main(){
        fmt.Println("Hello")
    }
    `//不支持任何转义字符,里面写什么就显示什么(包括换行和特殊字符)
    
Go中有strings包,里面有各种处理字符串的方法。
    strings.Contains("TomLisa", "omL")//看oml是否被包含 
    strings.Count("TomLisa", "o")//看"o"出现的次数 
    strings.HasPrefix("TomLisa", "To")//看是否以"To"开头 
    strings.HasSuffix("TomLisa", "Lisa")//看是否以"Lisa"结尾 
    strings.Index("TomLisa", "omL")//看oml的索引 
    strings.Join([]string{"a", "b"}, "-")//切片中的元素通过-连接 
    strings.Repeat("a", 5)//把a重复5次 
    strings.Replace("fooo", "o", "0", -1)//字符串里所有o替换为0 
    strings.Replace("fooo", "o", "0", 2)//字符串前两个o替换为0 
    strings.Split("a-b-c", "-")//分割为[a b c] 
    strings.ToLower("WE")//转为小写 
    strings.ToUpper("we")//转为大写

数组
数组中的内存是连续的
数组的长度是固定的。

下面是数组的声明
例1var n [3]int //声明一个数组n,里面有三个int类型数据,默认值为0.
                 //声明却不初始化,那么必须指明数组的长度2var n = [3]int{1, 2} //声明数组n,里面三个int,前两个值为1,2,其余为0
    n := [...]int{1, 2, 3} //不指名数组长度,长度由初始化元素个数决定
    
数组的遍历:
例1var x = [...]int{1, 2, 3, 4, 5}
    for i, j := range x {
    }//i是下标,j是对应的值。如果不使用下标可以用_代替i
结构体
结构体中的内存是连续的

结构体都与type连用。
例1:
    type person struct {
        name string
        age  int
    }
    var p person //p中的name默认值为"",age默认值为0
    
    var p1 person
    p1.name = "Tom"
    p1.age  = 18
    
    p2 := person{"Lisa", 18}