golang基础--类型与变量

基础知识--类型与变量

基本类型

  • 布尔型:bool
    • 长度: 1bytes
    • 取值范围: false, true
    • 注意事项: 不可以使用数字代表,不像 python中可是使用 1和0表示
  • 整型: int/uint
    • 根据运行平台可能是32位或者是64位
  • 8位整型: int8/uint8
    • 长度:1字节
    • 取值范围:
      • 128~127(有运算符号)
      • 0-255 无符号
  • 字节型: byte (uint8别名)
  • 16位整型:int16/uint16
    • 长度:2字节
    • 取值范围: -32768~32767 / 0~65536
  • 32位整型:int32(rune) /uint32
    • 长度:4字节
    • 取值范围:-2^32 /2 -2^32 / 2-1/0~2^32-1
  • 64位整型:int64/uint64
    • 长度:8字节
    • 取值范围:-2^64 /2 -2^64 / 2-1/0~2^64-1
  • 浮点型: float32/float64
    • 长度:4/8字节
    • 小数位:精度 7/15小数位
  • 足够保存指针的32或64位整数型:uintptr
  • 其他类型:
    • array, struct ,string
  • 引用类型:
    • slice, map, chan(通道--高并发特有)
  • 接口类型: inteface
  • 函数类型:func

类型零值

  • 零值并不等于空值,而是当变量被声明位某种类型后的默认值,通常情况下值类型的默认值为0,bool为false, string 为空字符串
  package main
  import "fmt"
  func main(){
      var a int
      var b int32
      var c float32
      var d bool
      var e string
      var a1[] int
    fmt.Println(a)
      fmt.Println(b)
      fmt.Println(c)
      fmt.Println(d)
      fmt.Println(e)
      fmt.Println(a1)
  }
  /*output
  0 //int
  0 //int32
  0 //float32
  false //bool
        // string 默认为空
  []    //切片
  */

类型别名

  • 顾名思义就是可以将类型名指向一个别名
  // 类型别名
  package main
  import "fmt"
  type (
    byte int8
    rune int32
    文本  string  //可是使用中文类型别名
      ByteSize int64 // 可以更加直观的描述类型
  )
  func main()  {
    var b 文本  //将string 类型定义别名为文本
    b ="文本类型名"
    fmt.Println(b)
  }
  // output : 文本类型名import "fmt"

多个变量的声明

  • 注意多个变量赋值多种写法
  //多个变量声明
  package main
  import "fmt"
  var (
    aaa = "hello"
    sss,bbb = 1, 2 //自行推断类型  
    // ccc :=3是错误的,不可以省略var
  )
  func main() {
    //var a, b, c, d = 1, 2, 3, 4   //并行声明变量,省略int类型
    //a, b, c, d := 1, 2, 3, 4      // 函数变量中可以省略var,全局变量必须使用var
    a, _, c, d := 1, 2, 3, 4        // _可以忽略某一个值,实际应用于当函数有多个返回值时,忽略某一个不使用的值
    fmt.Println(a)
    //fmt.Println(b)
    fmt.Println(c)
    fmt.Println(d)
  }

变量类型转换

  • go中不存在隐式转换,所有的类型转化必须是显示的声明

  • 转换只发生在两种相互兼容的类型之间

  • 类型转换格式如下:

  // 类型转换
  package main
  import "fmt"
  func main() {
    var a float32 = 100.1
    fmt.Println(a)
    b := int(a)
    fmt.Println(b) //这种方式是可行,只存在精度的丢失
    c :=bool(a)    //这种方式是可行,只存在精度的丢失
    fmt.Println(c)
  }
  c
  /*output
  a-->100.1
  b--->100  //丢失了精度
  c--->cannot convert a (type float32) to type bool
  */
  • 思考:数字如何变成字符串?
  //int转string,并不是我们想达到的效果
  package main
  import "fmt"
  func main() {
    var a int = 65
    b := string(a)  //int 转string,输出的是UTF8码中,序号65位表示的是字母A
      b1 := strconv.Itoa(a) //确实想要将int 65 转换成string 65,使用 strconv包
    fmt.Println(b)
      fmt.Println(b1)
  }
  //output: A
  //output: "65"

猜你喜欢

转载自www.cnblogs.com/failymao/p/9222723.html