当前位置:主页 > 查看内容

从零学 Go 语言:第一个 Go 程序

发布时间:2021-06-17 00:00| 位朋友查看

简介:前文回顾 上一篇文章 我们介绍了 Go 语言的一些特性以及环境的安装。具体可以参见 https://juejin.cn/user/3491704659786455 Golang 简单、高效、并发的特性吸引了众多开发人员加入到 Golang 开发的大家庭中 目前已经涌现大量通过 Golang 原生开发的大型开源……

前文回顾

上一篇文章 我们介绍了 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求索


本文转自网络,原文链接:https://developer.aliyun.com/article/784767
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐