网站首页 > 文章中心 > 其它

go基础语言教程

作者:小编 更新时间:2023-08-12 18:38:24 浏览量:42人看过

Go语言基础语法(一)

本文介绍一些Go语言的基础语法.

先来看一个简单的go语言代码:

go语言的注释方法:

代码执行结果:

下面来进一步介绍go的基础语法.

go语言中格式化输出可以使用 fmt 和 log 这两个标准库,

常用方法:

示例代码:

执行结果:

更多格式化方法可以访问中的fmt包.

log包实现了简单的日志服务,也提供了一些格式化输出的方法.

下面来介绍一下go的数据类型

下表列出了go语言的数据类型:

int、float、bool、string、数组和struct属于值类型,这些类型的变量直接指向存在内存中的值;slice、map、chan、pointer等是引用类型,存储的是一个地址,这个地址存储最终的值.

常量是在程序编译时就确定下来的值,程序运行时无法改变.

Go 语言的运算符主要包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符以及指针相关运算符.

算术运算符:

关系运算符:

逻辑运算符:

位运算符:

赋值运算符:

指针相关运算符:

下面介绍一下go语言中的if语句和switch语句.另外还有一种控制语句叫select语句,通常与通道联用,这里不做介绍.

if语法格式如下:

if ... else :

else if:

语法格式:

另外,添加 fallthrough 会强制执行后面的 case 语句,不管下一条case语句是否为true.

下面介绍几种循环语句:

也可以通过标记退出循环:

--THE END--

GO语言(十一):开始使用多模块工作区

本教程介绍 Go 中多模块工作区的基础知识.使用多模块工作区,您可以告诉 Go 命令您正在同时在多个模块中编写代码,并轻松地在这些模块中构建和运行代码.

在本教程中,您将在共享的多模块工作区中创建两个模块,对这些模块进行更改,并在构建中查看这些更改的结果.

首先,为您要编写的代码创建一个模块.

①.、打开命令提示符并切换到您的主目录.

在 Linux 或 Mac 上:

在 Windows 上:

我们的示例将创建一个hello依赖于 golang.org/x/example 模块的新模块.

创建土嘎嘎的粉丝们大家好模块:

使用 . 添加对 golang.org/x/example 模块的依赖项go get.

在 hello 目录下创建 hello.go,内容如下:

现在,运行 hello 程序:

在这一步中,我们将创建一个go.work文件来指定模块的工作区.

在workspace目录中,运行:

该go work init命令告诉为包含目录中模块的工作空间go创建一个文件 .go.work./hello

该go命令生成一个go.work如下所示的文件:

该go.work文件的语法与go.mod相同.

该go指令告诉 Go 应该使用哪个版本的 Go 来解释文件.它类似于文件中的go指令go.mod .

该use指令告诉 Go在进行构建时hello目录中的模块应该是主模块.

所以在模块的任何子目录中workspace都会被激活.

Go 命令包括工作区中的所有模块作为主模块.这允许我们在模块中引用一个包,即使在模块之外.在模块或工作区之外运行go run命令会导致错误,因为该go命令不知道要使用哪些模块.

此时此刻呢,我们将golang.org/x/example模块的本地副本添加到工作区.然后,我们将向stringutil包中添加一个新函数,我们可以使用它来代替Reverse.

①.、克隆存储库

在工作区目录中,运行git命令来克隆存储库:

该go work use命令将一个新模块添加到 go.work 文件中.它现在看起来像这样:

该模块现在包括example.com/hello模块和 +golang.org/x/example 模块.

我们将向golang.org/x/example/stringutil包中添加一个新函数以将字符串大写.

将新文件夹添加到workspace/example/stringutil包含以下内容的目录:

修改workspace/hello/hello.go的内容以包含以下内容:

从工作区目录,运行

Go 命令在go.work文件指定的hello目录中查找命令行中指定的example.com/hello模块 ,同样使用go.work文件解析导入golang.org/x/example.

go.work可以用来代替添加replace 指令以跨多个模块工作.

由于这两个模块在同一个工作区中,所以呢很容易在一个模块中进行更改并在另一个模块中使用它.

现在,要正确发布这些模块,我们需要发布golang.org/x/example 模块,例如在v0.1.0. 这通常通过在模块的版本控制存储库上标记提交来完成.发布完成后,我们可以增加对 golang.org/x/example模块的要求hello/go.mod:

这样,该go命令可以正确解析工作区之外的模块.

如何学习GO语言?

Go语言也称 Golang,兼具效率、性能、安全、健壮等特性.这套Go语言教程(Golang教程)通俗易懂,深入浅出,既适合没有基础的读者快速入门,也适合工作多年的程序员查阅知识点.

Go 语言

这套教程在讲解一些知识点时,将 Go 语言和其他多种语言进行对比,让掌握其它编程语言的读者能迅速理解 Go 语言的特性.Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验就可以轻松搞定.

Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持.Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程.

因为Go语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同.但是它通过接口(interface)的概念来实现多态性.Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说.所以呢可以说Go语言是一门混合型的语言.

此外,很多重要的开源项目都是使用Go语言开发的,其中包括 Docker、Go-Ethereum、Thrraform 和 Kubernetes.Go 是编译型语言,Go 使用编译器来编译代码.编译器将源代码编译成二进制(或字节码)格式;在编译代码时,编译器检查错误、优化性能并输出可在不同平台上运行的二进制文件.要创建并运行 Go 程序,程序员必须执行如下步骤.

保存文件;编译程序;运行编译得到的可执行文件.

这不同于 Python、Ruby 和 JavaScript 等语言,它们不包含编译步骤.Go 自带了编译器,所以呢无须单独安装编译器.

GO语言(十六):模糊测试入门(上)

本教程介绍了 Go 中模糊测试的基础知识.通过模糊测试,随机数据会针对您的测试运行,以尝试找出漏洞或导致崩溃的输入.可以通过模糊测试发现的一些漏洞示例包括 SQL 注入、缓冲区溢出、拒绝服务和跨站点脚本攻击.

在本教程中,您将为一个简单的函数编写一个模糊测试,运行 go 命令,并调试和修复代码中的问题.

首先,为您要编写的代码创建一个文件夹.

运行go mod init命令,为其提供新代码的模块路径.

此时此刻呢,您将添加一些简单的代码来反转字符串,稍后我们将对其进行模糊测试.

在此步骤中,您将添加一个函数来反转字符串.

独立程序(与库相反)始终位于 package 中main.

此函数将接受string,使用byte进行循环 ,并在最后返回反转的字符串.

此函数将运行一些Reverse操作,然后将输出打印到命令行.这有助于查看运行中的代码,并可能有助于调试.

e.该main函数使用 fmt 包,所以呢您需要导入它.

第一行代码应如下所示:

从包含 main.go 的目录中的命令行,运行代码.

可以看到原来的字符串,反转它的结果,然后再反转它的结果,就相当于原来的了.

现在代码正在运行,是时候测试它了.

在这一步中,您将为Reverse函数编写一个基本的单元测试.

b.将以下代码粘贴到 reverse_test.go 中.

这个简单的测试将断言列出的输入字符串将被正确反转.

使用运行单元测试go test

此时此刻呢,您将单元测试更改为模糊测试.

单元测试有局限性,即每个输入都必须由开发人员添加到测试中.模糊测试的一个好处是它可以为您的代码提供输入,并且可以识别您提出的测试用例没有达到的边缘用例.

在本节中,您将单元测试转换为模糊测试,这样您就可以用更少的工作生成更多的输入!

请注意,您可以将单元测试、基准测试和模糊测试保存在同一个 *_test.go 文件中,但对于本示例,您将单元测试转换为模糊测试.

Fuzzing 也有一些限制.在您的单元测试中,您可以预测Reverse函数的预期输出,并验证实际输出是否满足这些预期.

例如,在测试用例Reverse("Hello, world")中,单元测试将返回指定为"dlrow ,olleH".

模糊测试时,您无法预测预期输出,因为您无法控制输入.

但是,Reverse您可以在模糊测试中验证函数的一些属性.在这个模糊测试中检查的两个属性是:

(1)将字符串反转两次保留原始值

注意单元测试和模糊测试之间的语法差异:

随着单元测试转换为模糊测试,是时候再次运行测试了.

a.在不进行模糊测试的情况下运行模糊测试,以确保种子输入通过.

如果您在该文件中有其他测试,您也可以运行go test -run=FuzzReverse,并且您只想运行模糊测试.

b.运行FuzzReverse模糊测试,查看是否有任何随机生成的字符串输入会导致失败.这是使用go test新标志-fuzz执行的.

语料库文件的第一行表示编码版本.以下每一行代表构成语料库条目的每种类型的值.由于 fuzz target 只需要 1 个输入,所以呢版本之后只有 1 个值.

c.运行没有-fuzz标志的go test; 新的失败种子语料库条目将被使用:

由于我们的测试失败,是时候调试了.

GO语言入门,有什么好的教程啊?

可以学习黑马程序员的这个教程

go语言的优势

可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了.

静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高.

语言层面支持并发,这个就是Go最大的特色,天生的支持并发.Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发.

内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说GC(内存垃圾回收机制)不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC.

丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大.

内置强大的工具,Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难.

内嵌C支持,Go里面也可以直接包含C代码,利用现有的丰富的C库.

go语言语法(基础语法篇)

import "workname/packetfolder"

导入多个包

方法调用 包名.函数//不是函数或结构体所处文件或文件夹名

packagename.Func()

前面加个点表示省略调用,那么调用该模块里面的函数,可以不用写模块名称了:

当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已.下划线的作用仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数

import _ package

变量声明必须要使用否则会报错.

全局变量运行声明但不使用.

使用大小来区分函数可见性

大写是public类型

小写是private类型

func prifunc int{}

func pubfunc int{}

声明静态变量

const value int

定义变量

var value int

声明一般类型、接口和结构体

声明函数

func function () int{}

go里面所有的空值对应如下

通道类型

内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针

func new(Type) *Type

[这位博主有非常详细的分析]

Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可.

goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的.

同一个程序中的所有 goroutine 共享同一个地址空间.

语法格式如下:

通道(channel)是用来传递数据的一个数据结构.

通道的声明

通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯.操作符 - 用于指定通道的方向,发送或接收.如果未指定方向,则为双向通道.

[这里有比较详细的用例]

go里面的空接口可以指代任何类型(无论是变量还是函数)

声明空接口

go里面的的强制类型转换语法为:

int(data)

如果是接口类型的强制转成其他类型的语法为:

go里面的强制转换是将值复制过去,所以在数据量的时候有比较高的运行代价

以上就是土嘎嘎小编为大家整理的go基础语言教程相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章