博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go编程基础 - 类型与变量
阅读量:7127 次
发布时间:2019-06-28

本文共 2692 字,大约阅读时间需要 8 分钟。

  hot3.png

Go基本类型

  • 布尔型:bool

    • 长度:1bit
    • 取值范围:true,false
    • 注意事项:不可以用数字代替true或者false
  • 整型:int/uint

    • 根据运行平台可能为32或者64位
  • 8位整型:int8/uint8

    • 长度:1字节
    • 取值范围:-128~127/0~255
  • 字节型:byte(uint8别名)

  • 16位整型:int16/uint16

    • 长度:2字节
    • 取值范围:-32768~32767/0~65535
  • 64位整型:int64/uint64

    • 长度:8字节
    • 取值范围:-2^64/2~2^64/2-1 / 0~2^64-1
  • 浮点型:float32/float64

    • 长度:4/8字节
    • 小数位:精确到7/15小数位
  • unicode字符:rune

  • 复数:complex64/complex128

    • 长度:8/16字节
  • 足够保存指针的32位或64位整数型:uintptr

  • 其他值类型:

    • array、struct、string
  • 引用类型:

    • slice(切片)、map(简单理解hash表)、chan(通道)
  • 接口类型:interface

  • 函数类型:func - 在Go函数可以赋值给变量

类型的零值

零值并不等于空值,而是当变量被声明为某种类型后的默认值,通常情况下值类型的默认值为0,bool为false,string为空字符串

代码验证

var _int int	fmt.Println("init[int]:", _int)	var _float32 float32	fmt.Println("init[float32]:", _float32)	var _string string	fmt.Println("init[string]:", _string)	var _bool bool	fmt.Println("init[int]:", _bool)	var _array []int	fmt.Println("init[array int ]:", _array)	var _array10 [10]int	fmt.Println("init[array int 10]:", _array10)	var _arraybool [10]bool	fmt.Println("init[array bool 10]:", _arraybool)

输出

init[int]: 0init[float32]: 0init[string]: init[int]: falseinit[array int ]: []init[array int 10]: [0 0 0 0 0 0 0 0 0 0]init[array bool 10]: [false false false false false false false false false false]

检查类型是否溢出

fmt.Println("[math.MinInt32]:", math.MinInt32)	fmt.Println("[math.MaxInt32]:", math.MaxInt32)// 输出[math.MinInt32]: -2147483648[math.MaxInt32]: 2147483647

类型的别名

中文别名类型

type (    文本 string)// 使用var b 文本b = "中文类型名"fmt.Println(b)

单个变量的生命与赋值

  • 变量的声明格式: var <变量名称> <变量类型>
  • 变量的赋值格式:<变量名称> = <表达式>
  • 声明的同时赋值:var <变量名称> [变量类型] = <表达式>

**注意:**在声明时赋值可以不填写类型,由编译器进行推断

var value int = 1	fmt.Println(value)	// 最简写方式 - 注意:全局变量不能使用	value2 := 1	fmt.Println(value2)

不同形式的意义

多个变量的声明与赋值

  • 全局变量的声明可使用var 的方式进行简写
  • 全局变量的声明不可以省略var,但可以并行方式(括号方式)
  • 所有变量都可以使用类型推断
  • 局部变量不可以使用var的方式简写,只能使用并行方式

自己编写的例子

var a, b, c, d int = 1, 2, 3, 4	fmt.Println(a)	fmt.Println(b)	fmt.Println(c)	fmt.Println(d)// 输出1234

给出的例子

// 多个变量的声明var a,b,c,d int// 多个变量的赋值a,b,c,d = 1,2,3,4//多个变量生命同时赋值var a,b,c,d int = 1,2,3,4// 省略变量类型,由系统推断var a,b,c,d = 1,2,3,4// 多个变量声明与复制的最简写法a,b,c,d := 1,2,3,4// 忽略a,_,c,d := 1,2,3,4

:=主要应用在函数返回多个返回值

变量的类型转换

  • Go中不存在隐式转换,所有类型转换必须显式声明
  • 转换只能发生在两种互相兼容的类型之间
  • 类型转换的格式:
    • <ValueA> [:]= <TypeOfValueA>(<ValueB>)
// 在相互u兼容的两种类型直接进行转换var a float32 = 1.1b := int(a)// 以下表达式无法通过编译var c bool = trued := bool(c)

自己编写的测试

var f float32 = 100.1	g := int(f)	fmt.Println(g)    // 输出100	h := bool(f)	fmt.Println(h)    // 编译报错:cannot convert f (type float32) to type bool

作业编写

var i = 65	j := string(i)	fmt.Println(j)	k := strconv.Itoa(i)	fmt.Println(k)// 输出A65

补充说明

从严格意义上讲 type newint int,这里newint并不能说是int的别名,而只是底层数据结构相同,在这里称为自定义类型,在进行类型转换时,仍旧需要显示转换,但是byte和rune确确实实为uint8和int32的别名,可以相互进行转换。有关于自定义类型将在后面的教程进行讲解。

转载于:https://my.oschina.net/hava/blog/1526203

你可能感兴趣的文章
mysql中replace into、replace into、insert ignore用法区别
查看>>
Sql Server系列:数据库组成及系统数据库
查看>>
***之open***
查看>>
tengine+uwsgi+django
查看>>
Django 模板语法取值
查看>>
oracle和sql server 比较
查看>>
高端存储亟待国产化
查看>>
DHCP分配租期问题的重要性
查看>>
linux负载均衡
查看>>
NATIVE SQL的用法
查看>>
JS多项选择删除
查看>>
scrollLeft、offsetLeft、clientLeft、clientHeight详解
查看>>
SQL 到 NOSQL 的思维转变
查看>>
Let's Encrypt,免费好用的 HTTPS 证书
查看>>
for
查看>>
Centos搭建nginx环境,编译,添加服务,开机启动。
查看>>
ubuntu下规避终端打开gvim出现的错误
查看>>
Redis学习——Linux环境下Redis的安装(一)
查看>>
C++继承
查看>>
Android Fragment 真正的完全解析(上)
查看>>