Go语言-1-标识符与变量
1. Go标识符
编程语言的标识符是用来标识变量、类型、常量等语法对象的符号名称。一般分两类:语言设计者预留标识符,编程者自定义标识符
Go语言标识符规则:数字、字母、下划线组成,开头必须是字母或下划线。
注意:Go语言区分大小写。
1.1 Go关键字
关键字是指语言设计者保留的有特定语法含义的标识符。在Go语言中,一种只有25个关键字,分3类:
引导程序整体结构的关键字:8个
package
import
const
var
func
defer
go
return
声明复合数据结构的关键字:4个
struct
interface
map
chan
控制程序结构的关键字:13个
if else
for range break continue
switch select type case default fallthrough
goto
1.2 常量标识符(4个)
true false
iota
nil
1.3 空白标识符(1个)
_ (也就是下划线)
1.4 内置数据类型标识符
数值(16个)
整型(12个):
byte int int8 int16 int32 int64
unit unit8 uint16 uint32 uint64 uintprt
浮点型(2个) :
float32 float64
复数型(2个):
complex64 complex128
字符和字符串型(2个)
string rune
接口型(1个)
error
布尔型(1个)
bool
Go是一种强类型静态编译型语言,在定义变量和常量时,需要显示的指出数据类型,当也Go其实可以自动推导出数据类型,这个见后面声明变量。
1.5 内置函数(15个)
make new len cap append copy delete panic recover close complex real image print println
2. Go语言操作符
Go语言一共有47个操作符,分8类:
算术运算符(5个):
+ - * / %
位运算符(6个):
& | ^ &^ >> <<
赋值类运算符(13个):
:= = += -= *= /= %= &= |= ^= >>= <<=
比较运算符(6个):
> >= < <= == !=
括号(6个):
( ) [ ] { }
逻辑运算符(3个):
&& || !
自增自减操作符(2个):
++ --
- 其他运算符(6个):
- , ; . ... <-
3. Go语言变量
变量: 使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义变量时指定的类型决定,该内存地址里面存放的内容可以改变。
3.1 声明变量的两种方式:
显示的完整声明:
var varName dataType [= value] 说明:var 用于声明变量;varName时变量名字;dataType是变量类型;value是变量初始值。
短类型声明:
varName := value 说明:声明变量同时赋初始值,没有声明变量类型,因为Go会根据初始值自动推导出数据类型。:= 这种声明只能出现在函数(方法)内。
在使用显示完整声明同时声明多个变量时,我们可以简写如下,(一般在声明全局变量时这样用):
var (
a int = 10
b string = "example"
c bool
拉拉 int
)
这种叫因式分解关键字的写法,一般用于声明全局变量,一般在func 外定义。它等同于:
var a int = 10
var b string = "example"
var c bool
var 拉拉 int
3.2 关于声明变量的一些说明
1、首先,中文也可以做变量名,然后,string必须使用双引号,单引号会报错。
2、当一个变量被var声明之后,若没有赋予初始值,系统自动赋予它该类型的零值。
int 为 0
float 为 0.0
bool 为 false
string 为空字符串""
指针为 nil
3、多变量可以在同一行进行赋值,也称为 并行 或 同时 或 平行赋值。如:
a, b, c = 5, 7, "abc"
改为简式声明:
a, b, c := 5, 7, "abc"
4、如果你想要交换两个变量的值,则可以简单地使用:
a, b = b, a
3.3 声明变量的一些坑
1、在函数内声明了变量,则一定要使用它,否则会编译失败。但声明全局变量,不使用是没问题的。为了避免有未使用的变量导致代码编译失败,我们可以将该未使用的变量改为下划线标记符 _ 。
2、同样,在Go语言中,如果引入的包未使用,也不能通过编译。有时我们需要引入的包,比如需要init(),或者调试代码时我们可能去掉了某些包的功能使用,你可以添加一个下划线标记符 _ 来作为这个包的名字,从而避免编译失败。
package main
import (
"fmt"
_ "time"
)
var (
a int = 10
b string = "example"
c bool
拉拉 int
)
func main() {
fmt.Println("hello word")
}
3、要注意的是:全局变量和简式声明的变量尽量不要同名,否则很容易产生偶然的变量隐藏Accidental Variable Shadowing。
3.4 关于零值nil
nil 标志符用于表示interface、函数、maps、slices、channels、error、指针等的“零值”。如果你不指定变量的类型,编译器将无法编译你的代码,因为它猜不出具体的类型。
package main
func main() {
var x = nil // 错误
_ = x
}
在一个 nil 的slice中添加元素是没问题的,但对一个map做同样的事将会生成一个运行时的panic:
package main
func main() {
var m map[string]int
m["one"] = 1 //这里将会出错 error
}
字符串不会为 nil ,因为字符串的零值是空字符串 "" 。
这对于经常使用 nil 分配字符串变量的开发者而言是个需要注意的地方。
var str string = ""
根据前面的介绍,其实这样写和上面的效果一样:
var str string
Go语言-1-标识符与变量的更多相关文章
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...
- Go语言规格说明书 之 变量声明(Variable/Short variable declarations)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...
- go标识符、变量、常量
标识符 标识符是用来表示Go中的变量名或者函数名,以字母或_开头.后可跟着字母.数字. _ 关键字 关键字是Go语言预先定义好的,有特殊含义的标识符. 变量 1. 语法:var identifier ...
- Problem J: 零起点学算法105——C语言合法标识符
#include<stdio.h> #include<ctype.h>//调用isalpha函数 int main() { int n; ]; while(scanf(&quo ...
- HDOJ2024C语言合法标识符
C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 1164: 零起点学算法71——C语言合法标识符(存在问题)
1164: 零起点学算法71——C语言合法标识符 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 10 ...
- GLSL语言内置的变量详解
GLSL语言内置的变量,包括内置的顶点属性(attribute).一致变量(uniform).易变变量(varying)以及常量(const),一方面加深印象,另一方面今天的文章可以为以后的编程做查询 ...
- 大数据学习--day02(标识符、变量、数据类型、类型转换、进制转换、原码反码补码)
标识符.变量.数据类型.类型转换.进制转换.原码反码补码 标识符: java50个关键字不能做标识符,以数字开头不能做标识符(这个老是忘记写一个类名的时候) 变量: 变量分为成员变量和局部变量,注意作 ...
- C语言合法标识符 题解
输入一个字符串,判断其是否是C的合法标识符. Input输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串. Output对 ...
- 杭电2024 C语言合法标识符
链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2024 开始真的对这题是一点头绪都没有,简直了.然后事实证明是我想多了,这题主要是把概念给弄清楚 ...
随机推荐
- CTF挑战赛丨网络内生安全试验场第一季答题赛火热开启
前期回顾:挑战世界级“人机大战”,更有万元奖金等你来拿 网络内生安全试验场自上线以来,受到了业内的极大重视与关注. 自9月2日报名通道开启后,报名量更是持续高升,上百名精英白帽踊跃报名. 至此,网络内 ...
- 深入理解JVM虚拟机(一):JVM运行时数据区
概述: JVM将内存的管理进行封装,使得开发人员不必关心内存申请.释放操作.但是在高级程序开发.复杂业务场景开发的时候,如果出现内存溢出的情况,对于开发人员而言就很难去分析出原因.所以还是很有必要去了 ...
- vsftpd服务
vsftpd服务 文件传输协议(file transfer protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件,上传文件,下载文件.ftp基于TCP协议生成一个虚拟的连接,主要 ...
- Druid连接池使用
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11280540.html 一:DRUID连接池简介 阿里出品的“为监控而生”的数据库连接池,在功能.性能.扩展 ...
- 3-2-Pandas 索引
Pandas章节应用的数据可以在以下链接下载: https://files.cnblogs.com/files/AI-robort/Titanic_Data-master.zip In [4]: i ...
- SpringBoot使用@Value来获取properties的值
今天在项目中想使用@Value来获取Springboot中properties中属性值.场景:定义了一个工具类,想要获取一些配置参数,使用了@value来获取,但是死活也获取不到.如何解决:在使用这个 ...
- TCP的三次握手和四次挥手详解
相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. TCP报文格式 TCP的包如下: ...
- 使用node.js的http-server开启一个本地服务器
用html写了一个网页,想要在手机上查看适配效果,但是苦于手机上没有直接查看HTML的.想到手机和电脑都在一个局域网内,能不能搭建一个局域网内的网页服务器呢? 1.下载 http-server 显然, ...
- 实现一个new操作符
new 操作符做了这些事: 1.它创建了一个全新的对象: 2.它会被执行[[Prototype]](也就是__proto__)链接: 3.它使this指向新创建的对象: 4.通过new创建的每个对象最 ...
- 前端css命名规范----BEM
一.什么是BEM BEM就是块(block).元素(element).修饰符(modifier),是由Yandex团队提出的一种前端命名方法论.这种巧妙的命名方法可以使css类对其他开发者来说更加透明 ...