golang的基础语法和常用开发工具详解
golang的基础语法
golang的基础语法和其他语言大部分都差别不大,如果我们有学习过其他语言,比如JavaScript,php,java,python等,有其他语言的语法基础,那么我们学习golang将更容易上手。那我们直接开始介绍golang的语法吧。
注释
注释分单行注释和多行注释。golang的注释和其他的开发语言的注释是一样的。双斜杠表示单行注释,/**/表示多行注释。
// 单行注释这么开头 /* 多行注释 */
定义包名
一般来说,使用开发工具的时候,包名是不需要手动输入的,开发工具会在创建文件的时候,自动生成包名。
比如定义一个包名称为main的包:
package main //定义一个名称为main的包
- 每个go文件中必须定义包名来指明该文件归属于哪个包,而且定义包名必须在文件中非注释的第一行;
- go文件中若存在程序入口(main函数),则该文件定义的包名必须为main;
- 一个文件中有且只有一次定义,即只有一行package语句;
- 包名和文件名没有必然联系,可以不同。
导入依赖库
依赖库分为系统库和第三方依赖库。导入方式有两种,单行导入和合并导入。一般上开发工具会自动帮忙处理。引用一个包的时候,使用单行,需要引用多个包的时候,会自动合并引用。
注意:导入的包都必须使用,若没有使用编译时将报错。所以不要引入无用的包。
import "fmt" import ( "os" "strings" "gorm.io/gorm" "github.com/kataras/iris/v12" )
函数
func是函数定义的关键字,函数体用 { }
包围,注意: { (左括号)不能单独成行,必须和main()在同一行。函数名小写的时候表示这个函数是私有函数,函数名大写的时候,表示这个函数是公开函数,公开函数可以全局访问,私有函数只能在自己的包内访问。
func main(){ fmt.Println("Hello World") }
函数调用
函数的调用方式分2种,同一个包内的函数调用,可以直接写函数名称就可以,不同包之间的调用,需要引入对方的包,然后通过包名.函数名的方式调用。
比如下方的函数调用是调用了fmt包的Println函数。
fmt.Println("Hello World")
变量、常量、占位符、运算符、数组、指针、结构体
变量
变量使用之前,需要先声明。变量的声明分几种方式。一种是在开头的时候声明,使用 var
关键词来声明变量,另一种是在使用的时候声明, 使用 :=
来声明和赋值。还有一种是合并声明。不过尽量单独声明。
var a int = 1 //第一种: var 变量名 变量值 value := 2 //第二种: value_name := 1 var b, c, d = 1, 2, 3 //第三种: 合并声明 var( //第四种: 合并声明 value1 int = 3 value2 string = "Hello World" )
上述有三种变量声明方式,var是golang的关键词,用于变量的声明。第一、三和四种可以在任意地方声明,当定义在函数体外时相当于全局变量;而第二种只能在函数体内声明,相当于局部变量。变量在声明后若不手动定义,编译器将为其赋值为相应的默认值
注意:golang中的变量、方法、结构体等等的名称都推荐使用驼峰命名法,而名字的首字母如果是小写字母则表示在包(package)内可见;而如果是大写字母则表示包外可见。
常量
const var a int = 1 const var ( b int = 2 c string = "Hello World" )
常量通过关键词const来定义。常量同样有单行声明和合并声明,声明时必须定义,定义后不可修改。
占位符
_ , a = myFunction()
function()函数有两个返回值,第一个返回值赋给_ , 第二个返回值赋给a,此时的 就称做占位符,可以理解为仅仅为了给第一个返回值有位置存放即可,这个返回值我再也不会用到;如果这个返回值之后还可能用到,则不能赋给 ,否则今后无法再使用。
运算符
golang的运算符包括:
- 算术运算符:
+
相加、-
相减、*
相乘、/
相除、%
求余、++
自增、--
自减。 - 关系运算符:
==
检查两个值是否相等、!=
检查两个值是否不相等、>
检查左边值是否大于右边值、<
检查左边值是否小于右边值、>=
检查左边值是否大于等于右边值、<=
检查左边值是否小于等于右边值 - 逻辑运算符:
&&
逻辑 和 运算符、||
逻辑 或 运算符、!
逻辑 非 运算符 - 位运算符:
&
按位与运算符"&"是双目运算符,其功能是参与运算的两数各对应的二进位相与;|
按位或运算符"|"是双目运算符,其功能是参与运算的两数各对应的二进位相或;^
按位异或运算符"^"是双目运算符,其功能是参与运算的两数各对应的二进位相异或;<<
左移运算符"<<"是双目运算符,左移n位就是乘以2的n次方,其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0;>>
右移运算符">>"是双目运算符,右移n位就是除以2的n次方,其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。
golang的运算符合其他开发语言是一致的,这里不做更多介绍。
数组
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。
// 形如 var 变量名 [数量] 变量类型 var stuName [20] string
指针
一个指针变量指向了一个值的内存地址。
var-type 为指针类型,var_name 为指针变量名,* 号用于指定变量是作为一个指针。
类似于变量和常量,在使用指针前你需要声明指针。指针声明格式如下:
// var var_name *var-type var stuNameIndex *string
结构体
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:
//形如 type variable_type struct { …… } type People struct { var id int var name string } var people People people.id = 1 people.name = "Sinclar"
切片
Go 语言切片是对数组的抽象。
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
var slice1 []type //也可以指定长度 var slice1 []type = make([]type, 10) //也可以简写为 slice1 := make([]type, 10)
条件语句
条件语句有两种,一种是 if……else…… 语句,另一种是 switch 语句,还有一种select语句。
if……else……
if 条件 { 执行代码 } else { 执行代码 }
switch 语句
switch condition { case condition1: ... case condition2: ... default: ... }
select 语句
这涉及到一些高级语法,本篇先不讲述,我将在下一篇详细解释,感兴趣的同学们可以自己查阅资料先学习一下。
switch语句中没有break语句,golang的语法经过优化后,在某个case执行完毕后就退出switch了,不会再接着往下执行;
如果希望执行了某个case之后接着往下执行,可以在每个case最后使用fallthrough关键字。注意,使用fallthrough关键字后,后面的case是强制执行,无论condition是否为true
for 循环语句
golang的循环语句只有一种。那就是for语句。for语句有几种形式。
标准格式
/*for init; condition; next { doSomething }*/ for i:=0; i<20; i++ { fmt.Println("i is: %d", i) }
特殊格式
//无限循环 for { doSomething } for true { doSomething } //省略init或next for ; sum<100; { sum = sum + 1 }
控制语句
break、continue和goto是用于for语句或switch语句内的控制语句,其用法于c或c++中的用法相似,这里就不再赘述了。
看到这里,大家应该都觉得似曾相识,好像学过的编程语言都有这些东西。所以大家应该不用花太多时间在基础语法上,几分钟就能看完。看完这些基础知识,大家应该可以写出一些简单代码来验证今天的基础语法。
但是,这里也只是讲解了一些基础用法,在接下来的学习中,我们还会遇到更多高级的用法,包括select、channel、方法、切片、范围、集合和接口等内容。
golnag的开发者工具
我现在使用的开发者工具是GoLand。这是一个非常强大的golang开发工具。因此在此我也推荐大家使用GoLand开发工具来开发我们的golang博客系统。
到此这篇关于golang的基础语法和常用开发工具的文章就介绍到这了,更多相关golang常用开发工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!