任何一门语言我们都要了解其语法以及一些约定俗成的东西,了解这些东西有助于我们快速的学习这门新的语言。本篇就go语言的的一些基本语法知识做一个简单的学习。
注释
go中的注释分为单行注释和多行注释。
- 单行注释 (开头一般留一个空格)
// 单行注释
- 多行注释 (一般用来做包的说明)
/*
main 可执行程序入口
*/
另外在对函数进行注释的时候,一般开头都是函数名称,看个例子:
// Formatter is the interface implemented by values with a custom formatter.
// The implementation of Format may call Sprint(f) or Fprint(f) etc.
// to generate its output.
type Formatter interface {
Format(f State, c rune)
}
在goland中我们可以设置注释模板,具体的操作可以参考下面的步骤。
- 文件注释模板
/*
Package: ${GO_PACKAGE_NAME}
Project: ${PROJECT_NAME}
Author: ${USER}
Date: ${DATE} ${TIME}
*/
package ${GO_PACKAGE_NAME}
保存设置后,我们新建一个go文件,看看效果:
- 方法注释模板
// Author $user$
// Date $date$ $time$
当然了,具体的设置还得大家自己来搞了。。有些东西我还没整透彻。所以这里只是告诉大家可以自己这样去设置。
为了提高下效率,我们可以使用注释插件Goanno,省的我们自己一通折腾了。
设置注释模板
设置快捷键
keymap.windows.as.meta=true
此时我们就可以通过ctrl+cmd+/
的方式快速生成注释。
这个插件还是不错的,如果大家有更好的插件,还希望留言推荐下。。。。
命名
Go语言中的命名规范和其他语言差不多,第一个字符必须以字母开头,后面可以跟任意数量的字母、数字。
identifier = letter { letter | unicode_digit } .
在Go语言中下划线_
被认为是一个字母。
Go语言程序员推荐使用驼峰式命名规则,也就是当名字有几个单词组成的时优先使用大小写分隔,而不是优先用下划线分隔。
示例:
a
_x9
ThisVariableIsExported
(* ̄(oo) ̄) Go语言是大小写敏感的语言
关键字
Go语言内置的关键不多,共有25个:
关键字就不多说了,在命名变量、函数等时我们不要使用就是了,哪里都一样。
另外还有大概40个预声明标识符
:
这些预声明标识符的具体定义可以在builtin.go文件中查看具体的内容和注释说明。
声明
声明语句其实就是定义程序中会使用到的各种各种实体对象以及其部分或者全部的属性。
Go中有四种类型的声明语句,分别是:var(变量)、const(常量)、type(类型)和func(函数)。
先声明在使用
包
每一个go文件都是从package子句开始的,该语句定义了本文件所属的包。
用法:package 包名
package lexical
其中包名不能为空
导入
导入语句指明了我们需要使用哪些依赖包。
我们可以是使用单行导入或者分组导入的形式导入依赖包,一般推荐使用分组导入。
- 单行导入
import "fmt"
import "math"
- 分组导入
import (
"fmt"
"math"
)
导出名
在Go中有一个很有意思的点,那就是在go文件中如果一个名字是以大写字母开头的,那么go就会认为该变量或者函数等等是已导出的,也就是说如果我们在其他地方使用该文件中的内容时我们只能访问这些以大写字母开头的已导出的东西。
变量
我们可以使用var或者短变量声明的语法来声明一个变量。
使用var声明变量
语法:var 变量名字 类型 = 表达式
var a string
var b int = 0
短变量声明
短变量声明只能在函数中使用,在函数外的每个语句都必须以关键字开始(var, func 等等)。
短变量声明使用:=
的形式来声明一个变量,其变量的类型由编译器自动推导。同样的使用var声明变量也是可以省略类型的。
b := "hello"
还有一种声明方式,那就是使用new函数,表达式new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为*T。
b := new(string)
*b = "hello world"
既然我们提到了new函数,那么我们简单提一下指针。
一个变量对应一个保存了变量对应类型值的内存空间,一个指针是保存了对应变量在内存中的存储位置的一个特殊类型。
如果使用“var b string”声明语句声明一个变量b,那么&b表达式(取x变量的内存地址)将产生一个指向该整数变量的指针,指针对应的数据类型是*int,指针被称之为“指向int类型的指针”。
我们可以通过对一个变量使用&
来获取其内存地址,同理我们可以通过*b
来获取或者设置指针对应的变量的值。
var a string
b := new(string)
*b = "hello world"
fmt.Println(&a, *b)
赋值
这里就说最简单的赋值,使用=
进行赋值
var a string = "Hello World"
零值
没有明确初始值的变量声明会被赋予它们的 零值。
- 数值类型为 0
- 布尔类型为 false
- 字符串为 “”(空字符串)
package main
import "fmt"
func main() {
var a string
var b int
var c bool
fmt.Println(a, b, c)
}
类型转换
表达式 T(v) 将值 v 转换为类型 T。在Go中不同类型的项之间赋值时需要显式转换。
a := 0
b := float64(a)