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

go语言窗口开发库

作者:小编 更新时间:2023-09-11 07:28:32 浏览量:86人看过

GO语言(十三):使用 Go 和 Gin 开发 RESTful API(下)

为此,您将编写以下内容:

go语言窗口开发库-图1

①.、编写代码

a.添加代码以将专辑数据添加到专辑列表.

在此代码中:

①.)用于Context.BindJSON 将请求正文绑定到newAlbum.

b.更改您的main函数,使其包含该router.POST函数,如下所示.

①.)将路径中的POST方法与 /albumspostAlbums函数相关联.

a.如果服务器从上一节开始仍在运行,请停止它.

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

c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求.

该命令应显示添加专辑的标题和 JSON.

d.与上一节一样,使用curl检索完整的专辑列表,您可以使用它来确认添加了新专辑.

该命令应显示专辑列表.

为此,您将:

go语言窗口开发库-图2

a.在您在上一节中添加的函数下方postAlbums,粘贴以下代码以检索特定专辑.

此getAlbumByID函数将提取请求路径中的 ID,然后找到匹配的专辑.

(1)Context.Param用于从 URL 中检索id路径参数.当您将此处理程序映射到路径时,您将在路径中包含参数的占位符.

如上所述,实际使用中的服务可能会使用数据库查询来执行此查找.

b.最后,更改您的main,使其包含对router.GET的新调用,路径现在为/albums/:id ,如以下示例所示.

(1)将/albums/:id路径与getAlbumByID功能相关联.在 Gin 中,路径中项目前面的冒号表示该项目是路径参数.

b.在包含 main.go 的目录中的命令行中,运行代码以启动服务器.

该命令应显示您使用其 ID 的专辑的 JSON.如果找不到专辑,您将收到带有错误消息的 JSON.

恭喜!您刚刚使用 Go 和 Gin 编写了一个简单的 RESTful Web 服务.

本节包含您使用本教程构建的应用程序的代码.

如何配置go语言开发环境

举例:我的机器:

GOPATH= c:\go;c:\go\src;F:\workspace\goSample01;

GOBIN=c:\go\bin;F:\workspace\goSample01\bin;

其中,c:\go是go的安装路径;

F:\workspace\goSample01是我写的go语言项目的工程目录;

F:\workspace\goSample01\bin是go语言项目的工程目录下的可执行文件路径;

注意:这个基本环境不包含开发工具,也不能直接编译带C代码的go程序.

"fmt"

"github.com/astaxie/beedb"

_ "github.com/ziutek/mymysql/godrv"

为了编译该a.go文件,需要启动Console.bat,然后在该命令行窗口,进入c:\go\src目录下,执行go getgithub.com/astaxie/beedb

Go get github.com/ziutek/mymysql/godrv .

配置goclipse(可选)

(如果不喜欢eclipse开发工具,请跳过这个配置.)

packagemainimport"fmt"func main(){ fmt.Printf("hello, world")}

配置gocode(可选)

如果不需要go语法辅助和eclipse里面的(按ALT+/)弹出go语言自动辅助功能,请跳过这个配置.

从开发工具这块看,go语言还不够成熟,开发工具都还不完善,有待改进.

Google有个在线运行go语言的教程(),很不错.支持在web上直接运行大部分的go程序,想了解这个教程的源代码的朋友可以通过以下方式获取.如果没兴趣,可以跳过这个步骤.

hg clone

编译带调用C代码的go文件(可选)

set GOOS=windows

set GOROOT=c:\go

set GOBIN=%GOROOT%\bin

set GOPATH=%GOROOT%;F:\workspace\goSample01;

例如:

go build -compiler gccgo test_c.go

运行调用C代码的go文件(可选)

①.、testc.go.

创建rand目录,然后在rand里面创建testc.go. 代码如下:

package rand

/*

//

#include stdio.h

go语言窗口开发库-图3

*/

import "C"

func PrintHello() {

C.puts(C.CString("Hello, world\n"))

}

在rand下创建a.go.代码如下:

import "fmt"

func SayHello(name string){

fmt.Println(name)

在rand的上一级创建test_import.go.代码如下:

package main

import "./rand"

func main(){

rand.SayHello("tom")

rand.PrintHello()

go run test_import.go

在测试其它几个C代码的时候,发现windows版本的cgo还有些编译问题,同样的代码转移到苹果的XCODE下就没有问题.后来终于发现原因了,原来有些例子是unix平台下的,而在windows平台下,方法名和参数需要做调整.

例如:下面代码在windows下编译报一堆错误.

#include stdlib.h

func Random() int {

return int(C.random())

func Seed(i int) {

C.srandom(C.uint(i))

这里需要把return int(C.random()) 修改为"return int(C.rand())"

C.srandom(C.uint(i))修改为"C.srand(C.uint(i))"编译就OK了.

在前一小节中介绍了点亮第一个LED灯,这里我们准备进阶尝试下,输出第一段PWM波形.(PWM也就是脉宽调制,一种可调占空比的技术,得到的效果就是:如果用示波器测量引脚会发现有方波输出,而且高电平、低电平的时间是可调的.)

这里爪爪熊准备写成一个golang的库,并开源到github上,后续更新将直接更新到github中,如果你有兴趣可以和我联系. github.com/dpawsbear/bear_rpi_go

我在很多的教程中都看到说树莓派的PWM(硬件)只有一个GPIO能够输出,就是 GPIO1 .这可是不小的打击,因为我想使用至少四个 PWM ,还是不死心,想通过硬件手册上找寻蛛丝马迹,看看究竟怎么回事.

根据以上两个图对比可以发现如下规律:

为了验证个人猜想是否正确,这里先直接使用指令的模式,模拟配置下是否能够正常输出.

小节:树莓派具有四路硬件输出PWM能力,但是四路中只能输出两个独立(占空比独立)的PWM,同时四路输出的频率均是恒定的.

因为拿到了手册,这里我想直接操作寄存器的方式进行设置,也是顺便学习下Go语言处理寄存器的过程.首先需要拿到pwm 系列寄存器的基地址,但是翻了一圈手册,发现只有偏移,没有找到基地址.

以下是demo(pwm) 源码

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

编辑推荐

热门文章