Go最新Go 专栏 | 变量和常量的声明与赋值(2),Golang高级面试

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

var v2 string

var v3 bool

var v4 [10]int // 数组

var v5 []int // 数组切片

var v6 struct {

e int

}

var v7 *int // 指针

var v8 map[string]int // map,key 为 string 类型,value 为 int 类型

var v9 func(e int) int

fmt.Println(v1, v2, v3, v4, v5, v6, v7, v8, v9)

// 输出

// 0 false [0 0 0 0 0 0 0 0 0 0] [] {0} map[]

所以在 Go 中是不存在未初始化的变量的。

声明单个变量:

// 声明单个变量

var a = “initial”

fmt.Println(a)

// 声明布尔值变量

var d = true

fmt.Println(d)

一次声明多个变量:

// 声明多个变量

var b, c int = 1, 2

fmt.Println(b, c)

建议以组方式一次声明多个变量:

// 以组的方式声明多个变量

var (

b1, c1 int

b2, c2 = 3, 4

)

fmt.Println(b1, c1)

fmt.Println(b2, c2)

第二种方式是短变量声明:

name := expression

使用 := 来声明,Go 编译器会自动推断变量类型。注意 :== 的区别,前者是声明并赋值,后者是赋值。

这种初始化方式非常方便,在局部变量的声明和初始化时经常使用。

举个例子:

// 短变量声明方式

f := “short”

fmt.Println(f)

多个变量:

// 声明赋值多个变量

g, h := 5, “alwaysbeta”

fmt.Println(g, h)

有一点需要注意,多个变量声明时,最少有一个新变量,否则会报错。

var i int

// i := 100 // 报错 no new variables on left side of :=

i, j := 100, 101 // 有新值 j,不报错

fmt.Println(i, j)

第三种使用内置 new 函数:

p := new(T)

初始化为类型 T 的零值,并返回其地址。

先说一下如何获取变量的地址,其实很简单,使用取地址符 & 即可。

声明一个整型的变量,然后对其取地址:

// 指针

k := 6

l := &k // l 为整型指针,指向 k

fmt.Println(*l) // 输出 6

*l = 7

fmt.Println(k) // 输出 7

使用 new 函数声明变量:

// 使用内置函数 new 声明

var p = new(int)

fmt.Println(*p) // 输出整型默认值 0

*p = 8

fmt.Println(*p) // 输出 8

再来看一个例子,下面两个函数是等价的,唯一的区别就是使用 new 少声明了一个中间变量。

func newInt() *int {

return new(int)

}

func newInt1() *int {

var p int

return &p

}

赋值

使用 = 来赋值:

举例:

// 变量赋值

var m, n int

m = 9

n = 10

fmt.Println(m, n)

多重赋值:

// 变量赋值

var m, n int

m = 9

n = 10

m, n = n, m

fmt.Println(m, n)

这个特性真是很爽,想想在 C 语言中是不能这么做的,要实现相同的效果,必须要借助一个中间变量才行。

如果有不需要的变量,使用空标识符 _ 来忽略,在 Go 语言中,如果声明了变量而不使用,程序是会报错的。

// 空标识符

r := [5]int{1, 2, 3, 4, 5}

for _, v := range r {

// fmt.Println(i, v)

// fmt.Println(v) // 定义 i 但不用会报错 i declared but not used

fmt.Println(v) // 忽略索引

}

作用域

变量分为全局变量和局部变量,局部变量会覆盖全局变量:

// 全局变量

var gg = “global”

func main() {

// 作用域

fmt.Println(gg) // 输出 global

gg = “local”

fmt.Println(gg) // 输出 local

}

使用流程控制语句时,需要特殊注意变量的作用域:

// 条件分支下的作用域

if f, err := os.Open(“./00_hello.go”); err != nil {

fmt.Println(err)

}

f.Close() // 报错 f.Close undefined (type string has no field or method Close)

正确的写法:

// 正确写法

file, err := os.Open(“00_hello.go”)

if err != nil {

fmt.Println(err)

}

file.Close()

常量

常量表示在程序运行过程中恒定不变的值。

声明

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

if err != nil {

fmt.Println(err)

}

file.Close()

常量

常量表示在程序运行过程中恒定不变的值。

声明

[外链图片转存中…(img-iXJIrYCG-1715835440334)]
[外链图片转存中…(img-63ID4dEk-1715835440335)]
[外链图片转存中…(img-JizYJD8n-1715835440335)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值