当前位置: 首页 > news >正文

Golang 构建学习

Golang 构建学习

如何搭建Golang开发环境

1. 下载GOlang包

  1. https://golang.google.cn/dl/ 在地址上下载Golang

2. 配置包环境

  1. 修改全局环境变量,GOPROXY,GOPATH,GOROOT
GOPROXY=https://goproxy.cn,direct
GOROOT="" // go二进制文件的路径
  1. mkdir project 创建项目文件
  2. go mod init project 创建包模块
  3. go get xxxxx 获取第三方包

如何让程序运行起来

// main.go
package mainimport "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.gobuild:        env GO111MODULE=on GOPROXY=https://proxy.golang.com.cn,direct go mod tidyenv GO111MODULE=on GOPROXY=https://proxy.golang.com.cn,direct go mod vendorenv GO111MODULE=on GOPROXY=https://goproxy.io,direct CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags $(LDFLAGS) -o bin/$(BINARY_NAME) cmd/server.goenv 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.goenv 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.goupx -9 bin/yxapi
clean:rm bin/$(BINARY_NAME)rm bin/$(BINARY_NAME).macrm 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

Token 生成

  • Token 生成

持续更新中…

相关文章:

Golang 构建学习

Golang 构建学习 如何搭建Golang开发环境 1. 下载GOlang包 https://golang.google.cn/dl/ 在地址上下载Golang 2. 配置包环境 修改全局环境变量,GOPROXY,GOPATH,GOROOT GOPROXYhttps://goproxy.cn,direct GOROOT"" // go二进…...

VM Virutal Box的Ubuntu虚拟机与windows宿主机之间设置共享文件夹(自动挂载,永久有效)

本文参考如下链接 How to access a shared folder in VirtualBox? - Ask Ubuntu (1)安装增强功能(Guest Additions) 首先,在网上下载VBoxGuestAdditions光盘映像文件 下载地址:Index of http://…...

分析 系统滴答时钟(tickClock),设置72MHz系统周期,如何实现1毫秒的系统时间?

一、CubeMX相关配置 1.1 相关引脚配置 1.2 相关时钟数配置 1.3 打开程序源码 二、相关函数分析...

C++优选算法十七 多源BFS

1.单源最短路问题 一个起点一个终点。 定义:在给定加权图中,选择一个顶点作为源点,计算该源点到图中所有其他顶点的最短路径长度。 2.多源最短路问题 定义:多源最短路问题指的是在图中存在多个起点,需要求出从这些…...

Mongodb入门到放弃

Mongodb分片概括 分片在多台服务器上分布数据的方法, Mongodb使用分片来支持具有非常大的数据集和高吞吐量的操作的部署 具有大数据集和高吞吐量应用程序的数据库系统,可以挑战单台服务器的容量。 例如,高查询率可以耗尽服务器的cpu容量&…...

青藤云安全携手财信证券,入选金融科技创新应用优秀案例

11月29日,由中国信息通信研究院主办的第四届“金信通”金融科技创新应用案例评选结果正式发布。财信证券与青藤云安全联合提交的“基于RASP技术的API及数据链路安全治理项目”以其卓越的创新性和先进性,成功入选金融科技创新应用优秀案例。 据悉&#x…...

在CentOS系统中安装工具包的时候报错的解决方法

我刚装了一个新的虚拟机,打算安装一些工具出现了错误信息 执行的命令如下: yum install -y yum-utils device-mapper-persistent-data lvm2错误信息如下 Cannot find a valid baseurl for repo: base/7/x86_64搜索了一下原因有好几种。 一是网络不通…...

cad软件打不开报错cad acbrandres dll加载失败

一切本来很顺利哒 但是,当我用快捷方式打开时,就出现了这个错误。进入文件路径,是有这个的; 在文件路径直接打开,也会提示错误 原因竟然是我改了个名字: 随便选的文件路径,空的,文件名为Acr…...

14、保存与加载PyTorch训练的模型和超参数

文章目录 1. state_dict2. 模型保存3. check_point4. 详细保存5. Docker6. 机器学习常用库 1. state_dict nn.Module 类是所有神经网络构建的基类,即自己构建一个深度神经网络也是需要继承自nn.Module类才行,并且nn.Module中的state_dict包含神经网络中…...

【前端开发】JS+Vuew3请求列表数据并分页

应用技术:原生JavaScript Vue3 $(function () {ini(); });function ini() {const { createApp, ref, onMounted } Vue;createApp({setup() {const data ref({studentList: [],page: 1,pageSize: 10,});const getStudentList async (page, key) > {window.ons…...

Trimble X12助力电力管廊数据采集,为机器人巡视系统提供精准导航支持

地下电缆是一个城市重要的基础设施,它不仅具有规模大、范围广、空间分布复杂等特点,更重要的是它还承担着信息传输、能源输送等与人们生活息息相关的重要功能,也是一个城市赖以生存和发展的物质基础。 01、项目概述 本次项目是对某区域2公里左…...

Docker 清理镜像策略详解

文章目录 前言一、删除 Docker 镜像1. 查看当前镜像2. 删除单个镜像3. 删除多个镜像4. 删除所有未使用的镜像5. 删除悬空的 Docker 镜像6. 根据模式删除镜像7. 删除所有镜像 二、删除 Docker 容器1. 查找容器2. 删除一个或多个特定容器3. 退出时删除容器4. 删除所有已退出的容器…...

【Linux】TCP网络编程

目录 V1_Echo_Server V2_Echo_Server多进程版本 V3_Echo_Server多线程版本 V3-1_多线程远程命令执行 V4_Echo_Server线程池版本 V1_Echo_Server TcpServer的上层调用如下,和UdpServer几乎一样: 而在InitServer中,大部分也和UDP那里一样&…...

排序学习整理(2)

上集回顾 排序学习整理(1)-CSDN博客 2.3 交换排序 交换排序的基本思想是:根据序列中两个记录键值的比较结果,交换这两个记录在序列中的位置。 特点: 通过比较和交换操作,将键值较大的记录逐步移动到序列…...

AI蛋白质设计与人工智能药物设计

AI蛋白质设计与人工智能药物设计 AI蛋白质设计 一、蛋白质相关的深度学习简介 1.基础概念 1.1.机器学习简介:从手写数字识别到大语言模型 1.2.蛋白质结构预测与设计回顾 1.3.Linux简介 1.4.代码环境:VS code和Jupyter notebook* 1.5.Python关键概…...

IOS ARKit进行图像识别

先讲一下基础控涧,资源的话可以留言,抽空我把它传到GitHub上,这里没写收积分,竟然充值才能下载,我下载也要充值,牛! ARSCNView 可以理解画布或者场景 1 配置 ARWorldTrackingConfiguration AR追…...

初级数据结构——二叉搜索树

目录 前言一、定义二、基本操作三、时间复杂度分析四、变体五、动态图解六、代码模版七、经典例题[1.——700. 二叉搜索树中的搜索](https://leetcode.cn/problems/search-in-a-binary-search-tree/)代码题解 [2.——938. 二叉搜索树的范围和](https://leetcode.cn/problems/ra…...

C++设计模式之组合模式中如何实现同一层部件的有序性

在组合模式中,为了实现同一层上部件的有序性,可以采取以下几种设计方法: 1. 使用有序集合 使用有序集合(如 std::list、std::vector 或其他有序容器)来存储和管理子部件。这种方法可以确保子部件按照特定顺序排列&am…...

duxapp RN 端使用AppUpgrade 进行版本更新

版本更新包含了组件和工具的组合 注册 下面这是 duxcms 入口文件检查更新的注册方法,注册的同时会检查更新 import {request,updateApp,userConfig } from ./utils// 检查app更新 setTimeout(async () > {if (process.env.TARO_ENV rn) {// eslint-disable-n…...

【计网】自定义序列化反序列化(三) —— 实现网络版计算器【下】

🌎实现网络版计算器【下】 本次序列化与反序列化所用到的代码,Tcp服务自定义序列化反序列化实现网络版计算器。 文章目录: 实实现网络版计算器【下】 客户端实现     基于守护进程的改写 🚀客户端实现 在这之前&#xff0c…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

反射获取方法和属性

Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...