Golang关键字和预定义标识符

  时间:2020-09-01 10:45:28  阅读量:1k+  评论数:0  作者:Vongolar

该篇文章Golang关键字和预定义标识符除了讲述概念知识,更举例源码分析教学,对这方面技术有需求的朋友可以参考着学习,实用性较强。

Golang关键字和预定义标识符

  golang一共有25个关键字,我们只能按照规则使用。
  另外golang还有一些预定义标识符,除了按照规则使用外,我们还能当作普通的变量名、方法名等字段使用,但不建议这样做,避免混淆。
 

关键字

  • package:定义包名
  • import:引用包,golang目前是不支持循环引用的
        A import B,B 不能再引用A;
        A import B,B import C,C import A 也是不可以的。
  • struct:定义结构体
  • interface:定义接口
  • type:声明结构体,接口,类型和类型别名。
      声明一个类型,是作为一个新的类型使用,虽然本质上和原类型没有区别,但是无法直接当作原类型使用,而别名和原类型使用起来完全相同。
type A = int //int的别名
type B int	//新类型b

var a A = 1
var b B = 1

func GetSize(i int) {
	println(unsafe.Sizeof(i))
}
//64位机
GetSize(a)	//输出8
GetSize(b)	//无法通过编译,不能直接把B类型当作int使用
GetSize(int(b))	//输出8,可以强制转换
GetSize(*(*int)(unsafe.Pointer(&b)))//输出8,Pointer当然也是可以的
  • func:定义方法
  • return:返回当前方法
  • const:定义常量(有些语言定义常量不支持表达式,golang是可以的,但是表达式中的值也必须是常量)
  • var:定义变量
  • go:开启goroutine协程,后面直接跟方法调用
  • if,else:条件语句
      if可以if 表达式; 判断语句 ,比如下面段代码
//获取hash字典中的值
func GetValue(key string, dic map[string]string) string {
	if v, ok := dic[key]; ok {
		return v
	}
	return ""
}
  • map:哈希字典
  • chan:channel管道,主要用于不同协程直接通信,类似linux管道。
  • defer:在方法结束(包括异常)时调用,同一个方法内可以定义多个defer,调用顺序和定义相反。注意,defer后跟的表达式是定义时计算的,不是调用时计算的
func Defer() {
	i := 1
	defer println("first", i 1)
	i  = 1
	defer println("second", i)
}
//输出
//second 2 
//first 2
  • for:循环控制
  • select:和case配合使用,监听chan
  • switch: 选择控制,和case配合使用
  • case:switch和select中的单项
  • default:switch选项控制默认值
  • fallthrough:switch中继续执行下一个case内的指令
  • break:跳出当前循环、switch、select,switch和select默认break,如果不希望break,使用fallthrough;以上这些结构可以用标签命名,break 标签名,可以跳出多层结构。
  • continue:跳过循环语句中剩下的指令,直接进入下一次循环。continue也可以使用标签,忽略当前循环结构,直接继续执行标签指定的循环。
  • goto:无条件地转移到过程中指定的行,不推荐使用,可控制的小范围内使用。
  • range:用来迭代数组、切片、map、chan
     

预定义标识符

预定义标识符全部列出在源码的builtin包中,只有一个builtin.go文件,并且都有注释说明,大家可以自行阅读。
 
 
参考资料:

  1. 关键字:https://www.runoob.com/go/go-basic-syntax.html
  2. golang源码:https://github.com/golang/go

ps: 欢迎大家指出文中错误和不足,提出意见,以免误导。

关键词:golang,go,关键,关键字,预定,定义,标识,标识符