GO 语言的基础语法(二)

本文深入探讨GO语言的变量,包括值类型(如int、float、bool和string)和引用类型(slice、map、channel)。讨论了值类型与引用类型在拷贝操作和函数传参上的主要区别,以及变量的作用域、简短形式的赋值操作符和空白标识符的使用。此外,还介绍了GO常量的声明与特性。
摘要由CSDN通过智能技术生成

目录

GO 语言变量

3,值类型和引用类型

4,变量的作用域

5,简短形式,使用:=复制操作符

6,空白标识符

GO常量


GO 语言变量

3,值类型和引用类型

值类型:int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址。 值拷贝

引用类型:特指slice、map、channel这三种预定义类型。

引用类型拥有更复杂的存储结构:(1)分配内存 (2)初始化一系列属性等一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个字所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个字中。

两者的主要区别:拷贝操作和函数传参。

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

package main
​
import "fmt"
​
//变量在内存中的存储方式
​
var num int = 10   
var sum int = 20
​
func main() {
    //局部变量
    var test1 = "hello"
    var test2 = "world"
    fmt.Println("num=", num)
    //调用内存地址使用&
    fmt.Println("num的内存地址是", &num)
    fmt.Println("sun的内存地址是", &sum)
    //调用函数中的变量
    fmt.Println("test1的内存地址", &test1)
    fmt.Println(test2)
}
[Running] go run "f:\goProject\src\dev_code\day3\example1\main\main.go"
num= 10
num的内存地址是 0xd3a258  //全局变量,为每一个值开辟一个存储空间 (栈)
sun的内存地址是 0xd3a260  //为每一个值开辟一个存储空间 (栈)
test1的内存地址 0xc000088220  //函数中的变量,变量的值存放位置(堆)
world
​
[Done] exited with code=0 in 0.619 seconds

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

 


package main
​
import "fmt"
​
func main() {
    var a = 10
    var b = a
    fmt.Println("a的地址", &a)
    fmt.Println("b的地址", &b)
}
​
[Running] go run "f:\goProject\src\dev_code\day3\example2\main\main.go"
a的地址 0xc0000aa058   //值类型的变量,是把a的值有复制了一份放在内存中
b的地址 0xc0000aa070   //值类型的变量,是把a的值有复制了一份放在内存中(两个地址不同的)
​
[Done] exited with code=0 in 0.42 seconds

可以通过&i来获取变量i的内存地址,例如: 0X4840000040 (每次的地址都可能不一样) 。 值类型变量的值存储在堆中。 内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。因为每台机器可能有不同的存储器布局,并且位置分配也可能不同。

更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存, 指针、slice. map. chan都是引用类型。 一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个字所在的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值