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常用开发工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 对Golang import 导入包语法详解

    package 的导入语法 写 Go 代码的时经常用到 import 这个命令用来导入包,参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用: fmt.Println( "我爱北京天安门" ) fmt 是 Go 的标准库,它其实是去 GOROOT 下去加载该模块,当然 Go 的 import 还支持如下两种方式来加载自己写的模块: 相对路径 import "./model" // 当前文件同一目录的 model 目录

  • golang中单向channel的语法介绍

    本文主要给大家介绍的是关于golang单向channel语法的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 今天闲来无事补充一下golang的语法知识,想起来看看context的用法,结果碰到了一个没见过的channel语法: // A Context carries a deadline, cancelation signal, and request-scoped values // across API boundaries. Its methods are sa

  • 详解golang 模板(template)的常用基本语法

    模板 在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染. 这篇文章不讨论golang后端的模板读取及渲染方法,只讨论模板中嵌入变量,渲染变量.循环等一些基本用法. 变量 在golang渲染template的时候,可以接受一个interface{}类型的变量,我们在模板文件中可以读取变量内的值并渲染到模板里. 有两个常用的传入参数的类型.一个是struct,在模板内可以读取该struc

  • golang一些常用的静态检查工具详解

    一.背景 俗话说,工欲善其事,必先利其器.go 作为一个对基础功能封装非常好的语言,对编码体验,如何更高效地写出高性能代码,都是考虑非常好的.因此,如何能够写出更美观.更安全的golang代码,也是我们需要关注的目标.go 本身也提供了非常多的工具供我们使用. 这里先将所有常用的指令放到这个表格中: 二.gofmt 主要修复代码格式,比如代码块的tab. 2.1 参数说明 -l: 仅打印需要替换的文件名字,不替换文件内容 如下: -r: 指定替换规则,格式:-s "pattern -> r

  • 基于golang如何实现error工具包详解

    前言 对于一门编程语言的开发者,类库包管理是一项考核编程语言成熟度的重要指标之一,Golang 也不例外.笔者在日常使用Golang语言开发系统程序时发现,在 Golang 的世界里,存在着大量的技术实现讨论和各种自制的解决方案. 最近在开发Go项目,发现Go语言本身存在的error并没有像触发panic时显示详细的调试信息.对于复杂的系统而言,这会让我们开发者需要一定的时间才能定位到错误.所以我们基本Go本身的error封装了一个可以快速定位错误工具包.下面让我们来看看这个工具包是怎么实现的.

  • Golang import 导入包语法及一些特殊用法详解

    package 的导入语法 写 Go 代码的时经常用到 import 这个命令用来导入包,参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用: fmt.Println( "我爱我们" ) fmt 是 Go 的标准库,它其实是去 GOROOT 下去加载该模块,当然 Go 的 import 还支持如下两种方式来加载自己写的模块: 相对路径 import "./model" // 当前文件同一目录的 model 目录,但是

  • golang的基础语法和常用开发工具详解

    golang的基础语法 golang的基础语法和其他语言大部分都差别不大,如果我们有学习过其他语言,比如JavaScript,php,java,python等,有其他语言的语法基础,那么我们学习golang将更容易上手.那我们直接开始介绍golang的语法吧. 注释 注释分单行注释和多行注释.golang的注释和其他的开发语言的注释是一样的.双斜杠表示单行注释,/**/表示多行注释. // 单行注释这么开头 /* 多行注释 */ 定义包名 一般来说,使用开发工具的时候,包名是不需要手动输入的,开

  • Java基础语法之二维数组详解

    一.二维数组 进入正题之前.首先为了便于大家理解,我画了一个图: xx枪战游戏中, 我是一个刚刚注册账号的小白,系统送了我两把枪,此时,我的武器库只有这么一层(可以理解为一位数组,枪就是对应的数组中对应的元素) 经过艰苦卓绝的战斗,终于有了一笔钱,现在我打算配置好的游戏装备,我现在有了一个枪柜,它可以存放三层的枪械,每一层都可以放多把武器(这个就是二维数组,有多层,每层都是一个一维数组) 随着游戏时长和我的高超技术,获取游戏装备的效率越来越高了,一个枪柜已经存不下了,于是,我就有了多个枪柜(这个

  • Python基础语法之变量与数据类型详解

    目录 一. 输出函数print 1.1 可以输出数字 1.2 可以输出字符串 1.3 可以输出表达式 1.4 可以输出至文件中 二. 变量与数据类型 2.1 整型 2.2 浮点型 2.3 字符串型 2.4 布尔型 3. 数据类型转换 3.1 int() 3.2 float() 3.3 str() 一. 输出函数print 在python中,print()是可以直接使用的输出函数,将数据输出到控制台上. 1. print函数的使用 1.1 可以输出数字 只要是数字都可以输出 # author: 爪

  • C#基础语法:可空类型详解

    以下是System.Nullable<T>在FCL中的定义. [Serializable, StructLayout(LayoutKind.Sequential)] public struct Nullable<T> where T :struct { private Boolean hasValue= false; internal T value= default(T); public Nullable(T value) { this.value= value; this.ha

  • 初学java常用开发工具介绍

    Java的应用越来越广泛,学习Java的人也越来越多.学过程序设计的人知道,使用Basic进行程序设计,可以使用QBasic.Visual Basic等开发工具:使用C语言进行程序设计,可以使用Turbo C.Visual C++.C++ Builder等开发工具.这些开发工具集成了编辑器和编译器,是集成开发工具,很方便使用.学习Java程序设计,同样需要方便易用的开发工具.Java的开发工具很多,而且各有优缺点,初学者往往不知道有哪些常用的开发工具,或者由于面临的选择比较多而产生困惑.本文对初

  • MySQL常用慢查询分析工具详解

    目录 引言 1.调优工具mysqldumpslow 1.1调优工具常用设置 1.2 调优工具常用命令 1.3 慢日志文件分析 2. 调优工具show profile 引言 在日常的业务开发中MySQL 出现慢查询是很常见的 大部分情况下会分为两种情况: 1.业务增长太快 2.要么就是SQL 写的太xx了 所以对慢查询 SQL 进行分析和优化很重要其中 mysqldumpslow 是 MySQL 服务自带的一款很好的分析调优工具 1.调优工具mysqldumpslow 1.1调优工具常用设置 1.

  • js基础之DOM中document对象的常用属性方法详解

    -----引入 每个载入浏览器的 HTML 文档都会成为 Document 对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问. 属性 1  document.anchors  返回对文档中所有 Anchor 对象的引用.还有document.links/document.forms/document.images等 2  document.URL       返回当前文档的url 3  document.title       返回当前文档的标题 4  do

  • jstl标签基础开发步骤(详解)

    step1. 导包(导入要使用的标签的jar文件). step2. 使用taglib指令引入要使用的标签. taglib指令: uri:标签的命名空间.     prefix:命名空间的别名. 注: 命名空间:是为了区分同名的元素而添加的前缀. 自定义标签: step1. 写一个java类,继承SimpleTagSupport类. step2. 在doTag方法里面,编写处理逻辑. step3. 描述标签.(.tld文件里面) 注: <body-content>的值可以是 empty  没有标

  • 微信小程序开发数据缓存基础知识辨析及运用实例详解

    提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容. 提示:以下是本篇文章正文内容,下面案例可供参考 一.微信数据缓存是什么? 在实际开发中,在用到一个数据时,我们需要调用api接口去得到,然后渲染在页面中,但是对于一些数据,是经常需要使用的,如果每次使用时都需要调用api接口,会十分麻烦.数据缓存就解决了这个问题,我们可以在初次调用某api得到数据的同时将数据缓存,那么在之后的使用过程

  • Golang基础教程之字符串string实例详解

    目录 1. string的定义 2.string不可变 3.使用string给另一个string赋值 4.string重新赋值 补充:字符串拼接 总结 1. string的定义 Golang中的string的定义在reflect包下的value.go中,定义如下: StringHeader 是字符串的运行时表示,其中包含了两个字段,分别是指向数据数组的指针和数组的长度. // StringHeader is the runtime representation of a string. // I

随机推荐