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-标识符与变量的更多相关文章

  1. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  2. Go语言规格说明书 之 变量声明(Variable/Short variable declarations)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...

  3. go标识符、变量、常量

    标识符 标识符是用来表示Go中的变量名或者函数名,以字母或_开头.后可跟着字母.数字. _ 关键字 关键字是Go语言预先定义好的,有特殊含义的标识符. 变量 1. 语法:var identifier ...

  4. Problem J: 零起点学算法105——C语言合法标识符

    #include<stdio.h> #include<ctype.h>//调用isalpha函数 int main() { int n; ]; while(scanf(&quo ...

  5. HDOJ2024C语言合法标识符

    C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  6. 1164: 零起点学算法71——C语言合法标识符(存在问题)

    1164: 零起点学算法71——C语言合法标识符 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 10 ...

  7. GLSL语言内置的变量详解

    GLSL语言内置的变量,包括内置的顶点属性(attribute).一致变量(uniform).易变变量(varying)以及常量(const),一方面加深印象,另一方面今天的文章可以为以后的编程做查询 ...

  8. 大数据学习--day02(标识符、变量、数据类型、类型转换、进制转换、原码反码补码)

    标识符.变量.数据类型.类型转换.进制转换.原码反码补码 标识符: java50个关键字不能做标识符,以数字开头不能做标识符(这个老是忘记写一个类名的时候) 变量: 变量分为成员变量和局部变量,注意作 ...

  9. C语言合法标识符 题解

    输入一个字符串,判断其是否是C的合法标识符.  Input输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串. Output对 ...

  10. 杭电2024 C语言合法标识符

    链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2024 开始真的对这题是一点头绪都没有,简直了.然后事实证明是我想多了,这题主要是把概念给弄清楚 ...

随机推荐

  1. es6中find方法

    find() 方法返回数组中满足提供的测试函数的第一个元素的值.否则返回 undefined. , , , , ]; var found = array1.find(function(element) ...

  2. QTableWidget获取选中行内容

    QList<QTableWidgetItem*> items = ui->tableWidget->selectedItems(); int count = items.cou ...

  3. Java变量声明和赋值

    Java的8种基础类型变量声明,在得到Java 11支持后会有新的语法糖 基础数据类型一共有8种 整数类型:byte.short.int和long 小数类型:float和double 字符类型:cha ...

  4. 详解Vue响应式原理

    摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归原作者所有. 前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是 ...

  5. es6中,promise使用过程的小总结

    参考资料传送门:戳一戳 1.是什么 Promise是异步编程的一种解决方案,有三种状态:pending(进行中).fulfilled(已成功)和rejected(已失败); 一般成功了状态用resol ...

  6. python中杀死线程

    有时候有这样的需要,在某种情况下,需要在主线程中杀死之前创建的某个线程,可以使用下面的方法,通过调用python内置API,在线程中抛出异常,使线程退出. import threading impor ...

  7. [TCP/IP] TCP流和UDP数据报之间的区别

    TCP流和UDP数据报之间的区别 1.TCP本身是面向连接的协议,S和C之间要使用TCP,必须先建立连接,数据就在该连接上流动,可以是双向的,没有边界.所以叫数据流 ,占系统资源多 2.UDP不是面向 ...

  8. c++ win32下窗口的最小化到托盘以及还原

    框架是用visual studio创建的win32控制台模板,然后自己添加最小化及还原部分代码. 需要额外包含的头文件: #include <shellapi.h> #include &l ...

  9. django使用xadmin

    一.安装xadmin 由于我用的是Django2.0以后的版本 所以无法直接通过pip install xadmin来安装 即使安装成功了 也会报乱七八糟的错误 https://github.com/ ...

  10. 【洛谷P4542】 [ZJOI2011]营救皮卡丘(费用流)

    洛谷 题意: 给出\(n\)个点,\(m\)条边,现在有\(k,k\leq 10\)个人从\(0\)号点出发前往\(n\)点. 规定若某个人想要到达\(x\)点,则\(1\)~\(x-1\)号点都有人 ...