yeziruo

利欲驱人万火牛 江湖浪迹一沙鸥

Date: 1543119360

变量

声明

在Go中这样来声明变量:

var Name Type [ = value]  //不指定默认值,默认为零值
var Name = [ = value]
var (
a int = 0
b string = "test"
)

或这样简单的声明,这种方法只能用在函数(或方法)中:

Name := value  //自动判断类型
Name1,Name2 := value1,value2

变量类型与命名规则请看上一篇文章。

存储与生存期

Go语言提供自动内存管理,通常不需要特别关注变量的生存期和存放位置。Go使用了栈逃逸技术能为变量自动分配空间:可能在栈上,有可能在堆上。
关于栈逃逸技术:https://studygolang.com/articles/10026

类型转换

在Go中,不同于js之类的语言,不同类型的变量要类型转换:

TypeName(expression)  //expression:表达式或变量名

例:

var a int = 1
var b int8 = 2

a = b  //非法
a = int(b)

常量

常量中的内容不可改变:

const Name [ = value/iota]

例:

const (Name1 = iota  //Name1 = 0
       Name2  //Name2 = 1
)
//关于iota请看上一篇文章

指针

Go支持指针,也支持多级指针,指针的声明类型为T(多级:*T),在变量名前加&来获取地址:

var a = 233
b := &a
println(a)
println(b)
println(*b)
//值打印结果
233
0x11f3bfb4  //内存地址
233

又一个例子:

package main
func test(a,b int) *int {
    c := a * b  //c的作用域在函数内
    println(&c)
    return &c
}
func main() {
    p := test(2,3)
    println(p)
}
//打印结果
0x1233bfb8
0x1233bfb8
//Go编译器使用栈逃逸使这种局部变量空间分配到栈上。

由于Go的垃圾回收机制,所以Go不支持指针运算。

数组

声明

var Name [Size]type

例:

arr := [3]int{1,2,3}
arr2 := []int{1,2,3,4,5,6,7}  //自动判断长度
arr3 := [3]int{1:1,2:3}  //指定默认值,没有指定的使用类型默认值
arr4 := []int{1:2,6:4}  //指定判断长度,由最大决定

特性

  1. 数组一旦创建就固定了,不能再追加元素
  2. 数组是值类型的,数组赋值或做为函数参数都是值拷贝
  3. 数组长度是数组的组成部分,[10]int != [20]int
  4. 可根据数组创建切片

元素访问

a := [...]int{1,2,3}
for index,value := range a {
    fmt.Println(value)
}

数组长度

len(Name)

range

Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对的 key 值。

其他要说的

字符串运算

参考:

  1. https://blog.csdn.net/hatlonely/article/details/79156311
  2. https://www.cnblogs.com/yshyee/p/8810931.html

控制结构

啊?这么快就到for了?

暂无评论

正在回复ID为 ??? 的评论

© 2013-2022 yeziruo. All Rights Reserved. Start5 theme by yeziruo.

CC BY-NC-SA 3.0 CN