既有适合小白学习的零基础资料,也有适合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()
常量
常量表示在程序运行过程中恒定不变的值。
声明
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
if err != nil {
fmt.Println(err)
}
file.Close()
常量
常量表示在程序运行过程中恒定不变的值。
声明
[外链图片转存中…(img-iXJIrYCG-1715835440334)]
[外链图片转存中…(img-63ID4dEk-1715835440335)]
[外链图片转存中…(img-JizYJD8n-1715835440335)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新