Go的基本类型与变量
基本类型
- 布尔型:bool
- 长度:1字节
- 取值范围:true,false
- 注意:不可以用数字代表true或false
- 整型:int/uint
- 根据运行平台可能为32或64位
- 8位整型:int8/uint8
- 长度:1字节
- 取值范围 -128~127/0-255
- PS:int是有符号,uint是无符号
字节型:byte (uint8别名)
16位整型:int16/uint16
- 长度:2字节
- 取值范围:-32768~32768 / 0~65535
- 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小数位
- 复数:complex64/complex128
- 长度8/16字节
足够保存指针的32位或64位整数型:uintptr
其它值类型
- array、struct、string
- 引用类型
- slice、map、chan
-** 接口类型:interface**
- 函数类型:func
- 在go语言中函数是可以赋值给变量的,所以函数也是一种类型
类型零值
- 零值不等于空值,而是当变量被声明为某种类型后的默认值,通常情况下值得类型的默认值为0,bool为false,string为空字符串。
package main
import (
"fmt"
)
func main() {
var a int
fmt.Println(a)
}
//此时打印出来的a的值是0,如果a为string类型的话,打印出来的值是空字符串,如果a为bool型的话,打印出来的值是false
类型别名
package main
import (
"fmt"
)
type (
文本 string
)
func main() {
var b 文本
b = "你好"
fmt.Println(b)
}
//此时也是可以进行打印的,但是不建议这样使用
单个变量的声明和赋值
- 变量的声明格式: var <变量名称> <变量类型>
- 变量的赋值格式: <变量名称> = <表达式>
- 声明的同时赋值:var <变量名称> <变量类型> = <表达式>
package main
import (
"fmt"
)
func main() {
var b int
b = 1 //先声明后赋值,当这个变量还没有要用,当你在后面的分支结构中可能要用到它,这个时候不能在结构中声明,在结构退出之后,你可能还需要其他的运算。
var c int = 1 //变量声明的同时赋值,一般用在全局变量中,全局变量不能使用:=,必须进行显式的说明
var f = 2 //不写出变量类型的区别,有可能现在是int型,你在后面进行运算是float型,这个时候用系统推断就可以保持运算的类型一致。
d := "go" //最简写法
e := false
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
fmt.Println(f)
}
多个变量的声明与赋值
- 全局变量的声明可以使用var()的方式进行简写
- 全局变量的声明不可以省略var,但可以使用并行的方式
- 所有变量都可以使用类型推断
- 局部变量不可以使用var()的方式简写,只能使用并行方式
package main
import (
"fmt"
)
func main() {
//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 //忽略了,应用在函数的返回值当中
fmt.Println(a, c, d)
}
变量的类型转换
- Go中不存在隐式转换,所有的类型转换必须显式声明
- 转换只能发生在两种相互兼容的类型之间
- 类型的转换格式为如下
- 从严格意义上讲type newint int,这里newint并不能说是int的别名,而只是底层数据结构相同,在这里称之为自定义类型,在进行类型转换时仍旧需要显示转换,但是byte和rune确确实实为uint8和int32的别名,可以相互进行转换。
<Value> [:]= <TypeOfValueA>(ValueB)
package main
import (
"fmt"
)
func main() {
//在相互兼容的两种类型之间进行转换
var a float32 = 100.1
fmt.Println(a)
b := int(a)
fmt.Println(b)
//以下表达式无法通过编译,因为类型不兼容
var c bool = true
d := int(c)
}
- string()表示将数据转换成文本格式,因为计算机中存储的任何东西本质上都是数字,因此此函数自然地认为我们需要的是用数字65表示的文本A。
package main
import (
"fmt"
"strconv"
)
func main() {
var a int = 65
b := string(a)
c := strconv.Itoa(a)
d := strconv.Atoi(c)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
//此时我们需要引用strconv的Itoa的函数,将65转换成我们想要的字符串65,如果想要逆转的话需要用Atoi函数。
Go的基本类型与变量的更多相关文章
- C# 异常:从作用域“”引用了“FiasHostApp.Entity.DBEntity.FIAS_RM_v1.ITraNetMgrUnitBaseInfoRecord”类型的变量“w”,但该变量未定义
C# 异常:从作用域“”引用了“FiasHostApp.Entity.DBEntity.FIAS_RM_v1.ITraNetMgrUnitBaseInfoRecord”类型的变量“w”,但该变量未定义 ...
- JavaScript学习笔记-基础语法、类型、变量
基础语法.类型.变量 非数字值的判断方法:(因为Infinity和NaN他们不等于任何值,包括自身) 1.用x != x ,当x为NaN时才返回true; 2.用isNaN(x) ,当x为NaN或 ...
- POJO类中的任何布尔类型的变量,都不要加is
POJO类中的任何布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误. 定义为基本数据类型boolean isSuccess:的属性,它的方法也是isSuccess(),HSF框架在反向解 ...
- 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量
多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...
- C#的类型、变量和值
大学学了C#,工作也是使用C#,虽然在日常的开发中没什么大的问题,但个人觉得在C#的理解还不是很清晰,所以决定花一定的时间来理一理学过的知识,顺便革新下脑袋里的知识,因为坑爹的学校在教.net的时候, ...
- C#中隐式类型本地变量var
在新接触的项目中,看到很多声明变量时用var.只记得在javascript中声明变量用var.今天在家里看C#和.Net高级编程,看到隐式变量这一块,就总结一下C# 中隐式变量var的用法. 1.C# ...
- javascript !!的作用是把一个其他类型的变量转成的bool类型
!!的作用是把一个其他类型的变量转成的bool类型
- C# 类型和变量
C# 中的类型有两种:值类型 (value type) 和引用类型 (reference type).值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象.对于引用类型 ...
- .Net程序员学用Oracle系列(26):PLSQL 之类型、变量和结构
1.类型 1.1.属性类型 1.2.记录类型 2.变量 2.1.变量类型 2.2.变量定义 2.3.变量赋值 3.结构 3.1.顺序结构 3.2.选择结构 3.3.循环结构 4.总结 1.类型 在&l ...
- JavaScript总体的介绍【JavaScript介绍、定义函数方式、对象类型、变量类型】
什么是JavaScript? 我们可以从几个方面去说JavaScript是什么: 基于对象 javaScript中内置了许多对象供我们使用[String.Date.Array]等等 javaScrip ...
随机推荐
- USTC《现代软件工程》春季学期——第一次个人作业:词频统计
截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...
- SpringMVC随笔之——@responsebody【引用snowolf博文】
首先说RESTful 风格是什么 :(RESTful 风格:把请求参数变成请求路径的一种风格.) OK,一句话总结完毕 @responsebody表示该方法的返回结果直接写入HTTP response ...
- hdu 5071 vector操作恶心模拟
http://acm.hdu.edu.cn/showproblem.php?pid=5071 对于每一个窗口,有两个属性:优先级+说过的单词数,支持8个操作:新建窗口,关闭窗口并输出信息,聊天(置顶窗 ...
- shell 命令 grep -v
grep -v shell命令中,grep命令,是对文本行的搜索命令.grep -v就是反向文本行搜索. 当控制台输出很多时,有很多是我们不想看到的,就可以用到grep -v命令 举个栗子:ls -l ...
- 软件测试思维导图[ZZ]
原文链接 全图
- Docker Register部署与基本认证
准备 基本事项 Docker环境 登录授权方式 镜像存放地址 HTTPS外网访问 启动Docker Registry 1. 基本事项 本篇涉及到的数据文件都放在/data目录下, 其中会有三个子目录 ...
- 添加vscode自定义代码块
以vue为例 一.打开vscode>文件>首选项>用户代码片段>vue.json二.编写代码块 其中一行一句:$1是占位符,就是你可以输入的地方."http get& ...
- OSLab文件描述符
日期:2019/3/24 内容:Linux文件描述符. 一.基本概念 文件描述符(File Descriptor) 一个非负整数.应用程序利用文件描述符来访问文件.打开现存文件或新建文件时,内 ...
- 201621123018《Java程序设计》第7周学习报告
1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 事件.事件源. 事件监听器.事件处理方法 1.2 任 ...
- 在Node中使用ES6语法
Node本身已经支持部分ES6语法,但是import export,以及async await(Node 8 已经支持)等一些语法,我们还是无法使用.为了能使用这些新特性,我们就需要使用babel把E ...