Golang 基础(三)

lexder · · 555 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。



变量

声明变量的一般形式是使用关键字 var,例如:

var indentifier type

例如:

var a int

var b bool

var str string

或者

var (

    a int

    b bool

    str string

)

当一个变量被声明后,系统自动对它进行赋值:

    int 为 0

    float 为 0.0

    bool 为 false

    string 为 空字符串

    指针 为 nil

所有的内存在Go中都是经过初始化的,比如:

    定义一个int类型的变量power,如果我们不给变量power指定值,Go会为变量power分配默认值0。

        var power int // 定义power为0

        var power int = 9000 // 赋值power为9000

对于变量的赋值而言,这个写法过于冗长,Go提供了一个短变量声明运算符 :=

        power := 9000

短变量声明运算符可以自动识别变量类型,但是作为一个声明运算符,不能使用 := 对相同的变量ongoing在同一个作用域中声明两次,倘若在声明之后需要进行对变量的值的修改,需要使用 = 。

    多变量赋值,例如:

        name, power := "google.com", 8080

注:Go是一个简洁的代码,它不能存在未被使用的变量,因此如果声明的变量或者引入的包未被使用,它会报错,某些IDE会在插件的帮助是直接自动删除这些未被使用的变量和包。


值类型

值类型包含int、float、bool、string、数组和结构等,使用这些类型的变量直接指向内存中的值。

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

通过使用 & 可以获取变量的内存地址,值类型的变量的值存储在栈中。内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。


引用类型

复杂的数据通常会使用较多个内存地址,这些数据一般使用引用类型保存。

引用类型包含指针、slices、maps和channel。被引用的类型存储在堆中,以便垃圾回收, 并且比栈拥有更大的内存空间

一个引用类型的变量r1存储的是r1的值所在的内存地址,或内存地址中第一个字所在的位置。这个内存地址被称为指针,这个指针实际上也存在了另外的某一个地址中。

例如:

package main

import ( 

    "fmt"

func main() { 

    var r1 int // 定义一个int字符,&r1为其地址

    var r2 *int // 定义一个指针类型r2,*r2为其值

    r1 = 2 // 定义r1的值为2

    r2 = &r1 // 定义r2是指向r1的指针

    fmt.Println(r1, &r1) // 输出 2 0xc000014098

    fmt.Println(r2, *r2) // 输出 0xc000014098 2

}

注:&r1和r2的地址指向同一个地址,另外输出的地址,各个电脑的内存储存位置不一致,所以输出也不一定一样


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:lexder

查看原文:Golang 基础(三)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

555 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传