#### Go 指针,标识符命名规范,关键字,运算符
回顾了一下之前写的文章,以及考虑到后期的内容较多, 从这篇开始逐渐增加文章内容;
这篇我们主要学习一Go 中的指针,标识符关键字以及运算符
##### 指针
介绍: Go 中的指针相比于C 中的指针,弱化了;基本数据类型,变量存储的是值,也称为值类型; 获取变量的地址,使用&: 例如: var a int, 获取a 的地址为: &a;
package main

import "fmt"

func main() {
var a int = 10
fmt.Println(a)
// 获取变量a 的地址
fmt.Printf("a address is %p\n",&a)//0xc000054080
// 基本数据类型a 在内存中的布局
// 变量a指向10, 10 的内存地址为: 0xc000054080
}

  


指针类型: 指针变量存储的是一个内存地址,这个内存地址指向的空间存的才是值;
如var b *int = &a
获取指针类型所指向的值使用\*;
如: var b \*int , 使用\*b 获取b 指向的值;
通过指针更改基本类型的值;
如: var b \*int, 使用*b = 20, 来更改基本类型的值;
package main

import "fmt"

func main() {
var a int = 10
// 变量 b 是一个指针变量,类型为*int
var b *int = &a
// 内存布局如下:
// 变量a指向10, 10 的内存地址为: 0xc000054080
// 指针变量b 指向0xc000054080, 0xc00054080 地址指向10
fmt.Printf("a address is %p\n") //0xc000054080
fmt.Printf("b value is %p\n") //0xc000054080
fmt.Println("b pointed value is",*b) //10
// 通过指针更改变量的值,并不会改变原来的内存地址
*b = 100
fmt.Println("a value is",a)//100
}

  


指针使用的细节
1. 值类型都有对应的指针类型,形式为\*数据类型, 如int 类型的对应指针是*int,int32类型的对应指针为*int32;
2. ***指类型包括:基本数据类型int系列,float系列,bool,string;数组和结构体struct***
##### 值类型和引用类型
值类型:***指类型包括:基本数据类型int系列,float系列,bool,string;数组和结构体struct***
引用类型: 指针,slice 切片, map, 管道chan,接口interface都是引用类型;
1. 值类型: 变量直接存储的值,内存通常在栈中分配
2. 引用类型: 变量存储的是一个内存地址,这个地址指向的空间才真正存储的值,内存通常在堆上分配,如果没有任何变量引用这个地址时,该地址对应的
数据空间就成为一个垃圾,由GC 来回收
var a = 100
// a --> 100
var b = &a
// b --> 地址 --> 100

  


##### 标识符及命名规范
Go 对各种变量,方法,函数等命名时使用的字符序列称为标识符;
也可以这样说: 凡是程序员可以自己起名称的地方都叫标识符;
规则:
1. 由26 个英文字母大小写,0-9,_ 组成 ;
2. 数字不可以开头;
3. 严格区分大小写;
4. 标识符不能包含空格;
5. 不能使用系统保留的关键字作为标识符;
6. ***下划线_本身在Go中是一个特殊的标识符,称为空标识符,它可以代表任意的其它字符,但是它的值会被忽略
单一_仅能被作为占位符使用,不能作为标识符使用;***
7. 除了第6条外,与其它语言基本规则一样,在命名时注意即可;
---
标识符命名注意事项
1. 包名: 保持package 的名字和目录的名称一致,尽量采用有意思的名称,最好不和标准库冲突;
2. 变量名,函数名,常量名采用驼峰命名法;
3. 如果变量名,函数名,常量名首字母大写,则可以被其它的包访问,如果首字母小写,则只能在本包中使用(首字母大写是公开的,首字母小写是私有的,类似其它语言中的public,private 关键字)
##### 系统保留关键字(25个)

 
##### 预定义的标识符(36个)
包括基础数据类型和系统内嵌函数

 
##### 运算符
运算符是一种特殊的符号,用以表示数据的运算,赋值和比较等;
1. 算术运算符
2. 赋值运算符
3. 比较运算符/关系运算符
4. 逻辑运算符
5. 位运算符
6. 其它运算符
---
##### 算术运算符
算术运算符是对数值类型的变量进行运算,如下:


案例:
package main

import "fmt"

func main() {
var a int = 10
var b int = 3
fmt.Println(a+b) //13
fmt.Println(a-b) //7
fmt.Println(a*b) //30
// 注意: 如果运算的数全是整数,那么结果保留整数部分
fmt.Println(a/b) //3
var c float64 = 10 / 3 // 3
// 如果需要保留小数部分,则需要浮点数参与运算
var d float64 = 10.0 / 3 // 3.333333...
fmt.Println(c,d)
// % 的使用
// a % b = a- a/b*b // 这是一个公式
fmt.Println("10 %3 = ",10%3) // 1
fmt.Println("-10 %3 = ",-10%3) //(-10)-(-10)/3*3 = -1
fmt.Println("10 %-3 = ",10%-3)//10-10/(-3)*(-3) = 1
fmt.Println("-10%-3 = ",-10%-3) // (-10)-(-10)/(-3)*(-3) = -1
var e = 1
e ++
fmt.Println(e) //2
e--
fmt.Println(e) //1
}

  


算术运算符使用的注意事项
1. 对于除号, 它的整数除和小数除是有区别的,整数除时只保留整数部分;
2. 取模时%, 可以参考公式: a%b = a-a/b*b;
3. Go 的自增和自减只能作为独立语句使用;
4. ++ 和 -- 只能写在变量后,没有--a,和++a;
---
##### 关系型运算符(比较运算符)
关系型运算符的结果都是bool 类型的,要么是true , 要么是false, 经常使用在条件控制语句中;

 
package main

import "fmt"

func main() {
var a = 1
var b = 2
fmt.Println(a>b) // false
fmt.Println(a<b) // true
fmt.Println(a==b) // false
fmt.Println(a!=b) // true
fmt.Println(a<=b) // true
fmt.Println(a>=b) // false
resu := a>b
fmt.Println(resu) // false
}

  


---
关系型运算符使用注意事项:
1. 运算结果都是bool 类型,true or false;
2. 比较运算符"==" 不能写成"=", "=" 是赋值 ;
##### 逻辑运算符
假如: a = true, b = false
a && b = false // 两边同时为true ,结果为true,否则为false
a || b = true // 两边同时为false ,结果为false,否则为true
!a = false, !b = true // 取反,!true=false, !false=true
案例:
package main

import "fmt"

func main() {
var a = 2
// 两边不同时为true, 结果为false
fmt.Println(a > 2 && a < 3) // false
// 两边同时为true,结果为true
fmt.Println(a >1 && a <3 ) // true
// 两边有一个为true,结果为true
fmt.Println(a >2 || a < 3) // true
// 两边同时为false,结果为false
fmt.Println(a >2 || a <1 ) // false
fmt.Println(a > 2) // false
// 取反
fmt.Println(!(a>2)) // true
}

  


---
逻辑运算符使用注意事项
1. && 也称为短路与: 如果第一个条件为false, 则第二个条件不会判断,结果为false;
2. || 也称为短路或: 如果第一个条件为true, 则第二个条件不会判断,结果为true;
package main

import "fmt"

func test() bool {
fmt.Println("hello,world")
return true
}
func main() {
var a = 2
if a < 1 && test() { // false , test() 函数不会执行
fmt.Println("yes")
} if a > 1 || test() { // true, test() 函数不会执行
fmt.Println("yes")
}
}

  


##### 赋值运算符
赋值运算符就是将运算后的值,赋值给指定的变量;
分类:
1. = , 如: a3 = a1 + a2
2. +=, 如: a3 += a1,等价于 a3 = a3 + a1
3. -=, 如: a3 -= a1,等价于 a3 = a3 - a1
4. *=, 如: a3 *= a1,等价于 a3 = a3 * a1
5. /=, 如: a3 /= a1,等价于 a3 = a3 / a1
5. %=, 如: a3 %= a1,等价于 a3 = a3 % a1
案例:
package main

import "fmt"

func main() {
var a1 = 1
var a2 = 2
a3 := a1 + a2
fmt.Println(a3)
a3 += a1 // a3 = a3 + a1 ====> 3+1
fmt.Println(a3) // 4
// 在这里演示一个小案例,用来体验一下Go 赋值运算符的使用
// 交换两个变量的值
var a = 10
var b = 20
// Go 中支持多变量赋值
a, b = b, a // 正确
fmt.Println(a, b) // 20,10
// 使用另一种方式实现
a = a + b
b = a - b // a +b -b = a
a = a - b // a +b -a = b
fmt.Println(a, b) //10,20 , 上面已经交换过,这里恢复
}

  


---
赋值运算符的使用注意事项
1. 运算顺序从右往左;
2. 赋值运算符的左边只能是变量,右边可以是变量,表达式,常量值;

##### 位运算符
位运算符涉及到二进制运算,实际使用过程中并不是太多,这里先不写......



##### 运算符的优先级
从高到低
1. (),++,--
2. 单目运算: !,&,*
3. 移位运算: <<,>>
4. 位运算: |,&,^
5. 算术运算: *,/,+,-
6. 关系型运算: >,<,<=,==,>=
7. 逻辑运算: &&,||
8. 赋值运算: +=,-=,*=
9. 逗号: ,
---
运算符的优先级,与其它编程语一样,不需要过多研究,实际使用中多写多练即可;

--------最近在同步更新微信公众号:"开胃咸菜",最新文章以公众号为准,可以一起学习交流;

												

Go 指针,标识符命名规范及关键字的更多相关文章

  1. 【Java学习笔记之二】java标识符命名规范

    什么是标识符 就是程序员在定义java程序时,自定义的一些名字.标识符可以应用在类名.变量.函数名.包名上. 标识符必须遵循以下规则 标识符由26个英文字符大小写(a~zA~Z).数字(0~9).下划 ...

  2. Day01_04_Java标识符命名规范

    Java标识符命名规范 什么是标识符? 在程序中程序员有权利自己命名的单词都是标识符(类名 方法名 变量名 常量名 接口名) 标识符命名规则 标识符用作给变量.类和方法命名 标识符以由大小写字母.数字 ...

  3. Java语言基本语法(一)————关键字&标识符(Java语言标识符命名规范&Java语言的包名、类名、接口名、变量名、函数名、常量名命名规则 )

    一.关键字 关键字的定义和特点 定义:被Java语言赋予特殊含义,用做专门用途的字符串(单词). 特点:关键字中所有字母均为小写 下面列举一些常用的关键字. 用于定义数据类型的关键字:byte.sho ...

  4. 8.Python标识符命名规范

    简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量.函数.类.模块以及其他对象的名称. Python 中标识符的命名不是随意的,而是要遵守一定的命令规则,比如 ...

  5. Python | 标识符命名规范

    简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量.函数.类.模块以及其他对象的名称. Python 中标识符的命名不是随意的,而是要遵守一定的命令规则,比如 ...

  6. C#代码标识符命名规范

    总体原则:命名一定要体现其在程序中的作用: Camel命名法:第一个单词的首字母小写,其余每个单词的首字母大写:多用给变量或者字段命名:给字段命名必须以下划线开始: Pascal命名法:每个单词的首字 ...

  7. Java基础入门 - 标识符及其命名规范

    类名.变量名.方法名都称为标识符 标识符命名规范: 由字母(A-Z或a-z).数字.下划线(_)和美元符($)中的一种或多种组合而成 不可以数字开头 大小写敏感 关键字不能用作标识符 合法标识符如:D ...

  8. 【Java】标识符 & 命名规则

    Java的标识符和命名规则 什么是标识符[Identifier]? 指用来标识某个实体的一个符号.在不同的应用环境下有不同的含义. 在编程语言中,标识符是开发者编程时使用的名字,对于变量.常量.函数. ...

  9. Java基础—标识符及命名规范

      什么是标识符符? 凡是可以由自己命名的地方都称为修饰符. 例: 项目名 ,包名 ,类名 .方法名 2.   命名规范. ①    不可使用java关键字和保留字,但是可以包含关键字和保留字. ②  ...

随机推荐

  1. SpringBoot中Post请求提交富文本数据量过大参数无法获取的问题

    yml增加配置 # 开发环境配置 server: tomcat: max-http-form-post-size: -1

  2. 【九度OJ】题目1171:C翻转 解题报告

    [九度OJ]题目1171:C翻转 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1171 题目描述: 首先输入一个5 * 5的数组,然 ...

  3. 【LeetCode】88. Merge Sorted Array 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 新建数组 日期 题目地址:https://leetc ...

  4. 【LeetCode】700. Search in a Binary Search Tree 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcod ...

  5. git安装与使用,未完待续... ...

    ​ 目录 一.git概念 二.git简史 三.git的安装 四.git结构 五.代码托管中心-本地库和远程库的交互方式 六.初始化本地仓库 七.git常用命令 1.add和commit命令 2.sta ...

  6. bootstrap datetimepick 时分秒选择,坑我15个小时,整理记录

    官网的datetimepick 下载链接 官网下载 <input type="text" readonly name="feedDay" id=" ...

  7. 汇编MMX实现图片淡入淡出核心代码

    计算机组成课程个人作业 参考: https://blog.csdn.net/yangjianqiao0/article/details/69388595 https://blog.csdn.net/d ...

  8. [数据结构]严蔚敏版(C数据结构)配套实现程序111例

    以下为根据严蔚敏版数据结构的示例和概念实现的程序 目录 一.严蔚敏版(C数据结构)配套实现程序111例 1.数组与字符串 2.栈与队列 3.链表LinkList 4.树与二叉树 5.排序相关算法 6. ...

  9. JDK HttpClient 单次请求的生命周期

    HttpClient 单次请求的生命周期 目录 HttpClient 单次请求的生命周期 1. 简述 2. uml图 3. Http连接的建立.复用和降级 3.1 调用流程及连接的建立和复用 3.2 ...

  10. RSA非对称加密算法实现:Python

    RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA ...