基本类型

  • 布尔型:bool
  1. 长度:1字节
  2. 取值范围:true,false
  3. 注意:不可以用数字代表true或false
  • 整型:int/uint
  1. 根据运行平台可能为32或64位
  • 8位整型:int8/uint8
  1. 长度:1字节
  2. 取值范围 -128~127/0-255
  3. PS:int是有符号,uint是无符号
  • 字节型:byte (uint8别名)

  • 16位整型:int16/uint16

  1. 长度:2字节
  2. 取值范围:-32768~32768 / 0~65535
  • 32位整型:int32(rune)/uint32
  1. 长度:4字节
  2. 取值范围:-2^32/2 ~ 2^32/2-1 / 0~2^32-1
  • 64位整型:int64/uint64
  1. 长度:8字节
  2. 取值范围: -2^64/2 ~ 2^64/2-1 / 0~2^64-1
  • 浮点型:float32/float64
  1. 长度:4/8字节
  2. 小数位:精确到7/15小数位
  • 复数:complex64/complex128
  1. 长度8/16字节
  • 足够保存指针的32位或64位整数型:uintptr

  • 其它值类型

  1. array、struct、string
  • 引用类型
  1. slice、map、chan

-** 接口类型:interface**

  • 函数类型:func
  1. 在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的基本类型与变量的更多相关文章

  1. C# 异常:从作用域“”引用了“FiasHostApp.Entity.DBEntity.FIAS_RM_v1.ITraNetMgrUnitBaseInfoRecord”类型的变量“w”,但该变量未定义

    C# 异常:从作用域“”引用了“FiasHostApp.Entity.DBEntity.FIAS_RM_v1.ITraNetMgrUnitBaseInfoRecord”类型的变量“w”,但该变量未定义 ...

  2. JavaScript学习笔记-基础语法、类型、变量

    基础语法.类型.变量   非数字值的判断方法:(因为Infinity和NaN他们不等于任何值,包括自身) 1.用x != x ,当x为NaN时才返回true; 2.用isNaN(x) ,当x为NaN或 ...

  3. POJO类中的任何布尔类型的变量,都不要加is

    POJO类中的任何布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误. 定义为基本数据类型boolean isSuccess:的属性,它的方法也是isSuccess(),HSF框架在反向解 ...

  4. 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量

    多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...

  5. C#的类型、变量和值

    大学学了C#,工作也是使用C#,虽然在日常的开发中没什么大的问题,但个人觉得在C#的理解还不是很清晰,所以决定花一定的时间来理一理学过的知识,顺便革新下脑袋里的知识,因为坑爹的学校在教.net的时候, ...

  6. C#中隐式类型本地变量var

    在新接触的项目中,看到很多声明变量时用var.只记得在javascript中声明变量用var.今天在家里看C#和.Net高级编程,看到隐式变量这一块,就总结一下C# 中隐式变量var的用法. 1.C# ...

  7. javascript !!的作用是把一个其他类型的变量转成的bool类型

    !!的作用是把一个其他类型的变量转成的bool类型

  8. C# 类型和变量

    C# 中的类型有两种:值类型 (value type) 和引用类型 (reference type).值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象.对于引用类型 ...

  9. .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 ...

  10. JavaScript总体的介绍【JavaScript介绍、定义函数方式、对象类型、变量类型】

    什么是JavaScript? 我们可以从几个方面去说JavaScript是什么: 基于对象 javaScript中内置了许多对象供我们使用[String.Date.Array]等等 javaScrip ...

随机推荐

  1. 14:super关键字

    本小节知识点: 1.super基本概念 2.super的作用 1.super基本概念 super是个编译器的指令符号,只是告诉编译器在执行的时候,去调谁的方法. self是一个隐私参数; self r ...

  2. 探Java多线程Thread类和Runnable接口之间的联系

    首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说  有如下两种情 ...

  3. bootstrap2.1

    <html>   <head>   <meta charset="utf-8" />   <title></title> ...

  4. IE兼容性小结(IE7及以上版本)

    缘由 在急速的互联网时代,原本ie系列的低版本浏览器就该淘汰了.可偏偏还是有很多xp系统ie7.8浏览器,这有让网站甚是苦逼.练就了一套新技术,原本以为能大展身手,可却在ie阵容中认怂了,不得不规规矩 ...

  5. 清理MVC4 Internaet 项目模板清理

    新建项目时选择空的MVC项目 是没有Bundle 引用的非常痛苦,但是如果选择Internet模板 MVC4的模板会帮你添加一堆的JQuery 引用  打开NuGet Console 执行以下指令能帮 ...

  6. Python 一篇学会多线程

    多线程和多进程是什么自行google补脑,廖雪峰官网也有,但是不够简洁,有点晕,所以就整个简单的范例. 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用 ...

  7. Unity LuaFramework LuaBundleMode

    设置 AppConst.cs 中的 LuaBundleMode 为 true,开启 Lua 代码 AssetBundle 模式. 启动程序报错,Moudle XXX not found. 我在 Ass ...

  8. python 多版本管理pyenv和virtualenv虚拟开发环境

    pyenv是管理多个python版本的工具. 1.pyenv的安装 git clone https://github.com/yyuu/pyenv.git ~/.pyenv 2.将PYENV_ROOT ...

  9. D3.js (v3)+react框架 基础部分之认识选择集和如何绘制一个矢量图

    首先需要下载安装d3.js  :  yarn add d3 然后在组建中引入 :  import * as d3 from 'd3' 然后定义一个方法,在componentDidMount()这个钩子 ...

  10. POJ 2562

    #include<iostream> #include<algorithm> #define MAXN 15 using namespace std; //int rec[MA ...