值类型:直接存储值,一般在栈中分配内存
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类型之外的整数类型)
你需要显示声明(除非右值是一个已经明确了类型的变量或者常量)
例子1:
var a uint = 1
b := a
float系列
float32,float64
float32的精度在6位左右
float64的精度在15位左右
开发中尽量使用float64,因为它的精度更高,得出的结果更准确。
bool
bool只有两种值:true,false
另外比较运算符在比较后会返回一个bool值。
例1:
return a < b
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")
strings.Count("TomLisa", "o")
strings.HasPrefix("TomLisa", "To")
strings.HasSuffix("TomLisa", "Lisa")
strings.Index("TomLisa", "omL")
strings.Join([]string{"a", "b"}, "-")
strings.Repeat("a", 5)
strings.Replace("fooo", "o", "0", -1)
strings.Replace("fooo", "o", "0", 2)
strings.Split("a-b-c", "-")
strings.ToLower("WE")
strings.ToUpper("we")
数组
数组中的内存是连续的
数组的长度是固定的。
下面是数组的声明
例1:
var n [3]int
例2:
var n = [3]int{1, 2}
n := [...]int{1, 2, 3}
数组的遍历:
例1:
var x = [...]int{1, 2, 3, 4, 5}
for i, j := range x {
}
结构体
结构体中的内存是连续的
结构体都与type连用。
例1:
type person struct {
name string
age int
}
var p person
var p1 person
p1.name = "Tom"
p1.age = 18
p2 := person{"Lisa", 18}