Go 语言快速入门 What’s go ? Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 语言强制方法名括与{}之间不能有空行,不能换行{} 每个Go 语言程序必须有一个 Main包,包(Package)是Go 语言的资源管理的单位 每个Go 语言程序必须有一个Main函数,作为程序的入口 ,Go 使用 func 来定义函数 VSC 安装 Go 支持后,使用 pkgm 来快速生成 Main Package 和 Main 方法 Go 语言数据类型 在 Go 编程语言中,数据类型用于声明函数和变量 Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。 Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。 Go 错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制。
; 将代码编写到扩展名为 hello.go 的文件中; 通过 go run 命令查看 hello.go 运行效果; 通过 go build 命令对该 go文件进行编译,生成系统可执行文件; 在dos命令下执行生成的可执行文件 run 查看运行效果 # 在 project/main 执行以下命令 go run hello.go 使用 go run 这种方式执行 go 程序源码,会先载入 hello.go 的源码并由 /hello # 见下图操作过程 使用 go build 这种方式执行 go 程序源码打包成计算机可直接执行的二进制文件,与 go run 的区别在于 go run 是需要进行源码编译执行,go 如果我们是直接 go run go源代码,那么如果要在另外一个机器上这么运行,也需要go开发环境,否则无法执行。 直接运行生成的可执行Go程序,比如 hello 通过运行工具 go run 对源码文件进行运行 go 程序开发注意事项(重点) go源文件以“go”为文件名的扩展名。
目录 需求 开发的步骤 linux下如何开发Go程序 MAC下如何开发Go程序 Golang执行流程分析 编译和运行说明 Go程序开发的注意事项 Go语言的转义字符(escapechar) Golang 编译和运行hello.go 也可以直接使用go run hello.go的方式运行 MAC下如何开发Go程序 说明:在mac下开发go程序和windows基本一样 演示一下:如何在mac下开发一个 hello.go 程序源代码的编写:hello.go 编译再运行 直接go run hello.go来运行 Golang执行流程分析 如果是对源码编译后,再执行,Go的执行流程如下图 2)如果我们是直接go run go源代码,那么如果要在另外一个机器上这么运行,也需要go开发环境,否则无法执行。 有助于程序员调试错误 5)运行有两种形式 Go程序开发的注意事项 1)Go源文件以“go”为扩展名。 2)Go应用程序的执行入口是main函数。
, "from": 0, "size" : 500, "sort" : [{"create_time":"desc"}], "_source": ["username", "age"] } Go Go 代码示例: // GetByQueryPageSortScroll4ES 获取第一页数据 & 获取游标ID // ret: 文档切片, 游标ID, error func GetByQueryPageSortScroll4ES skipped" : 0, "failed" : 0 } } 参考文献 github/elastic/elasticsearch github/olivere/elastic/v7 pkg.go.dev
文章目录 1.根据 ID 删除 2.根据条件删除文档 3.批量删除 参考文献 本文借助第三方库 olivere/elastic 完成 Go 对 ES 的删除操作。 Go 对 Elasticsearch 的增删改查参见完整博文 Go Elasticsearch 增删改查(CRUD)快速入门。 1.根据 ID 删除 可以根据文档 ID 删除对应的文档。 }} {"delete":{"_id" : "33"}} {"delete":{"_id" : "44"}} {"delete":{"_id" : "55"}} 参考文献 elastic - pkg.go.dev
安装go开发工具 go现在有了国内可以访问的官方网站https://golang.google.cn/,在这里根据你的平台下载相应的版本即可。安装过程按照官方的步骤即可。 配置代理的命令如下: go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.io,direct 执行完上面两条命令之后,就可以愉快的进行下一步操作了 一个简单的编辑器环境配置 推荐使用vscode,这样,python,前端和go都可以用一个编辑器来搞定。 在vscode中安装go语言官方插件,然后使用ctrl+shift+p打开命令面板,搜索下面的内容 Go: Install/Update Tools vscode中如下所示: 然后全选进行安装即可
文章目录 1.根据 ID 修改 2.根据 ID 修改(不存在则插入) 3.根据条件更新 4.批量更新 参考文献 本文借助第三方库 olivere/elastic 完成 Go 对 ES 的更新操作。 Go 对 Elasticsearch 的增删改查参见完整博文 Go Elasticsearch 增删改查(CRUD)快速入门。 1.根据 ID 修改 可以根据文档 ID 更新对应的文档。
: 源代码编译安装-https://dl.google.com/go/go1.14.2.src.tar.gz Binary: 二进制解压安装-https://dl.google.com/go/go1.14.2 -xzf go1.4.linux-amd64.tar.gz #2.将 /usr/local/go/bin 目录添加至PATH环境变量 #在/root/.profile进行添加 export GOROOT = /usr/local/go #GOROOT 第三方包的安装包路径 export GOPATH=/home/go/ #需要BIN目录和GOPATH export PATH=$PATH:$GOBIN/bin :$GOPATH #3.验证是否安装成功 go env go version #4.go语言程序编译运行 package main import "fmt" func main() { fmt.Println } #5.编译运行hello.go go build hello.go go run hello.go && ./hello ? WeiyiGeek.Go-Binary
go语言这几年很火,被各大厂必备采用的技术栈,而且很多大型旧项目也有用go重构的实例。go语言应该怎么入门学习呢? 快速编译:编译速度极快,大型项目也能在几秒内完成,显著提升开发效率。并发友好:内置轻量级协程(goroutine)和通道(channel),简化并发编程,高效处理多任务。 Go学习文档推荐Go学习文档网:https://www.golangdev.cn/主要优势详解:高效性能:直接编译为机器码,无需虚拟机执行效率接近C++,典型基准测试表现:Go1.21比Python3.11 这些可以到o学习文档网多看几遍,里面包括了入门的基本语法,高级进阶,模块使用,go体系的介绍,功能库等,花了1-2个星期。 学习完后就可以去github上找开源go框架CMS等来按项目实操安装使用,并学着二次修改开发生态系统,以go项目实战来熟悉掌握go了。
一、go mod安装 1、为什么要安装go mod 在项目中需要某个依赖包,必须使用go get安装,否则运行go run main.go会报错。 这种方式在依赖包较多时不便于管理,于是在go1.11版本就有了go mod。 go mod是go的包管理工具,使用go mod后,无需把所有项目放在$GOPATH/src,项目可以放在任何位置 go get有时下载某个插件的时候需要FQ,如果你的电脑没有FQ的话是安装不上去的,比如 使用go mod创建项目 go mod init 项目名 在src目录下,我们创建一个叫api的项目 mkdir api 在根目录下执行 go mod init api 会看到如下输出 go: creating new go.mod: module api go: to add module requirements and sums: go mod tidy 表示module初始化成功了,在目录下生成go.mod
} 下面,我们需要对这个hello,world程序做一个基本的解释,首先是包,然后是函数 包 go语言使用包来组织源代码的,并实现命名空间的管理,任何一个go语言程序必须属于一个包,即每一个go程序的开头要写上 一个Go语言程序有且只有一个main函数,他是Go语言程序的入口函数,且必须属于main包,没有或者多于一个进行Go语言程序编译时都会报错; import import (“fmt”) 告诉 go 编译器这个程序需要使用 当你写go的时候,左大括号不换行也是go语法的一部分。 一个Go语言程序有且只有一个main函数,他是Go语言程序的入口函数,且必须属于main包,没有main或者多个main,进行Go语言程序编译时都会报错。 显然,Go 语言在这 3 个条件之间做到了最佳的平衡:快速编译,高效执行,易于开发。
文章目录 1.创建单个文档 1.1 Go 1.2 RESTful API 2.批量创建文档 2.1 Go 2.1 RESTful API 参考文献 创建完 ES 的 index,便可以向 index 本文借助第三方库 olivere/elastic 完成 Go 对 ES 的更新操作。 Go 对 Elasticsearch 的增删改查参见完整博文 Go Elasticsearch 增删改查(CRUD)快速入门。 1.创建单个文档 1.1 Go 借助 IndexService 创建指定 ID 的文档。 : "安徽", "identity":"12345678", "update_time":1627522828, "create_time":1627522828 } 2.批量创建文档 2.1 Go
[TOC] 0x00 Go语言基础之指针 描述: Go 语言中的指针区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算是安全指针。 Go语言中使用&字符放在变量前面对变量进行“取地址”操作。 语言基础之函数 描述: 其实在前面的示例中我们都已经接触到了函数,例如Go语言的内置函数或者是您自己编写的函数,在本章之中我们将详细讲解Go语言函数的使用。 1.函数定义 描述: Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于一等公民。 4.函数返回 描述: 与其他编程语言一样,Go语言中通过return关键字向外输出返回值。 单返回值 描述: Go语言中常规函数返回值。
Tips: 编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具(再次体现Go语言的优秀)。 非常注意、非常注意在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中。 split_test.go // # -v 指定一个目录将该目录下_test.go中设置的单元测试函数进行执行。 以及相关依赖包 ➜ go get golang.org/x/tools/cmd/godoc go: downloading golang.org/x/tools v0.1.7 go: downloading 与example_test.go或者example_包名_test.go都在同一个包下。
在Go代码中,如果某处需要一个特定类型的值并且一个类型不确定值可以表示为此特定类型的值, 则此类型不确定值可以使用在此处。Go编译器将此类型不确定值视为此特定类型的类型确定值。 《go语言的空白标识符》 iota iota是Go中预声明(内置)的一个特殊的具名常量。 iota被预声明为0,但是它的值在编译阶段并非恒定。 go虽然是编译型语言,但是go被设计为拥有垃圾回收等机制,因此go还需要一个运行时。这个也需要专门开一篇文章讲述。 《go语言的运行时》 还有一点需要说明的是,go的变量声明形式将类型说明符放在了最后面,它能在一定程度上减少C/C++的那种错误。 个人的一些废话,go是静态语言,但是不知道为什么搞了这个类型推断,是为了让写JavaScript的人快速上手吗?但是实际开发的时候,你就几乎一定会遇到类型转换,最后还是会回到这个问题。
[TOC] 0X00 Go语言基础之数组 描述: 本文主要介绍Go语言中数组(array)及它的基本使用。 Q: 什么是Array(数组)? 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 c[0]: Let's c[1]: Go c[2]: 语言 c[0]: Let's c[1]: Go c[2]: 语言 s1[2][1] 元素获取 : 重庆 3 [[北京 上海] [广州 深圳] 切片一般用于快速地操作一块数据集合。 ---- 0x02 Go语言基础之Map映射 描述: Go语言中提供的映射关系容器为map, 其内部使用散列表(hash)实现。
---- 0x01 Go语言基础之包 描述: 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的, 可以提高开发效率,使用其他开发者已经写好的代码(站在巨人的肩膀上) 1.包的定义 描述: Go语言的包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt、os、io等。 " // golang 项目的工程组织规范 ) Tips: 使用go get导入github上的package, 以 go-sqlite3 为例,采用go get将package进行下载go get /pkg/demo1 (compile)go-staticcheck 问题原因: go的环境设置问题,其次查看GOPATH目录中src为存放第三方go包。 this block 原因分析: 在学习study go时候会创建许多.go文件,并且在同一个目录下每个.go的文件里面都有package main,也就是main函数,这就是问题所在。
Go语言中标识符由字母数字和(下划线)组成,并且只能以字母和开头。 举几个例子:abc, _, _123, a123。 编程语言中常用的三种命名规则,而Go语言推荐使用驼峰法式命名。 Go 语言里的字符串的内部实现使用UTF-8编码。 Let's Go // 特点:原样输出 ` // 转义演示 s4 := "'c:\\weiyigeek\\go\\hello'" s5 := `c:\weiyigeek\go\hello Let's Go // 特点:原样输出 'c:\weiyigeek\go\hello' c:\weiyigeek\go\hello s1 String length: 4 s2 string goto语句可以在快速跳出循环、避免重复退出上有一定的帮助, Go语言中使用goto语句能简化一些代码的实现过程。
[TOC] 0x01 Go语言基础之错误处理 描述: Go语言中目前(1.16 版本中)是没有异常处理机制(Tips :说是在2.x版本中将会加入异常处理机制),但我们可以使用error接口定义以及panic 1.error 接口定义 描述: 在Golang中利用error类型实现了error接口,并且可以通过errors.New或者fmt.Errorf来快速创建错误实例。 error接口定义: type error interface { Error() string } Go语言的标准库代码包errors方法: // 方式1.在errors包中的New方法(Go 所以与其他高级编程语言一样,Go语言也可以采用结构体的特性, 并且Go语言通过struct来实现面向对象。 结构体指针构造函数 描述: Go语言的结构体没有构造函数,但我们可以自己实现一个。 Tips: Go语言构造函数约定俗成用new进行开头,例如 newDog()。
[TOC] 0x00 Go语言基础之Socket网络编程 现在的我们几乎每天都在使用互联网,但是你知道程序是如果通过网络互相通信吗? go SendReceiveProccess(conn) } } Client.go package main import ( "bufio" "fmt" "net" "os" = nil { return } } } Server.go与Client.go编译&运行&执行结果: go build && ./Server go build && . 利用Go语言分别实现HTTP的Client端与Server端服务。 Web后端项目通常是采用框架来实现,所以本章节主要对Go语言创建HTTP服务端的基础示例进行说明学习,而Go语言的Web应用开发框框在我后续笔记中将会进行实践讲解。