参考菜鸟编程Go 语言常量 | 菜鸟教程
1. =与:=
:= 符号用于变量声明和初始化。定义一个新的变量并进行赋值,例如:x := 1,自动推导出左边变量的类型,并赋值。需要注意的是,:= 只能在函数内部使用,在函数外部只能使用 var 关键字。
= 符号用于变量赋值操作。它将右边的值赋给左边的变量,例如:x = 20。需要注意的是,= 运算符只执行赋值操作,不会对变量类型进行推导,需要使用var声明。
(1)var x int = 1
(2)var x = 1
(3)var x
x = 1
对于两个变量v, v2 := fu(xx) 与 v, v3 := fu(xx)不会报错,只要有一个新声明就行。
2. _
空白标识符 _ 也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。
_ 实际上是一个只写变量,不能得到它的值。 Go 语言中必须使用所有被声明的变量,但有时并不需要使用从一个函数得到的所有返回值.
3.内置函数
const常量函数只能内置函数(len(xx), cap(xx).),unsafe.Sizeof(xx)返回数据类型的大小,不返回引用数据大小,比如String是在64位系统占16个字节。
4.iota特殊常量
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
iota 可以被用作枚举值,每当在新一行使用就会+1
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)//0 1 2 ha ha 100 100 7 8
}
左移。 1<<0=1,3<<1=6(二进制11->110)
package main
import "fmt"
const (
i=1<<iota
j=3<<iota
k //3<<2
l //3<<3
)
func main() {
fmt.Println("i=",i) //1
fmt.Println("j=",j) //6
fmt.Println("k=",k) //12
fmt.Println("l=",l) //24
}
5.条件语句
select类似switch,但会随机执行一个可运行的case,没有可运行的阻塞至有可运行的case
Go没有三目运算符?:
6.全局变量和局部变量
Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑
7.数组
在 Go 语言中,数组的大小是类型的一部分,因此不同大小的数组是不兼容的,也就是说 [5]int 和 [10]int 是不同的类型。
var shuzu = [5]int{1,2,3,4,5}
var a int = 1
// 将索引为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}
8.输出
%x. 地址
%T 类型
%s. %d
9.结构体
type test struct{ name string}
test t1
t1.name
*test t2=&t1
t2.name
10.切片
对数组的抽象,一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
var identifier []type
或者make
var slice1 []type = make([]type, len)
也可以简写为
slice1 := make([]type, len)
也可以make([]type,len cap)
基于原数组或者切片创建一个新的切片后,那么新的切片的大小和容量是多少呢?
对于底层数组容量是 k 的切片 slice[i:j] 来说:
长度: j-i 容量: k-i
11.range范围
在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
range 迭代字符串时,返回每个字符的索引和 Unicode 代码点(rune)(字符值)
for key,value := slice1{
new slice[key] = value}
12.map
定义
/* 使用 make 函数 */
map_variable := make(map[KeyType]ValueType, initialCapacity)
map1 := make(map[string]string,10)
map1["aa"]="apple"
// 删除键值对
delete(m, "apple")
13.类型转换(¥需要再详细了解一下)
https://www.runoob.com/go/go-type-casting.html
14.接口(¥需要再详细了解一下)
Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。因此,我们可以通过将接口作为参数来实现对不同类型的调用,从而实现多态。
空接口 interface{} 可以持有任何类型的值。在实际应用中,空接口经常被用来处理多种类型的值。
15.