• Go 基本数据类型


    Go基础语法

    package main
    
    import "fmt"
    func main(){
        fmt.Println("Hello world")
    }
    

    注意点:

    • 花括号的左侧"{"不能另起一行,否则编译错误
    • if...else语句中的else必须和if的"}"在同一行,否则编译错误
    • 必须在源文件中非注释的第一行声明包名,如package main
    • main()函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数
    • 声明变量必须使用,否则编译错误

    Go数据类型

    img

    整型

    整型分为两位,有符号无符号两种类型

    有符号类型可以存储任何整数,无符号类型只能存储自然数

    在保证程序正确运行下,尽量使用占用空间小的数据类型

    fmt.Printf("%T", var_name)输出变量类型

    unsafe.Sizeof(var_name)查看变量占用字节

    类型 描述
    uint8 无符号8位整型(0 到 255)
    uint16 无符号16位整型(0 到 65535)
    uint32 无符号32位整型(0 到 4294967295)
    uint64 无符号32位整型(0 到 18446744073709551615)
    int8 有符号8位整型(-128 到 127)
    uint16 有符号8位整型(-32768 到 32767)
    uint32 有符号8位整型(-2147483648 到 2147483647)
    uint64 有符号8位整型(-9223372036854775808 到 9223372036854775807)

    浮点型

    浮点型也就是小数类型,可以存放小数。比如6.6,-12.34

    1. 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
    2. 尾数部分可能丢失,造成精度损失。-123.0000901
    3. golang的浮点型默认为float64类型,因为它比float32更精确
    类型 描述
    float32 IEEE-754 32位浮点型数
    float64 IEEE-754 64位浮点型数
    complex64 32 位实数和虚数
    complex128 64 位实数和虚数

    字符和字符串

    字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的,Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。

    Go语言的字符使用UTF-8编码,英文字母占一个字符,汉字占三个字符。字符可以进行运算,也就是对应的ascii相加

    package main
    import "fmt"
    func main(){
        // 单引号内只能包裹单个字符
        c  := 'a'  // <==> var c byte = 'a'
        str := "yven" // <==> var str string = "yven"
        
        fmt.Printf("c : %v
    ",c) //打印的是字符a对应的ascii码值
        fmt.Printf("c : %c
    ",c) //打印c : a
        fmt.Printf("str : %v
    ",str) // 打印 str : yven
    }
    

    字符串的两种标识形式

    • 双引号,会识别字符串中的转义字符
    var str = "Yven 
     law" //识别其中的换行符,并换行显示
    
    • 反引号,以字符串的原生形式输出,包括换号和特殊字符,可以实现防止攻击、输出源代码等
    var str = `Yven 
     lae` //原样输出
    

    字符串拼接使用"+"

    布尔型

    布尔类型也叫bool类型,bool类型数据只允许取值true或false

    bool类型占一个字节

    使用与逻辑判断

    指针

    • 基本数据类型,变量存的就是值,也叫值类型
    • 获取变量的地址,Go语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址
    • 指针变量存的是一个地址,这个地址指向的空间存的才是值,如:
    var num int = 10
    var ptr *int = &int
    
    • 获取指针变量所指向的值,使用:* ,如:
    //答应上方ptr对应的值
    fmt.Println(*ptr)
    

    详细请见:https://www.cnblogs.com/louyefeng/p/11316884.html

    基本数据类型默认值

    数据类型 默认值
    整型 0
    浮点型 0
    字符串 ""
    字符 0

    基本数据类型互相转换

    Go在不同类型的变量之间需要显式转换,也就是Go的数据类型不能自动转换。

    var num1 int = 777
    var num2 float64 = float64(num1)
    var num3 uint8 = uint8(num2)
    fmt.Println(num1,num2,num3)
    

    注意点:

    • Go数据类型的转换可以是范围小转到范围大,也可以是范围大转到范围小。
    • 被转换的是变量存储的数据,变量本身的数据类型并没有变化

    其他类型转string类型

    方式一:

    func Sprintf(format string,a ...interface{}) string
    

    Sprintf根据format参数生成格式化的字符串并返回字符串。

    var num1 int = 99;
    var num2 float64 = 23.456
    var isTrue bool = true 
    var char byte = 'A'
    
    var str string
    
    str = fmt.Sprintf("%d", num1)
    fmt.Printf("str类型为 %T str = %q
    ",str, str)
    
    str = fmt.Sprintf("%f", num2)
    fmt.Printf("str类型为 %T str = %q
    ",str, str)
    
    str = fmt.Sprintf("%t", isTrue)
    fmt.Printf("str类型为 %T str = %q
    ",str, str)
    
    str = fmt.Sprintf("%d", char)
    fmt.Printf("str类型为 %T str = %q
    ",str, str)
    

    输出结果为

    str类型为 string str = "99"
    str类型为 string str = "23.456000"
    str类型为 string str = "true"
    str类型为 string str = "65"
    

    方式二:

    使用strconv包的函数

    var num1 int = 99;
    var num2 float64 = 23.456
    var isTrue bool = true 
    
    var str string
    str = strconv.FormatInt(int64(num1), 10)
    str = strconv.Itoa(num1)
    fmt.Printf("str类型为 %T str = %q
    ",str, str)
    
    str = strconv.FormatFloat(num2, 'f', 10, 64)
    fmt.Printf("str类型为 %T str = %q
    ",str, str)
    
    str = strconv.FormatBool(isTrue)
    fmt.Printf("str类型为 %T str = %q
    ",str, str)
    

    输出结果:

    str类型为 string str = "99"
    str类型为 string str = "23.4560000000"
    str类型为 string str = "true"
    

    string类型转其他类型

    使用strconv包的函数

    package main
    
    import (
        "fmt"
        "strconv"
    )
    
    func main() {
        
        var str string = "true"
        var str1 string = "123456"
        var str2 string = "123.456"
    
        var isTrue bool
        var num int64
        var num2 float64
    
        isTrue, _ = strconv.ParseBool(str)
        fmt.Printf("str类型为 %T str = %v
    ",isTrue, isTrue)
    
        num, _ = strconv.ParseInt(str1, 10, 64)
        fmt.Printf("str类型为 %T str = %v
    ",num, num)
    
        num2, _ = strconv.ParseFloat(str2, 64)
        fmt.Printf("str类型为 %T str = %v
    ",num2, num2) 
    
    }
    

    输出结果为:

    str类型为 bool str = true
    str类型为 int64 str = 123456
    str类型为 float64 str = 123.456
    
  • 相关阅读:
    【BZOJ1010】【HNOI2008】玩具装箱
    【BZOJ1009】【HNOI2008】GT考试
    【BZOJ1008】【HNOI2008】越狱
    【BZOJ1007】【HNOI2008】水平可见直线
    【BZOJ1006】【HNOI2008】神奇的国度
    (考研)生产者消费者问题(赋代码)
    (考研)(精华)二叉树的知识结构图以及各种特殊的二叉树
    二叉树新的一种新建思路和遍历思路
    (简单但不容易写全对)逆置数组
    (经典)二叉树的层次遍历和快速排序
  • 原文地址:https://www.cnblogs.com/louyefeng/p/11316778.html
Copyright © 2020-2023  润新知