变量使用注意事项

变量三种声明方式

var i int  //使用默认值
var num = 10.2 //类型推导
num := "tom" //左侧不能同名
//多变量声明
num, i, str := 10.1, 5, "tom"
//一次性声明多个全局变量
var n1 = 1
var (
n3 = 5
n4 = 4
) //一次性声明
  • 在go函数外部定义的变量就是全局变量
  • 区域内的数据之可以在同一范围(包括统一数据类型)内不断变化(重点)
  • 变量在同一个作用域内不能重名(在一个函数或一个代码块中)
  • 变量=变量名+值+数据类型

+的使用

  • 两边都是数字做加法运算
  • 两边都是字符串做字符串拼接

数据类型(重点)

数值类型,栈中存储

  1. 整型

    int8, int16 ,int32 ,int64

    uint8 uint16 uint32 uint64

    rune

    有符号,与int32一样,表示一个Unicode码

    byte

    无符号, 与uint8一样,当要存储字节时选用byte

    使用细节

    int uint大小与系统有关

    默认为int型

    查看字节大小和数据类型

    fmt.Printf("n 的类型为%T \n",n)

    fmt.Printf("n占用的字节数为%d",unsafe.Sizeof(n))//需引入unsafe包

    变量正在使用是遵守保大不保小,在保证程序正常运行情况下,尽量使用较小的数据类型,如:年龄

    bit是最小的存储单元

  2. 小数类型

    float64

    float32

    浮点数=符号位+指数位+位数位

    尾数部分可能丢失,造成精度损失

    浮点数都是有符号的

    使用细节

    有固定的的字段长度和范围,不收os(操作系统)的影响

    默认64位,推荐使用64位

    科学计数法,十进制法

    字符类型

    golang中没有字符类型,要存储单个字符,一般用byte来保存

    go的字符串有字节组成

    字符输出

    0-255,(0-1,a-z.A-Z)可用byte,超过要用int,格式化输出即可

    var c1 = "a" byte
    fmt.Printf("c1=%c",c1)
    var c2 int = "北"
    fmt.Printf("c2=%c,对应的ASCII至为%d",c2,c2)

使用细节

转义字符

字符采用UTF-8编码

字符本质是一个整数,直接输出是utf-8编码值,所以需格式化输出

字符通常用单引号括起来

存储:字符--->对应码值--->二进制--->存储

读取:二进制--->码值--->字符--->读取

  1. 布尔类型

    逻辑运算

  2. string类型

    	var str string = "我最帅!"
    fmt.Println(str)

使用细节

utf-8编码

字符串一旦赋值了就不能在修改,go中字符串是不可变的

字符串的两种表示

双引号

会识别转义字符

单引号

以字符串原生形式输出,包括转义字符,可现实防止攻击,输出源代码等效果

字符串+进行拼接

多行字符串+在每一行的末尾

  1. 数组

  2. 结构体

  3. 引用类型 (堆中存储当没有任何变量来引用他时,改地址对应的数据空间变成垃圾,由GC来回收)

    指针

    管道chan

    切片

    map

    interface

类型转换

go中无自动转换,必须显示转换

var i float64 = 50.23
var a int = float64(i)

可以从小到大,也可以从大到小

可能会溢出

基本数据类型转string类型

fmt.Sprintf("%参数",表达式) 返回转换后的内容

函数说明

func Sprintf根据format参数生成格式化字符串并返回该字符串

var num int = 5
str = fmt.Sprintf("%d",num1)
fmt.Printf("str type %T str = %q\n",str,str)

使用strconv包的函数

var num int = 99
var num2 float64 = 10.2
var b2 bool = true str = strconv.FortmatInt(int64(num1),10)
fmt.Printf("str = %q\n",str,str) str = strconv.FormatFloat(num2, 'f', 10, 64)
fmt.Printf("str = %q\n",str ,str) str = strconv.Bool(b2)
fmt.Printf("str = %q\n",str ,str)

还有一strconv.Itoa(int(num))

也可以转字符串

string转基本类型

使用strconv包的函数

bool类型

b, _ = strconv.PraseBool(str)

nt类型

n1 , _ =strconv.PraseInt(str, 10, 64)

float类型

f1, _=strconv.PraseFloat(str, 64)

因为strconv.PraseInt函数会返回两个值(value int, err error)

我只要第一个所以忽略第二个

具体用法可查看api文档

注意事项

转基本数据类型时要确保类型能转成有效的数据,如果没有转成功,会返回默认值0

指针

​ var ptr *int = &num

​ 值类型都有对应的指针类型,形式为 *数据类型,而值类型包括基本数据类型

标识符

​ _表示一个特殊标识符,称为空标识符,可带表其他任意标识符,所以只能占位使用,不能作为标识符使用

​ 包名:尽量保持package名和目录名一致,不要和标准库冲突

​ 首字母大写公开,小写私有

go-变量的更多相关文章

  1. 6 小时 Python 入门

    6 小时 Python 入门 以下操作均在 Windows 环境下进行操作,先说明一下哈 一.安装 Python 1.官网下载 Python 进入官网(https://www.python.org), ...

  2. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  3. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  4. Shell特殊变量

    $ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...

  5. Java多线程基础——对象及变量并发访问

    在开发多线程程序时,如果每个多线程处理的事情都不一样,每个线程都互不相关,这样开发的过程就非常轻松.但是很多时候,多线程程序是需要同时访问同一个对象,或者变量的.这样,一个对象同时被多个线程访问,会出 ...

  6. Js 变量声明提升和函数声明提升

    Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...

  7. PHP源码分析-变量

    1. 变量的三要素变量名称,变量类型,变量值 那么在PHP用户态下变量类型都有哪些,如下: // Zend/zend.h #define IS_NULL 0 #define IS_LONG 1 #de ...

  8. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  9. shell变量

    定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...

  10. 引人瞩目的 CSS 变量(CSS Variable)

    这是一个令人激动的革新. CSS 变量,顾名思义,也就是由网页的作者或用户定义的实体,用来指定文档中的特定变量. 更准确的说法,应该称之为 CSS 自定义属性 ,不过下文为了好理解都称之为 CSS 变 ...

随机推荐

  1. 解决CentOS7 Local time比实际时间相差8小时

    GPS系统中有两种时间区分,UTC就0时区的时间,CST为本地时间,如北京为早上八点(东八区),UTC时间比北京时晚八小时; CST:China Standard Time,UTC+8:00 中国沿海 ...

  2. Linux系统:Centos7环境搭建Redis单台和哨兵集群环境

    本文源码:GitHub·点这里 || GitEE·点这里 一.环境和版本 Linux:centos7 三台 三台Linux服务 192.168.72.129 192.168.72.130 192.16 ...

  3. NIO零拷贝的深入分析

    深入分析通过Socket进行数据文件传递中的传统IO的弊端以及NIO的零拷贝实现原理,及用户空间和内核空间的切换方式 传统的IO流程 在这个过程中: 数据从磁盘拷贝进内核空间缓冲区 从内核空间缓冲区拷 ...

  4. Python3爬取豆瓣网电影信息

      # -*- coding:utf-8 -*- """ 一个简单的Python爬虫, 用于抓取豆瓣电影Top前250的电影的名称 Language: Python3.6 ...

  5. Cesium专栏-绕点飞行效果(附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  6. selenium时间等待方法

    在UI自动化测试中,必然会遇到环境不稳定.网络慢等情况.当你觉得定位没有问题,但程序却直接报了元素不可见时,那你就需要思考是否因为程序运行太快或者页面加载太慢而造成了元素不可见,必须要再等待直至元素可 ...

  7. Python—创建进程的三种方式

    方式一:os.fork() 子进程是从os.fork得到的值,然后赋值开始执行的.即子进程不执行os.fork,从得到的值开始执行. 父进程中fork之前的内容子进程同样会复制,但父子进程空间独立,f ...

  8. CPU相关概念

    整部主机的重点在于中央处理器 (Central Processing Unit, CPU),CPU 为一个具有特定功 能的芯片, 里头含有微指令集,如果你想要让主机进行什么特异的功能,就得要参考这颗 ...

  9. itest(爱测试) 4.2.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

    itest 入选 2019 年度最受欢迎开源中国软件 开源工具的发展,离不开你我的支持,需要您投上宝贵的一票  去投票 itest 简介:查看简介 itest 开源敏捷测试管理,testOps 践行者 ...

  10. 问题解决:ImportError: No module named tensorflow

    环境: python3.5.3+pycharm2018.2EAP 问题描述: Pycharm编译报错 ImportError: No module named tensorflow 解决方法: ten ...