Golang——数据类型

Cici冬雪 · · 1661 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

基本数据类型:
整型、浮点型、布尔型、字符串

其它:
数组、切片、结构体、函数、map、通道(channel)

基本数据类型

整型

有符号:int8 int16 int32 int64
无符号:unit8 uint16 uint32 uint64

unit8byte

int16对应c语言中的short型 ,int64对应c语言中的long型。

int:自动匹配os,os是32位就是int32,os是64位就是int64

len():获取对象的长度,返回int

package main

import "fmt"

func main() {
        //十进制
    var a int = 10
    fmt.Printf("%d \n", a)   //10
    fmt.Printf("%b \n", a)   //1010  占位符%b表示二进制

    //八进制
    var b int= 077
        fmt.Printf("%d \n", b)   //63
    fmt.Printf("%o \n", b)   //77

    //十六进制
    var c int= 0xff
    fmt.Printf("%x \n", c)   //ff
    fmt.Printf("%X \n", c)   //FF

    //变量的内存地址
    fmt.Printf("%p \n", &a)  //0xc000014080 
}

浮点型

遵循IEEE 754标准
float32 :最大范围为3.4e38,用常量math.MaxFloat32
float64:最大范围为1.8e308,用常量math.MaxFloat64

package main

import (
    "fmt"
    "math"
)

func main() {
    var a float32 = 2.34
    fmt.Printf("%f \n", a)           //2.340000
    fmt.Printf("%f \n", math.Pi)     //3.141593
    fmt.Printf("%0.2f \n", math.Pi)  //3.14
}

复数

complex64 : 实部和虚部分别是32位
complex128 : 实部和虚部分别是64位

package main

import "fmt"

func main() {
    var c1 complex64
    c1 = 1 + 2i
    fmt.Println(c1)     //(1+2i)
    var c2 complex128
    c2 = 3 + 4i
    fmt.Println(c2)     //(3+4i)
}

布尔值

bool:只有truefalse
注意:
(1)默认值是false
(2)不允许将整型强制转为布尔型;
(3)不参与数值运算,不与其它类型进行转换;

字符串

内部实现使用UTF-8编码,用双引号("")

var s1 string = "hello"
s2 := "你好"

转移字符(\)
\r \n \t ' " \

var s string = "str = \"c:\\users\\temp\""
fmt.Println(s)    //str = "c:\users\temp"

多行字符串,用反引号(``)
反引号间换行认为字符串中的换行;但是反引号间所有的转义字符均无效,文本按照原样输出

var multiStr  = `这是
多
"不需要转移"
行
`

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

package main

import "fmt"
import "strings"

func main() {
    s1 := "Hello "
    //求长度
    fmt.Println(len(s1))   //6

    //连接
    s2 := "Go"
    // s3 := s1 + s2
    s3 := fmt.Sprintf("%s----%s", s1, s2)
    fmt.Println(s3)   //Hello ----Go

    //分割
    s4 := strings.Split("Hello Ha Hwx", "H")
    fmt.Println(s4)   //[ ello  a  wx]

    
    s5 := "Hello haha"
    //是否包含
    fmt.Println(strings.Contains(s5, "Ha"))   //false
    //判断前缀
    fmt.Println(strings.HasPrefix(s5, "He"))  //true
    //判断后缀
    fmt.Println(strings.HasSuffix(s5, "ha"))  //true

    //字串出现位置
    s6 := "Hello Apple App"
    fmt.Println(strings.Index(s6, "App"))      //6
    fmt.Println(strings.LastIndex(s6, "App"))  //12

    //合并
    s7 := []string{"a", "b", "c", "d"}
    fmt.Println(strings.Join(s7, "-"))      //a-b-c-d

}

byte和rune类型

字符有两种:
(1)uint8类型,或者叫byte型,代表了ASCII码的一个字符;
(2)rune类型,代表一个UTF-8字符

当需要出来中文、日文或其它复合字符时,需要用到rune类型。rune类型实际是一个int32

package main

import "fmt"

func main() {
    s1 := "Golang"
    c1 := 'G' //1个字节(8位)
    fmt.Println(s1, c1)   //Golang 71

    s2 := "中国"
    c2 := '中'  //UTF-8编码下一个中文是3个字节
    fmt.Println(s2, c2)   //中国 20013

    s3 := "hello冬雪"
    fmt.Println(len(s3))    //11

    //遍历字符串
    for i := 0; i < len(s3); i++{
        fmt.Printf("%c\n", s3[i])   //都成乱码了
    }

    //for range循环,按照rune类型去遍历
    for k,v := range s3{
        fmt.Printf("%d - %c\n", k, v)
    }
    // 0 - h
    // 1 - e
    // 2 - l
    // 3 - l
    // 4 - o
    // 5 - 冬
    // 8 - 雪

}

修改字符串

字符串是值类型,赋值之后不可修改?
要修改字符串,需要先将其转换成[]rune[]byte,完成后再转换为string。无论哪种转换,都会从新分配内存,并复制字节数组。

s1 := "small"
byteS1 := []byte(s1)
byteS1[0] = 'a'
fmt.Println(s1,string(byteS1))  //small amall

s2 := "冬雪"
runeS2 := []rune(s2)
runeS2[1] = '冬'
fmt.Println(s2,string(runeS2))  //冬雪 冬冬

类型转换

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

T(表达式)

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

s1 := "small"
byteS1 := []byte(s1)
byteS1[0] = 'a'
fmt.Println(s1,string(byteS1))  //small amall
//强制类型转换
s1 = string(byteS1)
fmt.Println(s1)  //amall

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Cici冬雪

查看原文:Golang——数据类型

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1661 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传