• Go数据类型之基本数据类型


    不想沦为芸芸众生的人只需做一件事,便是对自己不再散漫;他应当听从良知的呼唤:“成为你自己!”

                                             ---尼采

    1、整型

    有符号整数类型:int8、int16、int32和int64

    无符号整数类型:uint8、uint16、uint32和uint64

    跟CPU平台相关的数据类型:有符号整数int和无符号整数uint

    特殊的无符号整数类型:uintptr(同指针),在32位平台下4字节,在64位平台下8字节

    1.1 类型表示

    int、uint和uintptr是不同类型的兄弟类型,int和int32也不是相同的类型,编译器不会帮你自动做类型转换,需要强制类型转换。比如:

    var apples int32 = 1

    var oranges int16 = 2

    var compote int = apples + oranges  //compile error

    当编译时,会产生一个错误信息:

    invalid operation: apples + oranges (mismatched types int32 and int16)

    解决方法是将他们都显式转型为一个常见类型:

    var compote = int(apples) + int(oranges)

    1.2 比较运算 

    两个不同类型的整数型不能直接比较,但各种类型的整型变量都可以直接与字面常量进行比较。

    var i int32
    var j int64
    
    i, j = 1, 2
    
    if i == j {  //编译错误
       fmt.Println("i and j are equal.")       
    }
    
    if i == 1 || j == 2 {  //编译通过
       fmt.Println("i and j are equal.")    
    }

    2、浮点数

    如何判断两个浮点数是否相等?浮点数不是一种精确地表达方式,所以像整型那样直接用 == 来判断两个浮点数是否相等是不可行的。应该采用下面的方法:

    package main
    import (
    "fmt" "math" ) const MIN = 0.000001 // MIN 为用户自定义的比较精度 func IsEqual(f1, f2 float64) bool { return math.Dim(f1, f2) < MIN }
    func main() { a :
    = 0.0000123 b := 0.000012234 if IsEqual(a, b) { fmt.Println("a < b") } }

    3、布尔类型

    布尔值可以和&&(AND)和||(OR)操作符结合,并且有短路行为:如果运算符左边值已经可以确定整个布尔表达式的值,那么运算符右边的值将不再被求值,因此下面的表达式总是安全的:

    s != "" && s[0] == 'x'

    其中s[0]操作如果应用于空字符串将会导致panic异常。

    4、常量

    常量表达式值在编译时期计算,而不是在运行时期。

    所有常量的运算都可以在编译期完成,这样可以减少运行时的工作,也方便其他编译优化。当操作数是常量时,一些运行时的错误也可以在编译时被发现,例如整数除零、字符串索引越界、任何导致无效浮点数的操作等。

    4.1 iota常量生成器

    常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。

    下面是来自time包的例子,它首先定义了一个Weekday命名类型,然后为一周的每天定义了一个常量,从周日0开始。在其它编程语言中,这种类型一般被称为枚举类型。

    type Weekday int
    
    const (
        Sunday Weekday = iota
        Monday
        Tuesday
        Wednesday
        Thursday
        Friday
        Saturday
    )

     5、字符串

    在Go语言中,字符串也是一种基本类型。

    字符串连接:x + y; "Hello" + "123",结果为"Hello123"

    字符串长度:len(s)

  • 相关阅读:
    MVC三层架构
    Cookie
    request (请求转发)
    response 重定向
    HttpServletResponse(响应),实现文件下载,实现验证码功能
    HTTP报文格式
    基于UUID生成短ID
    一致性hash应用到redis
    spring-mysqlclient开源了
    Effection Go
  • 原文地址:https://www.cnblogs.com/ralap7/p/9147369.html
Copyright © 2020-2023  润新知