golang学习(2)----变量

任何一门语言中最基础的就是变量了,如果把内存比为一格一格整体排列的储物箱,那么变量就是每个储物箱的标识,我们通过变量来访问计算机内存。

关于定义变量的三种方式
1.

package main

import "fmt"

func main() {
    var a int = 1
    fmt.Println(1)
}
// 1
  1. 第二种
    前面使用了 var 关键字,它就是用来显式定义变量的。在变量名称a 后面声明了变量的类型为整形 int,然后再给它赋上了一个初值 1。就像js啥的一样吧。上面的变量定义还可以简化,将类型去掉,因为编译器会自动推导变量类型,效果也是一样的
package main

import "fmt"

func main() {
    var a = 1
    fmt.Println(1)
}
// 打印出1
  1. 上面的变量定义还可以再一次简化,去掉 var 关键字。不过这样的话通常是写在方法内部,并不是作为全局变量啥的。赋值的等号变成了 :=,它表示变量的「自动类型推导 + 赋值」
    之前我也不是很习惯第三种方法,然后其实写着写着就习惯了。
package main

import "fmt"

func main() {
    a := 1
    fmt.Println(a)
}
// 打印出1
  1. 全局变量和局部变量
    go语言中的局部变量值在函数中的变量,函数调用结束它就消失了,与之对应的是全局变量,程序没有停止,就不会消失。
package main

import "fmt"

var globalValue int = 11

func main() {
    var localValue int = 22
    fmt.Println(globalValue, localValue)
}

同样,如果全局变量的首字母是大些的话,和方法名差不多的,大些就是公开的,小写就是私有的,只有当前包内的代码可以访问到。

  1. 变量与常量
    Go 语言提供了常量关键字 const,用于定义常量。常量可以是全局常量也可以是局部常量。常量必须初始化,因为它无法二次赋值。全局常量的大小写规则和变量是一致的。
package main

import "fmt"

const globali int = 11

func main() {
    const locali int = 12
    fmt.Println(globali, locali)
}
  1. 指针类型
package main

import "fmt"

func main() {
    var value int = 42
    var pointer *int = &value
    fmt.Println(pointer, *pointer)
}

// 输出  0xc4200160a0 42

指针变量本质上就是一个整型变量,里面存储的值是另一个变量内存的地址。* 和 & 符号都只是它的语法糖,是用来在形式上方便使用和理解指针的。* 操作符存在两次内存读写,第一次获取指针变量的值,也就是内存地址,然后再去拿这个内存地址所在的变量内容。在这里插入图片描述

如果普通的变量是一个储物箱,那么指针变量就是另一个储物箱,这个储物箱里存放了普通变量所在储物箱的钥匙。

同时,要是交换两个变量的就方便多了。
这样

	i, j = j, i
这样的话,好像不用引入第三个变量作为交换条件了。

以及对于一些不太想用到的变量可以使用匿名变量。

func GetName() (firstName, lastName, nickName string) { 
	return "May", "Chan", "Chibi Maruko"
}
对了,这里有个要注意的点,那就是[这个符号要跟在)后面,不能单独一行。
若只想获得nickName,则函数调用语句可以用如下方式编写:
    _, _, nickName := GetName()

基础数据类型。

package main

import "fmt"

func main() {
    // 有符号整数,可以表示正负
    var a int8 = 1 // 1 字节
    var b int16 = 2 // 2 字节
    var c int32 = 3 // 4 字节
    var d int64 = 4 // 8 字节
    fmt.Println(a, b, c, d)

    // 无符号整数,只能表示非负数
    var ua uint8 = 1
    var ub uint16 = 2
    var uc uint32 = 3
    var ud uint64 = 4
    fmt.Println(ua, ub, uc, ud)

    // int 类型,在32位机器上占4个字节,在64位机器上占8个字节
    var e int = 5
    var ue uint = 5
    fmt.Println(e, ue)

    // bool 类型
    var f bool = true
    fmt.Println(f)

    // 字节类型
    var j byte = 'a'
    fmt.Println(j)

    // 字符串类型
    var g string = "abcdefg"
    fmt.Println(g)

    // 浮点数
    var h float32 = 3.14
    var i float64 = 3.141592653
    fmt.Println(h, i)
}

-------------
1 2 3 4
1 2 3 4
5 5
true
abcdefg
3.14 3.141592653
97
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值