Go 变量(var) & 常量(const)
变量
声明变量格式:
var var_name var_type
变量在声明时会自动初始化:
数字: 0
string: ""
bool: false
引用类型: nil
结构体: 所有元素或成员的零值
var 通常用于与初始化表达式类型不一致的局部变量、后面再赋值或初始值不重要的情况,否则可以使用更加简便的短变量声明
短变量声明
短变量声明更加简便,变量类型会通过变量初始值自动判断
短变量声明用于局部变量声明,最少声明一个变量
a := 1
多变量赋值
多个变量可以在一起赋值
var a, b, c int
d, e, f := 1, 2, "I'm F"
var(
a = 1
b int
)
局部变量
局部变量声明就必须使用,否则编译时会报错
// 可以先声明,再初始化
var a int
a = 1
// 可以在声明的同时进行初始化
var a int = 1
// Go 可以在初始化的时候自动判断变量类型,所以 int 可以省略
var a = 1
// var a = 1 的简略写法,同样会自动判断
a := 1
全局变量
全局变量声明后可以不使用,编译时不会报错
全局变量首字母必须大写,否则从其他包中就无法访问到
由于所有语句必须在函数中,所以无法通过 := 声明全局变量,全局变量只能通过 var 进行声明
var A int = 1
或者可以通过初始化函数对其进行初始化
var A int
func init() {
A = 3
}
只写变量 _
由于 Go 中不允许出现局部变量声明后不使用的情况,但是有时会出现需要接收一个值,但是之后又不会用到
如果直接声明一个变量去接收,由于之后没有用到,所以编译无法通过,这时就可以使用只写变量 _ 来接收之后用不到的值
变量作用域
函数内声明的变量是局部变量,只在函数内有效
函数外部声明的是全局变量,如果首字母小写,只能在当前包中访问;如果首字母大写,可以在其他包中访问到
变量的生命周期
变量的生命周期由变量是否可达决定
包级别变量的生命周期是整个程序的执行时间
局部变量的生命周期则不一定
逃逸
示例:
var global *int
func foo() {
x := 1
global = &x
}
虽然 x 是局部变量,但是由于 global 引用了 x,所以即使函数返回,x 仍然可达,不会被回收,这时 x 从 foo 中逃逸
常量
常量在编译时就会确定,之后无法修改
常量声明和变量相似,但是声明时必须要有值
格式:
const const_name const_type = value
变量的类型可以省略
多行声明:
const(
blog = "cnblogs.com/dbf-/"
Pi = 3.14159
)
计算表达式
常量可以使用计算表达式,但是只能用内置的常量计算表达式
const(
a = "123"
length = len(a)
)
自动填充
在给第一个常量赋值之后,如果之后的没有赋值,就会自动赋为上面的值
常量生成器 (iota)
声明常量时可以通过 iota 实现自增
示例:
package main
import "fmt"
const(
a = iota
b = "string"
c
d = iota
e
)
const(
f = iota
g
h
)
func main() {
fmt.Println(a, b, c, d, e)
fmt.Println(f, g, h)
}
输出结果:
0 string string 3 4
0 1 2
在一个 const 中使用 iota 后,就会自动从第一个开始计数,为之后每一个常量分配一个值,虽然中间被其他的赋值打断,但是计数器仍然在工作
在一个新的 const 中,计数器会重新计数
值类型
基本数据类型:int、float、bool、string、struct 等都是值类型
值类型中储存的就是值
内存通常在栈中分配
引用类型
指针、切片、map、chan 等都是引用类型
引用类型中储存的是内存地址,内存地址指向的才是值
内存通常在堆中分配
Go 变量(var) & 常量(const)的更多相关文章
- JS 的三种定义变量 var let const
Let 只在 let 命令所在的代码块内有效,在外就会报错 Let 是块级作用域,函数内部使用let定义后,对函数外部无影响 Let/const 不存在变量提升,使用前一定要声明后,在使用,否则会报错 ...
- 宏(define)与常量(const)
http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=402470669&idx=1&sn=e34db91190d8d46f ...
- ES6和ES5变量声明的区别(var let const)
// es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name=&quo ...
- javascript中var let const三种变量声明方式
javascript中var let const三种变量声明方式 1.var ①var表示声明了一个变量,并且可以同时初始化该变量. ②使用var语句声明的变量的作用域是当前执行位置的上下文:一个函 ...
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
- 石川es6课程---3、变量let和常量const
石川es6课程---3.变量let和常量const 一.总结 一句话总结: let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域 1.js中 ...
- 【JS学习】var let const声明变量的异同点
[JS学习]var let const声明变量的异同点 前言: 本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述 ...
- swift-var/let定义变量和常量
// Playground - noun: a place where people can play import UIKit //--------------------------------- ...
- Swift学习——变量var和let常量的用法(一)
Swift中的变量var和let常量 首先介绍一下Swift中的 var 和 let (1)var 是 variable的缩写形式,是变量的意思 ,是可改变的.并非数据类型 比如: 注意每一个语句后面 ...
随机推荐
- How to: Generate XPO Business Classes for Existing Data Tables 如何:为现有数据表生成 XPO 业务类
From the Tutorial and other documentation sources, you learned how to create business classes for yo ...
- APP爬虫(1)想学新语言,又没有动力,怎么办?
最近Python和GO语言很火,想学但是只能看得懂21天精通这种级别的教程.公司的项目暂时不会上py或go的技术栈,给的薪资福利待遇还可以,暂时又不想辞职.没有项目实战经验,完全看不懂大神写的干货,怎 ...
- Cocos2d-x游戏实例《忍者飞镖》之对象管理
推荐移步至<忍者飞镖射幽灵>之对象管理阅读 配置环境:win7+Cocos2d-x.2.0.3+VS2012 目标读者:需了解游戏帧率以及回调函数的概念 一.引言 对具体游戏demo的分析 ...
- SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理
本文源码:GitHub·点这里 || GitEE·点这里 一.FastDFS简介 1.FastDFS作用 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步 ...
- SpringCloud中Feign的适配器的实现方案
前言 最近在做微服务的项目,各个系统之间需要进行调用,然后用一个适配器来实现服务之间的feign调用,使用适配器进行统一管理. 实现方案 首先我们需要将服务的名称进行单独的配置,可以方便的进行切换和扩 ...
- 通过修改VAD属性破除锁页机制
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) 注释:因为自己的知 ...
- ActiveMQ学习总结------Spring整合ActiveMQ 04
通过前几篇的学习,相信大家已经对我们的ActiveMQ的原生操作已经有了个深刻的概念, 那么这篇文章就来带领大家一步一步学习下ActiveMQ结合Spring的实战操作 注:本文将省略一部分与Acti ...
- 关于hover与after,before已及first-letter,first-line的联用
0920自我总结 关于hover与after,before已及first-letter,first-line的联用 一.写法 元素:hover::after{样式} 元素:hover::before{ ...
- Kibana中文汉化支持
Kibana从6.6.0版本开始支持中文 参考:https://github.com/anbai-inc/Kibana_Hanization 汉化方法如下: 以现行最新版本7.2.0为例,测试机器为W ...
- 机器学习pipeline总结
# -*- coding: utf-8 -*- """scikit-learn introduction Automatically generated by Colab ...