19

Golang:基本的数据类型

 4 years ago
source link: https://studygolang.com/articles/25064
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

golang中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、channel等

基本数据类型

整型

整型分为两大类:

  1. 按长度:int8、int16、int32、int64
  2. 无符号整型:uint8、uint16、uint32、uint64
类型 描述 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)

特殊整型

类型 描述 uint 32位操作系统上就是 uint32 ,64位操作系统上就是 uint64 int 32位操作系统上就是 int32 ,64位操作系统上就是 int64 uintptr 无符号整型,用于存放一个指针

数字字面量语法

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 = 077
    fmt.Printf("%o \n", b)  // 77
 
    // 十六进制  以0x开头
    var c int = 0xff
    fmt.Printf("%x \n", c)  // ff
    fmt.Printf("%X \n", c)  // FF
}

浮点型

golang支持两种浮点数: float32float64

打印浮点数时可以使用 fmt 包配合动词 %f

package main
import (
        "fmt"
        "math"
)
func main() {
        fmt.Printf("%f\n", math.Pi)
        fmt.Printf("%.2f\n", math.Pi)
}

复数

complex64和complex128

var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)

复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。

布尔值

golang中以 bool 类型进行声明布尔型数据,布尔型数据只有 truefalse

注意:

  1. 布尔类型变量的默认值为false
  2. golang中不允许将整型强制装换为布尔型
  3. 布尔型无法参与数值运算,也无法与其他类型进行装换

字符串

golang中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型一样。golang的字符串的内部使用utf-8编码。字符串的值为 " " 中的内容。

s1 := "hello"
s2 := "哈喽"

字符串转义符

转义符 含义 \r 回车符(返回行首) \n 换行符(直接跳到下一行的同列位置) \t 制表符 \' 单引号 \" 双引号 \\ 反斜杠

多行字符串

golang中要定义一个多行字符串时,就必须使用 反引号 字符:

s1 := `第一行
第二行
第三行
`
fmt.Println(s1)

字符串的常用操作

方法 介绍 len(str) 求长度 +或fmt.Sprintf 拼接字符串 strings.Split 分割 strings.contains 判断是否包含 strings.HasPrefix,strings.HasSuffix 前缀/后缀判断 strings.Index(),strings.LastIndex() 子串出现的位置 strings.Join(a[]string, sep string) join操作

byte和rune类型

组成每个字符串的元素叫做字符,可以通过遍历或者单个获取字符串获得字符。字符用单引号(' ')包裹。

var a := 'A'
var b := '中'

当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。 rune 类型实际是一个 int32

修改字符串

要修改字符串,需要先将其转换成 []rune[]byte ,完成后再转换为 string 。无论哪种转换,都会重新分配内存,并复制字节数组。

func changeString() {
    s1 := "big"
    // 强制类型转换
    byteS1 := []byte(s1)
    byteS1[0] = 'p'
    fmt.Println(string(byteS1))

    s2 := "白萝卜"
    runeS2 := []rune(s2)
    runeS2[0] = '红'
    fmt.Println(string(runeS2))
}

类型转换

golang 中只有强制类型转换,没有隐式类型转换。

强制类型转换的基本语法:

T(表达式)

T表示要装换的类型,表达式包括变量、复杂算子和函数返回值等。

例子:

func sqrtDemo() {
    var a, b = 3, 4
    var c int
    // math.Sqrt()接收的参数是float64类型,需要强制转换
    c = int(math.Sqrt(float64(a*a + b*b)))
    fmt.Println(c)
}

运算符

运算符用于在程序运行时执行数学或逻辑运算。

golang内置的运算符有:

  1. 算术运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 位运算符
  5. 赋值运算符

算符运算符

运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余

注意: ++ (自增)和 -- (自减)在Go语言中是单独的语句,并不是运算符。

关系运算符

运算符 描述 == 检查两个值是否相等,如果相等返回 True 否则返回 False。 != 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 > 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 >= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 < 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 <= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。

逻辑运算符

运算符 描述 && 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。 || 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。 ! 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。

位运算符

位运算符对整数在内存中的二进制进行操作。

运算符 描述 & 参与运算的两数各对应的二进位相与。 (两位均为1才为1) | 参与运算的两数各对应的二进位相或。 (两位有一个为1就为1) ^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (两位不一样则为1) << 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 >> 右移n位就是除以2的n次方。 “a>>b”是把a的各二进位全部右移b位。

赋值运算符

运算符 描述 = 简单的赋值运算符,将一个表达式的值赋给一个左值 += 相加后再赋值 -= 相减后再赋值 *= 相乘后再赋值 /= 相除后再赋值 %= 求余后再赋值 <<= 左移后赋值 >>= 右移后赋值 &= 按位与后赋值 |= 按位或后赋值 ^= 按位异或后赋值

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK