上一篇文章 我们介绍了 Go 语言的一些特性以及环境的安装。具体可以参见 https://juejin.cn/user/3491704659786455
Golang 简单、高效、并发的特性吸引了众多开发人员加入到 Golang 开发的大家庭中 目前已经涌现大量通过 Golang 原生开发的大型开源项目 并在软件行业中发挥重要作用 其中包括 Docker、Kubernetes、etcd 等。
hello Go本文我们将编写我们的第一个 Golang 程序 正式成为一名 Golang 开发者。相信大多数读者的第一个可运行的程序都是简单的 “Hello World” 输出 这代表了我辈程序员对计算机世界无尽的探索热情和激情。同时大多数读者也会对这个简单的 HelloGo 小程序表示不屑 因为它并不能体现太多的语法和语言特性。
因此我们决定稍微提高一下第一个 Golang 程序的编码难度 HelloGo.go 将会是一个简单的命令行聊天机器人 它将展示部分 Golang 特性 让读者们对 Golang 语言有一个大致的了解。即使第一次没有读懂代码也并没有关系 随着知识点的逐渐展开与深入 相信再回头时读者能够轻易读懂以下代码。
// 每一个可执行的 golang 程序必定具备一个 main 包 并在该 main 包下具有执行函数 main 的 go 文件 package main // HelloGo.go // 基于图灵 API 一个简单的聊天机器人 // 引入相关依赖 import ( bytes encoding/json fmt io/ioutil math/rand net/http // 请求体结构体 type requestBody struct { Key string json: key Info string json: info UserId string json: userid // 结果体结构体 type responseBody struct { Code int json: code Text string json: text List []string json: list Url string json: url // 请求机器人 func process(inputChan -chan string, userid string) { for{ // 从通道中接受输入 input : - inputChan if input EOF { break // 构建请求体 reqData : requestBody{ Key: 792bcf45156d488c92e9d11da494b085 , Info : input, UserId: userid, // 转义为 json byteData,_ : json.Marshal( reqData) // 请求聊天机器人接口 req, err : http.NewRequest( POST , http://www.tuling123.com/openapi/api , bytes.NewReader(byteData)) req.Header.Set( Content-Type , application/json;charset UTF-8 ) client : http.Client{} resp, err : client.Do(req) if err ! nil { fmt.Println( Network Error! ) }else { // 将结果从 json 中解析并输出到命令行 body, _ : ioutil.ReadAll(resp.Body) var respData responseBody json.Unmarshal(body, respData) fmt.Println( AI: respData.Text) resp.Body.Close() func main() { var input string fmt.Println( Enter EOF to shut down: ) // 创建通道 channel : make(chan string) // main 结束时关闭通道 defer close(channel) // 启动 goroutine 运行机器人回答线程 go process(channel, string(rand.Int63())) for { // 从命令行中读取输入 fmt.Scanf( %s , input) // 将输入放到通道中 channel - input // 结束程序 if input EOF { fmt.Println( Bye! ) break }
在上述这段长长的 HelloGo 程序中 我们通过 import 关键字引入了诸多的依赖包。在 Golang 中 主要通过 import 引入外部依赖。
可以注意到代码位于 main 包下 Golang 中规定可执行程序必须具备 main 包 具备可以执行函数 main 的 go 文件必须位于该包下。而且 Golang 中的代码通过换行符分割 不需要在每行代码后加上 ; 等结束符。
我们还定义了两个结构体 和两个函数。两个结构体分别代表请求体和结果体的 JSON 格式。process 函数执行了从通道中获取输入消息并发送到聊天机器人 API 从而获取返回结果的逻辑。main 函数启动了这个程序 从命令行中等待输入 并把输入放入到通道中 同时通过 goroutine 启动了一个新的线程执行 process 函数。通道可以理解为 main 函数线程和 process 函数线程信息传递的工具。
小结本文较为简单 主要介绍了使用 Go 语言编写一个简单的程序。我们的聊天机器人的逻辑很简单 即从命令行中读取用户输入 然后调用远程聊天机器人的 API 进行分析 使用 API 中返回的结果反馈给用户。
下面的文章我们将会介绍相关的 GO 语言编译工具。
阅读最新文章 关注公众号 aoho求索
本文转载自微信公众号「bugstack虫洞栈」,作者小傅哥 。转载本文请联系bugstack...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
在Python开发过程中,我们难免会遇到多重条件判断的情况的情况,此时除了用很多...
近几年,互联网行业蓬勃发展,在互联网浪潮的冲击下,互联网创业已成为一种比较...
前言 统计科学家使用交互式的统计工具(比如R)来回答数据中的问题,获得全景的认...
TIOBE 公布了 2021 年 3 月的编程语言排行榜。 本月 TIOBE 指数没有什么有趣的变...
溢价 域名 的续费价格如何?通常来说,因为溢价域名的价值高于普通域名,所以溢...
背景 我们知道 如果在Kubernetes中支持GPU设备调度 需要做如下的工作 节点上安装...
本文转载自公众号读芯术(ID:AI_Discovery)。 这一刻你正在应对什么挑战?这位前...
基本介绍 给定 n 个权值作为 n 个叶子节点,构造一颗二叉树,若该树的带权路径长...