go-变量
变量使用注意事项
变量三种声明方式
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函数外部定义的变量就是全局变量
- 区域内的数据之可以在同一范围(包括统一数据类型)内不断变化(重点)
- 变量在同一个作用域内不能重名(在一个函数或一个代码块中)
- 变量=变量名+值+数据类型
+的使用
- 两边都是数字做加法运算
- 两边都是字符串做字符串拼接
数据类型(重点)
数值类型,栈中存储
整型
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是最小的存储单元小数类型
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编码值,所以需格式化输出
字符通常用单引号括起来
存储:字符--->对应码值--->二进制--->存储
读取:二进制--->码值--->字符--->读取
布尔类型
逻辑运算string类型
var str string = "我最帅!"
fmt.Println(str)
使用细节
utf-8编码
字符串一旦赋值了就不能在修改,go中字符串是不可变的
字符串的两种表示
双引号
会识别转义字符
单引号
以字符串原生形式输出,包括转义字符,可现实防止攻击,输出源代码等效果
字符串+进行拼接
多行字符串+在每一行的末尾
数组
结构体
引用类型 (堆中存储当没有任何变量来引用他时,改地址对应的数据空间变成垃圾,由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-变量的更多相关文章
- 6 小时 Python 入门
6 小时 Python 入门 以下操作均在 Windows 环境下进行操作,先说明一下哈 一.安装 Python 1.官网下载 Python 进入官网(https://www.python.org), ...
- In-Memory:在内存中创建临时表和表变量
在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- Shell特殊变量
$ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...
- Java多线程基础——对象及变量并发访问
在开发多线程程序时,如果每个多线程处理的事情都不一样,每个线程都互不相关,这样开发的过程就非常轻松.但是很多时候,多线程程序是需要同时访问同一个对象,或者变量的.这样,一个对象同时被多个线程访问,会出 ...
- Js 变量声明提升和函数声明提升
Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...
- PHP源码分析-变量
1. 变量的三要素变量名称,变量类型,变量值 那么在PHP用户态下变量类型都有哪些,如下: // Zend/zend.h #define IS_NULL 0 #define IS_LONG 1 #de ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- 引人瞩目的 CSS 变量(CSS Variable)
这是一个令人激动的革新. CSS 变量,顾名思义,也就是由网页的作者或用户定义的实体,用来指定文档中的特定变量. 更准确的说法,应该称之为 CSS 自定义属性 ,不过下文为了好理解都称之为 CSS 变 ...
随机推荐
- 【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至63章(2019-07-21)
说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.由于是基于HAL库的文档,所以不限制H7系列,其它F1,F2,F3,F4 ...
- laravel 5.5.39 升级到 5.5.45 出现 cookie 序列化异常问题的解决
把项目里的 laravel 5.5.39 升级到 5.5.45 后,出现如下报错: ErrorExceptionopenssl_encrypt() expects parameter 1 to be ...
- springaop\ cglib\ AspectJ
元编程 vs 动态代理 vs isa代理 springaop的底层实现有两种,一种是jdk的动态代理,另一种是cglib,springaop没有用到aspectj,只是借鉴了它并添加了aspectj风 ...
- 小知识:设置sqlplus默认vi编辑器的好处
如果是客户生产环境,不允许修改任何环境类的配置,那发现sqlplus默认不是我们熟悉的vi,可以在SQL>下临时指定,方便操作: SQL> define_editor=vi SQL> ...
- audio标签以及audio对象
一.audio标签 简单语法 <audio src="音频链接"></audio> 属性 属性 值 描述 autoplay 如果出现该属性,则音频在就绪后马 ...
- Winform中设置ZedGraph鼠标悬浮显示举例最近曲线上的点的坐标值和X轴与Y轴的标题
场景 Winform中设置ZedGraph鼠标双击获取距离最近曲线上的点的坐标值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/ ...
- Java SSM 商户管理系统 客户管理 库存管理 销售报表 项目源码
需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家 ...
- 代码审计 => 74cms_v3.5.1.20141128 一系列漏洞
0x01 前言 最近开始在学习代码审计了,以前几次学习代码审计都因为不知道如何下手,和代码的复杂就放弃了,这一次算是真正的认真学习,同时seay所编写的<代码审计 企业级Web代码安全架构> ...
- Thymeleaf常用语法:自定义数据转换类
在模板文件中,可以使用“${{...}}”表达式进行数据转换,Thymeleaf会使用配置好的数据转换类,来实现转换.例如一个User对象,简单起见假设有姓名和年龄两个字段,对象的toString() ...
- [转载] Java的四种引用关系
目录 1 强引用 (Final Reference) 2 软引用 (Soft Reference) 2.1 案例1: 软引用的垃圾回收 2.2 案例2: 软引用缓存的使用 2.3 软引用的应用场景 3 ...