Golang基础之数据类型
0、前言
Go语言中拥有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。
1、基础数据类型
1.1、整型
整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64
其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。
类型 | 描述 |
---|---|
uint8 | 无符号 8位整型 (0 到 255) |
uint16 | 无符号 16位整型 (0 到 65535) |
uint32 | 无符号 32位整型 (0 到 4294967295) |
uint64 | 无符号 64位整型 (0 到 18446744073709551615) |
int8 | 有符号 8位整型 (-128 到 127) |
int16 | 有符号 16位整型 (-32768 到 32767) |
int32 | 有符号 32位整型 (-2147483648 到 2147483647) |
int64 | 有符号 64位整型 (-9223372036854775808 到 9223372036854775807) |
我们可以借助fmt函数将一个整数以不同进制形式展示
package main
import "fmt"
func main(){
// 十进制
var a int = 10
fmt.Printf("%d \n", a) // 10
fmt.Printf("%b \n", a) // 1010 占位符%b表示二进制
// 八进制 以0开头
var b int = 066
fmt.Printf("%o \n", b) // 66
// 十六进制 以0x开头
var c int = 0xff
fmt.Printf("%x \n", c) // ff
fmt.Printf("%X \n", c) // FF
}
占位符标志
%T // 查看变量的类型
%v // 查看变量的值
%b // 查看二进制
%d // 查看十进制
%o // 查看八进制
%x // 查看十六进制
%s // 查看字符串
1.2、特殊整型
类型 | 描述 |
---|---|
uint | 32位操作系统上就是uint32,64位操作系统上就是uint64 |
int | 32位操作系统上就是int32,64位操作系统上就是int64 |
uintptr | 无符号整型,用于存放一个指针 |
1.3、浮点型
类型 | 描述 |
---|---|
float32 | 32 位浮点型 |
float64 | 64 位浮点型 |
complex64 | 32 位实数和虚数 |
complex128 | 64 位实数和虚数 |
2、字符串
Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原始数据类型(int、bool、float32等)一样。Go语言的字符串的内部实现使用UTF-8
编码,并且是用双引号""
包裹的。
// 字符串
s := "Hello 沙河"
// 单独的字母、汉字、符号表示一个字符
c1 := 'h'
c2 := '1'
c3 := '沙'
// 字节:1字节=8Bit(8个二进制位)
// 1个字符'A'=1个字节
// 1个utf8编码的汉字'沙'=一般占3个字节
多行
的字符串
// 反引号里的东西原样输出
a1 :=`第一行
第二行
第三行
`
字符串常用操作
// len() ->打印字符长度
s1 := "你好"
fmt.Println(len(s1))
// + or 占位符 or Springtf ->字符串拼接
name := "理想"
world := "大帅比"
fmt.Println(name + world)
fmt.Printf("%s%s",name,world)
ss1 := fmt.Sprintf("%s%s",name,world) // 该方法会直接返回字符串拼接完成后的变量,需要赋值
fmt.Println(ss1)
// strings.Split ->字符串分割
s2 := "D:/a/b/c"
ret := strings.Split(s2,"/")
fmt.Println(ret) // [D: a b c]
// strings.Contains ->判断是否包含
s3 := "HelloWorld"
ret := strings.Contains(s3,"W")
fmt.Println(ret) // true
// strings.HasPrefix and strings.HasSuffix ->前缀/后缀 判断
s3 := "HelloWorld"
fmt.Println(strings.HasPrefix(s3,"H")) // true
fmt.Println(strings.HasSuffix(s3,"x")) // false
// strings.Index and strings.LastIndex ->子串出现的位置
s4 := "abcdefge"
fmt.Println(strings.Index(s4,"c")) // 2
fmt.Println(strings.LastIndex(s4,"e")) // 4
// strings.Join ->join操作
s2 := "D:/a/b/c"
ret := strings.Split(s2,"/")
fmt.Println(strings.Join(ret,"+")) // D:+a+b+c
// strings.Replace ->字符串替换
s1 := "hellooowa"
s1 = strings.Replace(s1,"he","wo",2)
fmt.Println(s1) // wollooowa
// strings.ToLower or strings.ToUpper ->转为小写/大写
s1 := "jack"
s1 = strings.ToLower(s1)
fmt.Println(s1) // jack
s2 := "JACK"
s2 = strings.ToUpper(s2)
fmt.Println(s2) // JACK
// strings.TrimSpace ->去掉字符串首和尾的空格
s1 := " sk sk "
s1 = strings.TrimSpace("sksk")
fmt.Println(s1) // sksk
// strings.Trim ->去掉字符串首和尾的指定字符
s1 := "hello world"
s1 = strings.Trim(s1,"hd")
fmt.Println(s1) // ello worl
// strings.TrimLeft ->去掉字符串首部的指定字符
s1 := "hello world"
s1 = strings.TrimLeft(s1,"he")
fmt.Println(s1) // llo world
// strings.TrimRight ->去掉字符串尾部的指定字符
s1 := "hello world"
s1 = strings.TrimRight(s1,"ld")
fmt.Println(s1) // hello wor
// strconv.Itoa ->把一个整数转成成字符串
str1 := strconv.Itoa(1000)
fmt.Printf("%T",str1) // string
// strconv.Atoi ->把一个字符串转换成整数
str1 := "1000"
number,err := strconv.Atoi(str1)
if err != nil{
fmt.Println("can not conver to int",err)
}else{
fmt.Println(number) // 1000
}
修改字符串
要修改字符串,需要先将其转换成[]run
或[]byte
,完成后再转换为string
,无论哪种转换都会重新分配内存。
s2 := "白萝卜" // [白 萝 卜]
s3 := []rune(s2) // 把字符串强制转换成了一个rune切片
s3[0] = '红'
fmt.Println(string(s3)) // 把rune切片强制转换成字符串
3、数据类型转换
package main
import "fmt"
func main(){
var a int8 = 100
var b int16 = int16(a) // 将int8转换成int16
fmt.Printf("a=%T b=%T\n",a,b)
}
输出结果
a=int8 b=int16