#### Go 指针,标识符命名规范,关键字,运算符回顾了一下之前写的文章,以及考虑到后期的内容较多, 从这篇开始逐渐增加文章内容;  这篇我们主要学习一Go 中的指针,标识符关键字以及运算符##### 指针 介绍: Go 中的指针相比于C 中的指针,弱化了;基本数据类型,变量存储的是值,也称为值类型; 获取变量的地址,使用&: 例如: var a int, 获取a 的地址为: &a;   
package mainimport "fmt"func main() {var a int = 10fmt.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 mainimport "fmt"func main() {var a int = 10// 变量 b 是一个指针变量,类型为*intvar b *int = &a // 内存布局如下:// 变量a指向10, 10 的内存地址为: 0xc000054080// 指针变量b 指向0xc000054080, 0xc00054080 地址指向10fmt.Printf("a address is %p\n") //0xc000054080fmt.Printf("b value is %p\n") //0xc000054080fmt.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 mainimport "fmt"func main() {var a int = 10var b int = 3fmt.Println(a+b) //13fmt.Println(a-b) //7fmt.Println(a*b) //30// 注意: 如果运算的数全是整数,那么结果保留整数部分fmt.Println(a/b) //3var 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) // 1fmt.Println("-10 %3 = ",-10%3) //(-10)-(-10)/3*3 = -1fmt.Println("10 %-3 = ",10%-3)//10-10/(-3)*(-3) = 1fmt.Println("-10%-3 = ",-10%-3) // (-10)-(-10)/(-3)*(-3) = -1var e = 1e ++fmt.Println(e) //2e--fmt.Println(e) //1
}

  

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

 
package mainimport "fmt"func main() {var a = 1var b = 2fmt.Println(a>b) // falsefmt.Println(a<b) // truefmt.Println(a==b) // falsefmt.Println(a!=b) // truefmt.Println(a<=b) // truefmt.Println(a>=b) // falseresu := a>bfmt.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 mainimport "fmt"func main() {var a = 2// 两边不同时为true, 结果为falsefmt.Println(a > 2 && a < 3) // false// 两边同时为true,结果为truefmt.Println(a >1 && a <3 ) // true// 两边有一个为true,结果为truefmt.Println(a >2 || a < 3) // true// 两边同时为false,结果为falsefmt.Println(a >2 || a <1 ) // falsefmt.Println(a > 2) // false// 取反fmt.Println(!(a>2)) // true
}

  

---逻辑运算符使用注意事项1. && 也称为短路与: 如果第一个条件为false, 则第二个条件不会判断,结果为false;   2. || 也称为短路或: 如果第一个条件为true, 则第二个条件不会判断,结果为true;   
package mainimport "fmt"func test() bool {fmt.Println("hello,world")return true
}
func main() {var a = 2if 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 + a13. -=, 如: a3 -= a1,等价于 a3 = a3 - a14. *=, 如: a3 *= a1,等价于 a3 = a3 * a15. /=, 如: a3 /= a1,等价于 a3 = a3 / a15. %=, 如: a3 %= a1,等价于 a3 = a3 % a1案例: 
package mainimport "fmt"func main() {var a1 = 1var a2 = 2a3 := a1 + a2fmt.Println(a3)a3 += a1        // a3 = a3 + a1 ====> 3+1fmt.Println(a3) // 4// 在这里演示一个小案例,用来体验一下Go 赋值运算符的使用// 交换两个变量的值var a = 10var b = 20// Go 中支持多变量赋值a, b = b, a       // 正确fmt.Println(a, b) // 20,10// 使用另一种方式实现a = a + bb = a - b         // a +b -b = aa = a - b         // a +b -a = bfmt.Println(a, b) //10,20 , 上面已经交换过,这里恢复
}

  

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

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


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

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

转载于:https://www.cnblogs.com/Mail-maomao/p/11357449.html

Go 指针,标识符命名规范及关键字相关推荐

  1. java标识符命名规范 java关键字 标识符

    前言 标识符的认识和熟练运用对程序员来说很重要,标识符是程序员为程序组件起的名字.起名字是一门艺术,这一点对标识符也一 样.一个好的标识符命名风格和习惯,能够很大程度上增加代码的可读性. . Java ...

  2. 【Python】标识符 ( Python 标识符命名规则 - 强制性 | 内容限定 | 大小写敏感 | 非关键字 | Python 标识符命名规范 - 建议性 | 下划线命名法 | 英文字母全小写 )

    文章目录 一.Python 标识符 1.Python 标识符命名规则 ( 强制性 ) 2.Python 标识符命名规范 ( 建议性 ) 二.代码示例 1.内容限定代码示例 2.大小写敏感 3.非关键字 ...

  3. python语言命名规定首字符不能是_python标识符命名规范原理解析

    这篇文章主要介绍了python标识符命名规范原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简单地理解,标识符就是一个名字,就好像我们每个人 ...

  4. java标识符定义_Java标识符命名规范

    无论是哪一种计算机语言,都少不了标识符的存在.Java零基础的朋友们想要学好java语言,在基础阶段就要学习java标识符的内容,其中java标识符命名规范是不可缺少的重点知识,下面这篇文章带零基础的 ...

  5. java标识符命名规范之驼峰命名法

    java标识符命名规范之驼峰命名法 1.什么是驼峰命名法? 1.1 前提 大家都知道骆驼有两个驼峰,较高的那一个驼峰有可能靠经头部,也有可能靠近尾部. 因此就提出了大小驼峰命名法 大小驼峰的根本区别就 ...

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

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

  7. 02 - java 标识符命名规范

    一.java总体命名规范 名称只能由字母.数字.下划线.$符号组成 不能以数字开头 名称不能使用java中的关键字 坚决不允许出现中文 具体还要查看<阿里巴巴java开发手册>

  8. Python学习(十一)Python标识符命名规范

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

  9. Java标识符命名规范

    作为一个刚入门的小白,一定要养成良好的代码格式习惯,一个规范的代码看起来赏心悦目,对于别人阅读代码你的代码也是友好的,增强代码可读性和可维护性. 啥是标识符??? 在开发中,程序员可以自行定义的名称. ...

最新文章

  1. asp.net mvc jqgrid 同一个页面查询不同的表,jqgrid显示不同表的表头和数据并且分页...
  2. linux命令——tar
  3. ARM NEON 编程简单入门1
  4. python经典好书-7本有关Python的经典好书推荐,适合各类人群
  5. 一步一步学习Bootstrap系列--表单布局
  6. ROS学习(二):在ubuntu 16.04安装ROS Kinetic
  7. 鸿蒙发布的意义,华为鸿蒙正式发布!“鸿蒙”是什么意思?
  8. Hadoop存算分离实现方案探讨
  9. Android ViewPropertyAnimator 属性动画概述
  10. Ubuntu火狐浏览器无法输入简体中文的解决方案
  11. PHP依赖管理工具Composer配置安装及基本使用
  12. 智汇华云 | 集群自动化部署服务流程之自动化集群配置(上)
  13. 俄罗斯方块c语言代码及注释,俄罗斯方块C语言代码
  14. 自制的基Ogre的场景编辑器—OgreSE
  15. 锆石FPGA---verlog语法篇
  16. 君莫笑:小白的堆(bai_dui)
  17. 回声状态网络(ESN)对MNIST手写数字集识别
  18. 2022年Gartner新兴技术、人工智能技术成熟度曲线概述
  19. 【读书】2019年阅读记录
  20. 可惜我是水瓶座 你不懂的水瓶座,不为人知的秘密

热门文章

  1. python中str和repr_python中str()和repr()函数的区别
  2. jsp中获取不到后台请求域中的值
  3. 拓展欧几里得模板/求逆元模板(java)
  4. 双指针算法(四):力扣 88.合并两个有序数组 | 经典例题
  5. Linux下使用MySQL——忘记root密码及修改MySQL默认编码
  6. Elasticsearch之mapping映射入门
  7. 团体程序设计天梯赛 L2 题目合集
  8. android java 圆角_java – Android:给一个webview圆角?
  9. more 目录linux,linux(二)目录结构、文件基本操作cat\more\less、环境变量、文件搜索...
  10. linux重点知识:网络通信