当前位置: 首页 > news >正文

拓展学习-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      = 3value2 string = "Hello World"
)

上述有三种变量声明方式,var是golang的关键词,用于变量的声明。第一、三和四种可以在任意地方声明,当定义在函数体外时相当于全局变量;而第二种只能在函数体内声明,相当于局部变量。变量在声明后若不手动定义,编译器将为其赋值为相应的默认值

注意:golang中的变量、方法、结构体等等的名称都推荐使用驼峰命名法,而名字的首字母如果是小写字母则表示在包(package)内可见;而如果是大写字母则表示包外可见。

常量
const var a int = 1
const var (b int = 2c 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    intvar 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的基础语法 golang的基础语法和其他语言大部分都差别不大&#xff0c;如果我们有学习过其他语言&#xff0c;比如JavaScript&#xff0c;php&#xff0c;java&#xff0c;python等&#xff0c;有其他语言的语法基础&#xff0c;那么我们学习golang将更容易上手。那我们直…...

得计算题者得天下!软考系统集成计算题详解!

软考中级系统集成项目管理工程师考试一共有《综合知识》和《案例分析》两门科目&#xff0c;而在这两科中都会涉及到计算题&#xff0c;特别是案例分析中&#xff0c;计算题每次考试都会占到一道大题&#xff0c;共25分&#xff0c;占到了科目总分的1/4&#xff0c;所以对于系统…...

在AdaBoost中每轮训练后,为什么错误分类的样本权重会增大e^2αt倍

在 AdaBoost 的每一轮迭代中&#xff0c;样本 i i i 的权重更新公式为&#xff1a; w t 1 , i w t , i ⋅ exp ⁡ ( − α t y i G t ( x i ) ) Z t w_{t1,i} \frac{w_{t,i} \cdot \exp(-\alpha_t y_i G_t(x_i))}{Z_t} wt1,i​Zt​wt,i​⋅exp(−αt​yi​Gt​(xi​))​ …...

什么是数据中心?

数据中心是一个专门用于容纳大量联网计算机设备的设施&#xff0c;这些设备共同协作&#xff0c;以处理、存储和传输数据。现代社会中&#xff0c;大部分高科技公司都依赖数据中心来提供在线服务&#xff0c;例如网站、应用程序和云服务等。可以说&#xff0c;数据中心是互联网…...

【工具使用】VSCode如何将本地项目关联到远程的仓库 (vscode本地新项目与远程仓库建立链接)

在日常练习的项目中&#xff0c;我每次都在vscdoe编写前台代码&#xff0c;但是对于编写的代码&#xff0c;如何将本地项目关联到远程的仓库&#xff1b;这里做一下记录 文章目录 1、Gitee 新建远程仓库2、将本地的项目和远程仓库进行关联**3、将本地修改的代码推送到远程通过命…...

安全见闻-二进制与网络安全的关系

一、二进制的基本概念 二、二进制在网络安全中的重要性 三、二进制安全的概念与范畴 1. 二进制安全的定义 2. 范畴 四、二进制安全的渗透测试方法 1. 静态分析 2. 动态分析 3. 模糊测试 4. 漏洞利用 5. 代码审计 五、结论 学习视频泷羽sec&#xff1a;安全见闻&…...

MongoDB 部署指南:从 Linux 到 Docker 的全面讲解

一、MongoDB 简介 MongoDB 是一种 NoSQL 数据库&#xff0c;以文档模型存储数据&#xff0c;具备高性能、弹性扩展性和分布式架构等特点&#xff0c;非常适用于高并发和大数据量的场景。本文将从 Linux 和 Docker 环境开始讲解&#xff0c;帮助读者在不同环境下顺利部署 Mongo…...

Java AQS 源码

前言 相关系列 《Java & AQS & 目录》&#xff08;持续更新&#xff09;《Java & AQS & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Java & AQS & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Java & …...

栈和队列(1)——栈

栈的基本概念 1. 栈的定义&#xff1a;只允许在一端进行插入或删除操作的线性表&#xff08;可以理解为操作受限的线性表&#xff09;。 2. 栈的特点&#xff1a;后进先出&#xff08;LIFO&#xff09;。 3. 栈的基本操作&#xff1a;初始化、销毁、进栈、出栈、读栈顶元素等…...

Java中的反射(Reflection)

先上两张图来系统的看一下反射的作用和具体的实现方法 接下来详细说一下反射的步骤以及之中使用的方法&#xff1a; 获取Class对象&#xff1a; 要使用反射&#xff0c;首先需要获得一个Class对象&#xff0c;该对象是反射的入口点。可以通过以下几种方式获取Class对象&#x…...

【IC验证】linux系统下基于QuestaSim的systemverilog仿真TCL命令

linux系统下基于QuestaSim的systemverilog仿真TCL命令 一.终端打开QuestaSim二.QuestaSim中TCL脚本指令1.仿真库的创建&#xff08;vlib&#xff09;-非必要2.编译命令&#xff08;vlog&#xff09;3.仿真命令&#xff08;vlog&#xff09;4.运行命令&#xff08;run&#xff0…...

Python图像处理库PIL,实现旋转缩放、剪切拼接以及滤波

文章目录 切割缩放和旋转拼接 PIL的Image类&#xff0c;提供了一些常用的图像处理方法。 切割缩放和旋转 PIL可以很方便地实现如下效果 代码如下 from PIL import Image path lena.jpg img Image.open(path) # 读取 img.resize((50, 50), resampleImage.Resampling.NEARE…...

xhr的readyState和status

XMLHttpRequest&#xff08;XHR&#xff09;对象中的readyState和status用于监控异步 HTTP 请求的状态。它们分别表示请求的当前阶段和服务器的响应状态。 readyState 用于判断请求所处的阶段&#xff0c;确保数据完全接收。 status 用于判断请求的结果状态&#xff08;如200表…...

Rust 力扣 - 238. 除自身以外数组的乘积

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 这题主要有个关键点&#xff0c;就是元素能取0&#xff0c;然后我们分类讨论元素为0的数量 如果数组中存在至少两个元素为0&#xff0c;则每个元素的除自身以外的乘积为0如果数组中仅存在一个0&#xff0c;则为…...

【Vue框架】基础语法练习(1)

其实更多知识点已经在Vue.js官网十分清楚了&#xff0c;大家也可以去官网进行更细节的学习 https://cn.vuejs.org/ 说明&#xff1a;目前最新是Vue3版本的&#xff0c;但是Vue2已经深得人心&#xff0c;所以就是可以支持二者合用。它们最大的区别就是Vue3是组合式API&#xf…...

开源一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码

大家好&#xff0c;我是一颗甜苞谷&#xff0c;今天分享一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码。 前言 在当前的物流仓储行业&#xff0c;企业面临着信息化升级的迫切需求&#xff0c;但往往受限于高昂的软件采购和维护成本。现有的…...

开源一套基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单的源码

大家好&#xff0c;我是一颗甜苞谷&#xff0c;今天分享一款基于若依的wms仓库管理系统&#xff0c;支持lodop和网页打印入库单、出库单的源码。 前言 在当今快速发展的商业环境中&#xff0c;库存管理对于企业来说至关重要。然而&#xff0c;许多企业仍然依赖于传统的、手动…...

HTML+JavaScript案例分享: 打造经典俄罗斯方块,详解实现全过程

在本文中,我们将深入探讨如何使用 JavaScript 实现经典的俄罗斯方块游戏。俄罗斯方块是一款广为人知的益智游戏,通过操纵各种形状的方块,使其在游戏区域内排列整齐,以消除完整的行来获得分数。 效果图如下: 一、游戏界面与布局 我们首先使用 HTML 和 CSS 来创建游戏的界面…...

【网页布局技术】项目五 使用CSS设置导航栏

《CSSDIV网页样式与布局案例教程》 徐琴 目录 任务一 制作简单纵向导航栏支撑知识点1&#xff0e;合理利用display:block属性2&#xff0e;利用margin-bottom设置间隔效果3&#xff0e;利用border设置特殊边框 任务二 制作简单横向导航栏任务三 制作带图片效果的横向导航栏任务…...

自学网络安全,网络安全入门学习路线,收藏这篇就够了

在当今高度数字化的时代&#xff0c;网络安全已经成为了一个至关重要的领域。随着网络威胁的不断演变和增长&#xff0c;对于专业网络安全人才的需求也在急剧上升。对于那些对网络安全充满热情并且渴望自学成才的人来说&#xff0c;制定一个系统、全面且高效的学习路线和规划是…...

React Query已过时?新一代请求工具横空出世

大家好&#xff01;今天我想和你们聊聊一个让我兴奋不已的话题 —— 分页列表请求策略。你们知道吗&#xff1f;这个策略真的帮了我大忙&#xff01;它不仅让我的代码更简洁&#xff0c;还大大提升了用户体验。说实话&#xff0c;每次用到这个功能&#xff0c;我都忍不住赞叹。…...

视频怎么进行格式转换?6款视频转换MP4格式的免费软件!

在数字时代&#xff0c;视频格式的多样性为我们提供了丰富的观看和编辑选择&#xff0c;但同时也带来了格式不兼容的困扰&#xff1a;MOV、AVI、WMV、MKV……这些格式多多少少都会遇到因不兼容而无法播放或下载分享的场景。当你想要将视频文件从一种格式转换为另一种格式&#…...

智能文档处理平台:免费体验智能化医疗信息提取

前提&#xff1a;医疗行业信息碎片化问题普遍&#xff0c;手工数据录入效率低且易错&#xff0c;导致数据管理难度大。本系统可帮助医疗机构在信息管理上迈向智能化&#xff0c;优化流程并提升效率。 系统概述&#xff1a; 思通数科推出的智能文档处理系统&#xff0c;专为解…...

Java 中 InputStream 的使用:try-with-resources 与传统方式的比较

在 Java 中&#xff0c;处理输入输出流时&#xff0c;确保资源的正确管理至关重要。特别是 InputStream 这样的流&#xff0c;一旦使用完成&#xff0c;必须正确关闭以释放资源。本文将对两种常见的资源管理方式进行比较&#xff1a;try-with-resources 语句和传统的 try-catch…...

【MATLAB源码-第271期】基于matlab的雷达发射回波模拟,包括匹配滤波,加窗旁瓣控制,以及MTD处理。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 雷达系统是一种广泛应用于目标探测和跟踪的技术&#xff0c;其核心在于发射电磁波并分析返回信号。本文将探讨雷达发射波形、回波信号的模拟、匹配滤波的过程、加窗控制旁瓣的策略以及慢时间MTD处理的整体系统框架。 一、雷…...

Linux系统编程——信号量

一、信号量的定义和原理 1、概念 原子操作&#xff1a;不可中断的一个或者一系列的操作&#xff0c;即一件事要么做要么不做。临界资源&#xff1a;不同进程能够看到的一份公共资源&#xff0c;一次只能被一个进程使用。PV操作&#xff1a;由于信号量只能进行两种操作等待和发…...

Oracle索引问题汇总

一、oracle 数据库TIMESTAMP 时间字段&#xff0c;设置索引后&#xff0c;通过该字段进行排序&#xff0c;索引排序不生效问题 1. 记录下在工作中遇到的一次索引问题 问题描述&#xff1a; 数据库&#xff1a;oracle&#xff1b; 日志记录表中的一个创建时间&#xff08;create…...

基于QT用工厂模式实现串口通信与网络通信激光器的控制

配置文件网络配置:IP+Port 串口配置:端口号+波特率 首先,我们需要创建一个配置文件 config.ini,内容如下: [SerialLaser] portName = COM1 baudRate = 9600[NetworkLaser] ipAddress = 192.168.1.1 port = 1234两类激光器的实现: #include <QCoreApplicat…...

【代码随想录Day58】图论Part09

dijkstra&#xff08;堆优化版&#xff09;精讲 题目链接/文章讲解&#xff1a;代码随想录 import java.util.*;class Edge {int to; // 邻接顶点int val; // 边的权重Edge(int to, int val) {this.to to;this.val val;} }class Pair<U, V> {public final U first; …...

_或者%关键字模糊匹配查出所有数据

1、问题 sql模糊匹配&#xff0c;如果页面输入_或者%&#xff0c;可以查出所有数据。 (1) SELECT * FROM test WHERE sfsc N and zdzwm like %%% (2) SELECT * FROM test WHERE sfsc N and zdzwm like %_% 2、解决方案 &#xff08;1&#xff09;mysql数据库 加转义字…...