Golang 构建学习

Golang 构建学习

如何搭建Golang开发环境

1. 下载GOlang包
  1. https://golang.google.cn/dl/ 在地址上下载Golang
2. 配置包环境
  1. 修改全局环境变量,GOPROXY,GOPATH,GOROOT

    GOPROXY=https://goproxy.cn,direct
    GOROOT=“” // go二进制文件的路径

  2. mkdir project创建项目文件

  3. go mod init project创建包模块

  4. go get xxxxx获取第三方包

如何让程序运行起来

// main.go package main import "fmt" func main(){ fmt.Println("hello world") }
  • go run main.go执行程序运行
  • 程序的入口,要使用package main表示为主要入口,入口函数为func main
  • import "fmt"在使用包需要引入,如果是自定义的包,则从自己初始化的模块project开始,例如:go mod init project
  • fmt.Println打印日志,包中对外提供的接口,是要求首字母大写来表示的

如何编写函数

func (file *File) Write(b []byte) (n int, err error){} // 1 example func Write(b []byte) (int, error) {return 0, nil} // 2 example func nextInt(b []byte, pos int) (value, nextPos int) { return 0, 0} // 3 example // ---------多值输入----------------- func MyPrint(words ...string){ for _, w := range words{ fmt.Println(w) } } MyPrint("ab", "cd", "ef") // ---------End---------------------- // ----------值传递和指针传递--------------- var a = 5 func changeWithValue(b int){ b = 4 } func changeWithPoint(b *int){ *b = 4 } changeWithValue(a) // a is 5 changeWithPoint(&a) // a is 4

第一个例子:
第一个括号是类的实例句柄file,调用这个函数的只能是File类,首字母大写表示对外的接口。
第二个括号表示的输入参数,表示字节数组类型
第三个括号表示的输出参数,第一个输出参数为int类型,第二个输出参数为error类型

第二个例子:
没有第一个括号的类声明,函数首字母大写说明是模块对外的接口调用
第二个括号是输入参数的声明
第三个括号是输出参数的声明,注意这个没有向上面例子中提前声明返回值变量,需要在函数体中{},声明返回值变量

第三个例子:
与以上雷同,区别在于返回值,如果两个相同类型的返回值,则可以采用省略的写法v1, v2 int

多值输入例子:
注意Myprint函数的定义与调用处。
函数定义: 2个以上的相同参数,可以使用...string声明类型,承载的是[]string数组
函数调用: (str1, str2, str3)

值传递和引用传递
值传递:函数中使用的是被复制的值,不影响外部数据
引用传递: 函数中使用的是指向值的指针地址,通过函数修改传递的数据

注意上面的用法: 指针声明*int和 地址传递&a

如何导入函数

如果是创建的项目,执行go mod init project,项目内的模块引入,则通过project.module引入
函数如果是在模块内部,也就是同一个package目录下,则不同导入,直接调用就行
函数如果是要被外部模块调用,一律首字母要大写,并且模块先要被引入

import _ "net/http/pprof"不以模块的方式调用,模块下的对外函数全引入

如何构建多平台的二进制文件

BINARY_NAME=myproject VERSION=v2.1.0 BUILD_TIME=$(shell date +'%Y.%m.%d %H:%M:%S') LDFLAGS="-s -w -X main.version=$(VERSION) -X 'main.buildTime=$(BUILD_TIME)'" swag: swag init cmd/server.go -o docs # sed -i '/LeftDelim/d' ./docs/docs.go # sed -i '/RightDelim/d' ./docs/docs.go build: env GO111MODULE=on GOPROXY=https://proxy.golang.com.cn,direct go mod tidy env GO111MODULE=on GOPROXY=https://proxy.golang.com.cn,direct go mod vendor env GO111MODULE=on GOPROXY=https://goproxy.io,direct CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags $(LDFLAGS) -o bin/$(BINARY_NAME) cmd/server.go env GO111MODULE=on GOPROXY=https://goproxy.io,direct CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags $(LDFLAGS) -o bin/$(BINARY_NAME).mac cmd/server.go env GO111MODULE=on GOPROXY=https://goproxy.io,direct CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags $(LDFLAGS) -o bin/$(BINARY_NAME).exe cmd/server.go upx -9 bin/yxapi clean: rm bin/$(BINARY_NAME) rm bin/$(BINARY_NAME).mac rm bin/$(BINARY_NAME).exe

参考以上的代码,即可创建多个平台二进制文件

构建Web开发

Web开发虽然可以用多种不同的语言实现,但是基本的理论是一致的,比如鉴权,路由,数据库抽象,参数校验,mvc分层等等。

1. 如何组织代码

目录结构如下:
Project

  • bin go build构建的输出目录
  • cmd 二进制命令程序
    • server.go 服务的启动程序
  • configs 配置目录
    • *.sql 初始化的二进制文件
    • config.yaml 配置文件
    • mongo.go mongo的配置结构
    • mysql.go mysql配置结构
    • redis.go redis配置结构
    • server.go 服务的配置结构
  • docker
    • README.md
  • docs 此目录由swag init生成
  • internal 服务的内容模块
    • controllers MVC结构的Controller
    • middlewares 服务的中间件
      • auth.go
      • cors.go
      • errorHandle.go
    • modles 数据模型 MVC结构的模型层
    • pkg 业务之外的基础库,基础库不应该包含业务逻辑
      • logger
      • mongo
      • token
    • router 项目的服务路由
      • router.go
    • services 服务模块,通常是控制层调用此服务层,服务层调用模型层
      • devices.go
  • logs 日志输出文件
  • go.mod
  • Makefile
  • README.md

以上目录结构,主要参考的此作者的Githubsanjayheaven

2. 开发过程中的关键概念有哪些

参考Gin web Framework
罗列关键概念如下:

  1. 解析请求
    1. form表单数据
    2. body数据
    3. 路由参数的设置
  2. 输入参数校验与模型化
  3. 多个路由组
  4. 使用中间件
  5. 响应处理
  6. 重定向
  7. Cookie与Token处理
  8. 上传文件
3. 如何判定是否有必要创建模块
4. 如何设计模块
5. 如何使用swager模块
  1. go install github.com/swaggo/swag/cmd/swag@latest安装swag工具
  2. swag init -g cmd/server.go -o docs从主文件导入并初始化目录到docs目录下

如何进行描述呢

// @Tags 设备 // @Summary 某一个设备类型下的所有设备 // @Description 某一个设备类型下的所有设备 // @Param l query int false "记录条数" // @Param type query string false "设备类型" // @Param online query string false "在线与否(只支持all)" // @Param search_key query string false "搜索关键词(不支持)" // @Success 200 {object} nil // @Router /api/xxx/device [get] func (dc *DeviceController) DeviceTypeList(c *gin.Context){ return c.JSON(http.StatusOK, "hello world") }

针对输入参数,由querypath,formData

  1. router.go代码修改,导入docs模块(非常重要)

    swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" _ "project/docs" // 此行非常重要,"项目名/docs",否则会出现没有doc.json的情况 func Init(){ Router = gin.Default() Router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) }
Token 生成
  • Token 生成

持续更新中…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1125404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【异常】Unable to create ‘/.git/index.lock‘: File exists. Another git process seems to be running

一、报错内容 添加文件时发生以下问题: Unable to create E:/00 Inbox/Winston Obsidian Vault/szu_education/.git/index.lock: File exists. Another git process seems to be running in this repository, e.g. an editor opened by git commit. Please make sure all …

C语言全景解读:从诞生到现代应用,揭秘其核心优势、编程技巧与开发实践

一、C语言的历史背景C语言诞生于1972年,由Dennis Ritchie在贝尔实验室开发,最初是作为UNIX操作系统的编程语言而设计的。C语言的诞生有其深刻的历史背景和技术动因。1. 从B语言到C语言的进化在C语言之前,存在着一门名为B语言的编程语言&#…

docker启动redis

最简单的方法 如果只是希望启动redis,不想去繁琐的配置,建议使用以下run命令 docker run --name redis --restartalways -d -p 6379:6379 redis:7.2 --requirepass 12345600这个命令会启动最新版redis 常规方法 1. 下载redis镜像 先到dockerhub官网…

docker拉取mysql5.7镜像报错Error response from daemon Get “httpsregistry-1.docker.iov2“

解决方法: 进入/etc/docker/daemon.json [vagrantlocalhost ~]$ sudo vi /etc/docker/daemon.json 修改配置文件(删除源数据,直接复制粘贴,wq退出即可) {"registry-mirrors": ["https://2a6bf1988cb64…

智能体迈入 Agent RL 新架构时代,非常详细收藏这一篇就够了

0、序章:三大核心认知基石 在探索 Agent RL 技术浪潮之前,我们需先锚定三个根本性认知:人类的本质:生物界中,人类凭借高等智慧脱颖而出,而制造与使用工具的能力,正是人与动物的核心分野。 大模型…

多模态基础篇VLMo详解,非常详细收藏我这一篇就好了

该模型提出了一种统一的视觉-语言预训练模型 VLMO(Vision-Language Mixture-of-Experts),其核心创新在于引入了 Mixture-of-Modality-Experts(MOME)Transformer 架构,使得一个模型既能作为双编码器&#xf…

docker设置redis密码

docker设置redis密码 方法一:创建redis容器并设置密码 docker run -itd --name redis-6379 -p 6379:6379 redis --requirepass 123456说明: --name (启动容器的名称) -p 映射端口:redis启动端口 redis --requirepass 启动密码方法二:为现有的redis创建…

Go-Gin Web 框架完整教程

1. 环境准备 1.1 Go 环境安装 Go 语言(或称 Golang)是一个开源的编程语言,由 Google 开发。在开始使用 Gin 框架之前,我们需要先安装 Go 环境。 安装步骤: 访问 Go 官网下载页面:https://golang.org/dl/根据…

FlinkCDC实战:将 MySQL 数据同步至 ES

?? 当前需要处理的业务场景: 将订单表和相关联的表(比如: 商品表、子订单表、物流信息表)组织成宽表, 放入到 ES 中, 加速订单数据的查询. 同步数据到 es. 概述 1. 什么是 CDC 2. 什么是 Flink CDC 3. Flink CDC Connectors 和 Flink 的版本映射 实战 1. 宽表查询 1.1 …

从原理切入,看大模型的未来,非常详细收藏我这一篇就够了

相信大家都接触过大模型,比如 DeepSeek、豆包、ChatGPT 等生成式 AI 应用,当用户输入相关信息后,大模型就会快速输出相应的结果:文字、图片,甚至是视频。这是大家对大模型最常见的认识——效率工具。可当笔者看到25年底…

DBeaver连接本地MySQL、创建数据库表的基础操作

一、连接本地MySQL 1、新建连接 打开DBeaver,点击左上角的文件或者点击箭头所指的连接按钮。新建数据库连接-选择数据库(mysql),点击“下一步”输入服务器地址、端口、用户名、密码(数据库自己选填,不填则连接所有数据库&#xff…

docker网络模式及配置

一、Docker网络模式 docker run 创建docker容器时,可以用-net选项指定容器的网络模式,docker有以下4种网络模式: host 模式,使用-nethost指定。container模式,使用-netcontainer:NAME_or_ID指定。none模式&#xff0…

docker中配置redis

1、常规操作 docker pull redis(默认你的docker中没有redis) 2、查看redis是否拉取成功 docker images redis 3、创建目录,在你的宿主机,(我是在虚机中建的centos7)为了给redis配置文件使用 4、下载redis…

error @achrinzanode-ipc@9.2.5 The engine “node“ is incompatible with this module. 解决node.js版本不兼容问题

目录 很多人运行项目的时候会出现报错信息: 解决方案 然后再次运行就好了: 此时,我点击链接就可以看到了: 很多人运行项目的时候会出现报错信息: 这个错误是因为你的项目中使用了一个模块 achrinza/node-ipc&#…

ERROR 1524 (HY000) Plugin ‘mysql_native_password‘ is not loaded

你遇到的错误是由于 MySQL 版本不再默认支持 mysql_native_password 认证插件导致的。从 MySQL 8.0 开始,默认的认证插件是 caching_sha2_password,而不是 mysql_native_password。 解释: 错误 ERROR 1524 (HY000): Plugin mysql_native_pass…

docker下搭建redis集群

1. 环境准备 准备好Linux系统机器,并安装好docker,阅读这篇文章前请先了解清楚docker的基本知识并且会熟悉运用docker的常用命令。学习docker基础知识可以参考这篇博文 安装好并启动docker后就可以开始搭建redis了 2. docker容器下安装redis 本篇文章…

深度解析:为什么传统操作系统的最小权限原则在智能体世界失灵?

前言 如果我们把“AgentOS”理解为一种为智能体长期运行、持续决策、主动调用资源而设计的操作系统,那么它会暴露出一个根本性矛盾:我们正在用为“被动程序”设计的安全模型,去约束“主动行为体”。 传统操作系统的安全模型,无论是 Unix 时代的“用户-组-其他”,还是后来…

交通仿真软件:Aimsun_(1).Aimsun概述v1

Aimsun概述 1. Aimsun的基本功能 Aimsun是一款功能强大的交通仿真软件,广泛应用于交通规划、交通管理和交通研究等领域。它能够模拟从微观到宏观的交通流,提供详细的交通分析和优化建议。Aimsun的基本功能包括: 1.1 交通网络建模 Aimsun允许用…

ChatGLM2-6B模型推理流程和模型架构详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1 ChatGLM是什么?2 一代GLM 2.1 大模型架构2.2 GLM特点 2 二代GLM:ChatGLM2-6B为例拆解 2.1 ChatGLM2-6B模型推理架构和流程2.2 细节详…

go桌面框架Fyne最全api文档

Fyne 是一个 Go 语言的跨平台 GUI 库 相关命令 //全局安装fyne打包工具 go install fyne.io/fyne/v2/cmd/fynelatest// 引入fyne库 go get fyne.io/fyne/v2latest go mod tidy//以窗口形式启动 go run main.go //以手机模拟器形式启动 go run -tags mobile main.go//打包 //桌面…