标签:初始 第一个 byte 使用 就会 nbsp tab ring 划线
定义变量时,我们定义了: name、age 这样的名字,它们都是程序员自己起的,能够表达出变量的作用,这叫做标识符(Identifier)
标识符就是程序员自己起的名字,名字也不能随便起,要遵守规范,在Go语言中标识符由
Go语言保留的标识符,25个相对其他语言来很少
func | return | defer | go | if |
else | for | range | continue | goto |
break | switch | select | case | default |
chan | fallthrough | package | import | var |
const | type | interface | map | struct |
关键字(Keywords)是由Go语言规定的具有特定意义的字符串,通常也称为保留字,例如 int、string、float64 等。
我们定义的标识符不能与关键字相同,否则会出现错误。---> 你也可以将关键字理解为具有特殊含义的标识符,它们已经被系统使用,我们不能再使用了。
内建常量:
true false iota
内建变量:
nil
内建类型:
int int8 int16 int32 int64 uint
uint8 uint16 uint32 uint64 uintptr float32
float64 complex128 complex64 bool byte rune
string error
内建函数:
make len cap new append copy close
delete complex real imag panic recover
更多:https://golang.org/pkg/builtin/#pkg-variables
从字面意思理解一个是变化、一个是常态的
什么是变量
我们的程序运行的时候都是存储在内存中的,要想从内存中取出数据的先知道数据存放在哪里!内存地址类似与0x00000000,如果让你在代码中这么使用数据感觉如何?
Go语言帮我们做了个映射你不需要管数据存在哪里,你只需要知道怎么给数据取个名字并用这个名字进行数据的操作即可
好比有人问你家住哪里?
你说:北纬:xxx°7‘5" 东经 xxx°15’29" ---->坐标系统(是描述物质存在的空间位置)
我的天啊谁记得住,变量就好比地名了:我家住:北京_XXXX小区
变量类型
每个变量都有一个类型,这个类型的作用对我们而言就是帮助开发者规避一些错误
举个例子来说:你是男生你只能去男生宿舍 , 你是女生只能进女生宿舍 , 给宿舍定义一个类型,就不容出现混乱男生跑女生宿舍区 - - !
变量声明
Go语言中要使用一个变量需要先声明这个变量,同一个作用域不能有相同的变量。 好比有一块地,你的先命名了【某某某小区】,以后用的时候XX小区就是去这块地
标准变量声明:Go语言的变量声明格式为
# var 变量名 变量类型 var name string var age int var isMan bool
批量变量声明:每个变量都写个var看着有点乱且繁琐可以简化为下面的方式
var (
name string
age int
isMan bool
)
变量初始化
Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值(零值)例如:
# var 变量名 类型 = 表达式 var name string = "帅哥" var age int = 18 # 一次初始化多变量 var name, age = "帅哥", 18
类型推导
有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化
# var 变量 = 表达式 var name = "帅哥" var age = 18
简短声明
在函数内部,可以使用更简短的 :=
方式声明并初始化变量
package main import "fmt" func main() { name := "帅哥" age := 18 fmt.Println(name, age) }
匿名变量(没有名字的变量)
如果想忽略某个值可以使用,匿名变量(anonymous variable)匿名变量用一个下划线"_"
表示,例如
例1:
package main import "fmt" func main() { // 给3这个值声明并赋值给一个: 匿名变量(标识忽略它) a, b, _ := 1, 2, 3 fmt.Println(a, b) }
例2:
package main import "fmt" func main() { // 函数echo返回两个值,我们把第一个值赋值给name // 第二个值赋值给匿名变量 name, _ := echo() fmt.Println(name) } func echo() (string, int) { return "帅哥", 18 }
小结:
常量与变量的区别
package main import "fmt" const PROJECT_NAME = "project" // 可以同时定义多个常量 const ( LISTING_PORT = 80 LOG_PATH = "/opt/project/log/" ) func main() { // WEB_SITE = 10 fmt.Println(LISTING_PORT, LOG_PATH, PROJECT_NAME) }
package main import "fmt" const ( // 定义常量组时,如果不提供初始值,则表示将使用上行的表达式 N1 = 10 N2 N3 N4 = 20 N5 N6 ) func main() { fmt.Println(N1,N2,N3,N4,N5,N6) } // 结果:10 10 10 20 20 20
iota常量计数器
iota是常量的计数器,从0开始,组中每定义一个常量,自动递增1
package main import "fmt" const ( N1 = iota N2 N3 ) func main() { fmt.Println(N1,N2,N3) } // 输出:0 1 2
每遇到一个const关键字(常量组外),iota就会重置为0
package main import "fmt" const ( N1 = 10 N2 N3 N4 = iota N5 N6 ) const ( L1 = iota L2 L3 L4 ) func main() { fmt.Println(N1, N2, N3, N4, N5, N6) fmt.Println(L1, L2, L3, L4) } // 输出: // 10 10 10 3 4 5 // 0 1 2 3
常量组内如果省略了值,默认使用上一个表达式
package main import "fmt" const ( // 输出偶数 N0 = iota * 2 N1 N2 N3 N4 ) func main() { fmt.Println(N0, N1, N2, N3, N4) } // 输出:0 2 4 6 8
其他例子
跳过某个值
package main import "fmt" const ( N0 = iota * 2 N1 = 10 N2 // 跳过某个值 _ N4 ) func main() { fmt.Println(N0, N1, N2, N4) }
声明插队并通过iota进行续接
package main import "fmt" const ( N0 = iota N1 = 10 N2 = iota N3 N4 ) func main() { fmt.Println(N0, N1, N2, N4) } //输出:0 10 2 4
标签:初始 第一个 byte 使用 就会 nbsp tab ring 划线
原文地址:https://www.cnblogs.com/luotianshuai/p/12436883.html