Go语法基础之标识符本质

Go语法基础之标识符和常量

1、标识符本质

1.1 注释

go语言中的注释

  • 函数、结构体等习惯把注释写在上面
  • 包注释会写在package之上
多行注释
/*
这个样子
*/

// 函数注释   

func main() {
    fmt.Println(add(4,5)) //打印
}

// TODO 之后完成某个功能
//NOTE:注意
//Deprecated :告知已过期,建议不要使用,。未来某个版本可能移除。

1.2、行

Go语言把分隔符作为一条语句的结尾。也就是说,一般情况下,一行结束,敲回车即可。

1.3、命名规范

1、标识符采用CamelCase驼峰命名

驼峰 UserName 大驼峰, useName 小驼峰,user_name 蛇形命令

  1. 如果只在包内可用,采用小驼峰命名
  2. 如果要在包外可见,就采用大驼峰命名;

2、简单循环变量可以使用i、j、k、v等。

3、条件变量、循环变量可以是单个字母或单个字母,Go倾向于单个字母。

4、常量驼峰命令即可。

5、函数/方法的参数、返回值应是单个单词或单个字母。

6、函数可以是多个单词命令

7、类型可以是多个单词命令

8、方法由于调用时会绑定类型,所以可以考虑使用单个单词。

9、包以小写单词命令,包名应该和导入路径的最后一段路径保持一致

10、接口优先采用单个单词,一般加er后缀,GO语言推荐尽量定义小接口,接口也可以组合。

1.4 关键字

https://golang.google.cn/ref/spec

break	default  	func   	interface	select
case	defer	 	go	   	map	        struct
chan	else	 	goto	package	    switch
const	fallthrough	if		range	    type	
continue	for		import	return	    var	

1.5 预定义标识符

语言用的方便,提前设置的标识符

https://golang.google.cn/ref/spec#Predeclared identifies

Types:
 	any bool byte comparable
 	complex64 complex128 error float32 float64
 	int int8 int16 int32 int64 rune string
 	uint unit8 uint16 uint32 uint64
 Constants:
 	true false iota
 Zero value
 	nil
 Functions:
 	append cap close complex copy delete imag len
 	make new panic print println real recover
 	
 	

2、标识符

  • 一个名字,本质上是个字符串,用来指代一个值
  • 只能是大小写字母,数字、下划线、也可以是Unicode字符。
  • 不能以数字开头
  • 不能是Go语言的关键字
  • 尽量不要使用“预定义标识符”,否则后果难料
  • 大小写敏感

字面常量:

a = 100 a指代100 ,a就是指代100 的一个名称,标识符。

a = 200 说明 a的指代 可以变化,a变心了,可以变化指代指的标识符,称为 变量标识符。
如果说a 的指代一旦关联,不可变,a这个标识符指代的值不能改变了,称为 常量标识符。

3、字面常量

它是值 ,不是标识符,但本身是常量,不能被修改

Go语言中,boolean ,rune,integer,float,complex、string 都是字面常量,其中、rune、integer、float、complex常量被称为数值常量


100
3.14
3.14e2

'测'
'\x31'
'1'
'\n'

true
false
iota

以上字面常量在Go语言中也被称为无类型常量untyped constant 。无类型常量的缺省类型为bool、rune、int、float64、complex128或字符串。

var m int32 =1000
//var n int = int(m)
// n := m
var n = 2.6 // n float64
fmt.Println(float64(m) + n )
fmt.Println(1000 + 2.6) // untyped constant ,隐式类型转换 ,float64

4、常量

常量: 使用const定义一个标识符,她所对应的值,不允许被修改。

对常量并不要求大写加下划线的命令规则。

func main(){
    const c = "abc"
    const d int = 100 //字面常量 无类型常量100 关联
    const e uint = 100 //无类型常量100 和左边有类型常量uint8 e
    // int 8bits => 1bytes 0~127 -128~127 0-255
    const f float32 = 1.5
    g  = true
    
}
var 变量名
const 常量名  = 初值 常量必须在定义是直接赋初值。
func main() {
    //iota 定义成批常量
    const (
    	a = iota  //0  iota  定义成批常量 iota从0 ,从成批的第一行
        b         //1  批量定义的时候,下面一行可以继承上面的表达式 b =iota
        c
        _ //空白标识符 ,黑洞_=iota
        d
        t = 100
        _
        _
        e
        
    )
    fmt.Println(a,b,c,d)
}



func main() {
    const (
    	m = 100
        n
        a = iota * 2
        b
        c
        d
    )
    fmt.Println(a,b,c,d) //4,6,8,10
}


生成月份,星期。
const (
	sun = iota
    MON  
    TUE
)


package main

import (
	"fmt"
)

func main() {
	const (
		a = (iota + 1) * (iota + 1)
		b
		c
		d
	) //局部,只能在当前函数用
	fmt.Println(a, b, c, d)
}

//总结: iota是在成批定义和序列有关的


总结:iota是在成批定义和序列有关的常量定义

其它语言中

const a = [ 1, 2]

go语言中,常量不可以用数组。

注意: Go语言的常量定义

a = “abc” 赋值语句,名称是a,被赋值,a 是一个指代,指向某个值

a = 100

​ 如果可以,再次可以赋值,a称为变量,a的指代可以发送变化

​ 如果不可以,

​ a 有类型要求,不可以改变类型,同类型可以再次赋值,a是变量(a=100 不可以,a="aaa"可以)

​ a就是不可以在被赋值,a和第一个赋给它的值之间的联系不可改变,a称为常量标识符

常量: 标识符的指向的值一旦建立,不可改变,要求定义是必须建立关联

变量:标识符的指向的值建立后,可以改变

​ 1、类型也可以变,往往动态语言后JS 、Python,

​ 2、同类型可以变

4.1 类型推导

类型推导可以用在常量、变量定义,包括批量定义时

//赋值等式右边用“”

const a = "abc" //赋值语句,右边是无类型常量,它的缺省类型是string,左边a没有指定类型,a会进行类型推导,会依赖右边的类型,所以,a被推测为string类型。

const a int = 100 //指定类型定义常量并赋值
const//定义常量,等式左边未给出类型,将进行类型推导
	b = "abc"
	c = 12.3
	d = 'T'const a  // 错误,const定义常量,必须在定义时赋值,并且之后不能改变

const c = [2]int{1,2} //错误,数组的容器内容会变化,不能在编译期间明确的确定下来,这个和其它语言不一样

注意:Go语言的常量定义,必须是能在编译器就要完全确定值,所以,值只能使用字面常量。

这个和其它语言不同!列如,在其它语言中,可以用常量标识符定义一个数组,因为常量标识符保证数组地址不变,而其它内元素可以变化,但是Go根本不允许这样做。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ehuo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值