前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小白学Go| 说说Go中变量那些事~

小白学Go| 说说Go中变量那些事~

作者头像
Python进击者
发布2020-07-21 14:54:11
3730
发布2020-07-21 14:54:11
举报
文章被收录于专栏:JAVAandPython君

变量

可以一次定义一个变量,也可定义多个变量

代码语言:javascript
复制
package main

import "fmt"
func main() {
 var a string = "Ekko"
 fmt.Println(a)

 var b, c int = 1, 2
 fmt.Println(b, c)
}

输出结果:

代码语言:javascript
复制
Ekko
1 2

变量声明

第一种,指定变量类型,如果没有初始化,则变量默认为零值。零值就是变量没有做初始化时系统默认设置的值。

代码语言:javascript
复制
package main
import "fmt"
func main() {

    // 声明一个变量并初始化
    var a = "Ekko"
    fmt.Println(a)

    // 没有初始化就为零值
    var b int
    fmt.Println(b)

    // bool 零值为 false
    var c bool
    fmt.Println(c)
}
代码语言:javascript
复制
>Ekko
>0
>false

关于零值的说明:

  • 数值类型:0
  • 布尔类型:flase
  • 字符串:“”(空字符串)
  • 以下的几种类型为nil
代码语言:javascript
复制
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口

实例:

代码语言:javascript
复制
package main

import "fmt"

func main() {
    var i int
    var f float64
    var b bool
    var s string
    fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

输出结果:

代码语言:javascript
复制
0 0 false ""

第二种,根据值自行判定变量类型。

代码语言:javascript
复制
var v_name = value

实例

代码语言:javascript
复制
package main
import "fmt"
func main() {
  var d = true
  fmt.Println(d)
}

输出结果是:

代码语言:javascript
复制
true

第三种,省略 var, 注意 := 左侧如果没有声明新的变量,就产生编译错误,格式:

代码语言:javascript
复制
v_name := value

例如:

代码语言:javascript
复制
var intVal int 

intVal :=1 // 这时候会产生编译错误

intVal,intVal1 := 1,2 // 此时不会产生编译错误,因为有声明新的变量,因为 := 是一个声明语句

可以将 var f string = "Ekko" 简写为 f : "Ekko":

实例

代码语言:javascript
复制
package main
import "fmt"
func main() {
  f := "Ekko" // var f string = "Ekko"

  fmt.Println(f)
}

输出结果是:

代码语言:javascript
复制
Ekko

多变量声明

代码语言:javascript
复制
//类型相同多个变量, 非全局变量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3

var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要显示声明类型,自动推断

vname1, vname2, vname3 := v1, v2, v3 // 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误


// 这种因式分解关键字的写法一般用于声明全局变量
var (
    vname1 v_type1
    vname2 v_type2
)

实例

代码语言:javascript
复制
package main

var x, y int
var (  // 这种因式分解关键字的写法一般用于声明全局变量
    a int
    b bool
)

var c, d int = 1, 2
var e, f = 123, "hello"

//这种不带声明格式的只能在函数体中出现
//g, h := 123, "hello"

func main(){
    g, h := 123, "hello"
    println(x, y, a, b, c, d, e, f, g, h)
}

以上实例执行结果为:

代码语言:javascript
复制
0 0 0 false 1 2 123 hello 123 hello

值类型和引用类型

所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值:

当使用等号 = 将一个变量的值赋值给另一个变量时,如:j = i,实际上是在内存中将 i 的值进行了拷贝:

你可以通过 &i 来获取变量 i 的内存地址,例如:0xf840000040(每次的地址都可能不一样)。值类型的变量的值存储在栈中。

内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。因为每台机器可能有不同的存储器布局,并且位置分配也可能不同。

更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。

一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。

这个内存地址为称之为指针,这个指针实际上也被存在另外的某一个字中。

同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率最高的一种存储形式;也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址。

当使用赋值语句 r2 = r1 时,只有引用(地址)被复制。

如果 r1 的值被改变了,那么这个值的所有引用都会指向被修改后的内容,在这个例子中,r2 也会受到影响。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 变量声明
  • 多变量声明
  • 值类型和引用类型
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档