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
posted @ 2020-02-11 01:41  jasonminghao  阅读(728)  评论(0编辑  收藏  举报