go-函数详解
函数是一个可以重复功能单元, 简单来说就是一个执行特定任务的代码块, 是 GO 中的一等公民, 你可以把它当做参数,也可以当做返回值;
go 函数的一些特点我们先来简单看一下 go 中函数的特点
多返回值123func swap(a, b int) (int, int) { return b, a}
命名返回值12345func rectProps(length, width float64) (area, perimeter float64) { area = length * width perimeter = (length + width) * 2 return // 不需要明确指定返回值}
可变参数1234567func sum(nums ...int) int { total := 0 for _, num := range nums { total += num } return total}
高阶函数1234567func ap ...
go实现剪切板图片上传
在日常开发中,我们经常需要处理图像和GIF,并将它们上传到云存储。在这篇文章中,我将向您展示如何使用Golang以及一些有用的库来实现这个功能,从剪贴板读取图像或GIF并上传到七牛云存储。
本来想用 python 实现, 结果写完发现, 打包后有点大, 就放弃了.正好在看 golang 相关的知识,就用 golang 试了一下, 结果发现代码量并不差很多,但是打包下来后体积小了很多.golang 牛皮
核心功能 robotgoRobotgo是一个用Go编写的跨平台库,用于自动化GUI和控制键盘、鼠标、剪贴板和屏幕像素。它集成了许多强大的功能,为开发者提供了在Go语言中实现桌面自动化的能力。以下是Robotgo的一些核心特点和功能:
跨平台:Robotgo支持Windows、Mac和Linux,这意味着你可以在多种操作系统上使用相同的代码进行GUI自动化。
键盘与鼠标控制:
模拟鼠标移动、点击和滚动.
模拟键盘输入,支持按键组合。
屏幕操作:
获取屏幕尺寸。
捕获屏幕上的像素颜色。
捕获屏幕截图。
剪贴板操作:能够读取和设置剪贴板内容,支持文本、图像等。
全局事件监听:R ...
gin-模板渲染
今天有个人问我有没有用 gin 写过前端页面, 问的我一脸懵逼. 我寻思不都前后端分离了, 还渲染什么.我翻了翻文档, 才发现原来 gin 还有模板渲染的功能…. 我震惊于自己从没有留意过这个功能;今天就花点时间看一下 gin 模板渲染相关的知识, 算是给自己做一个补充.
基础渲染
创建一个新的目录 views,然后在其中创建一个新文件 index.html,内容如下:123456789<!DOCTYPE html><html><head> <title>Gin Template Rendering</title></head><body> <h1>Hello, {{ .Name }}!</h1></body></html>
然后再 go 中:
12345678910111213141516171819package mainimport ( "github.com/gin-gonic/gin ...
Flutter-两个简单的小动画
在移动应用中,用户互动性是一个关键的体验要素。Flutter,作为一个强大且灵活的 UI 工具箱,提供了一系列的工具来增强这种互动体验。
我在做 app 的时候, 想给一个卡片设置一个拖动效果, 这样用户就可以把自己的页面中的便笺随意拖动到自己喜欢的位置. 浏览文档发现Flutter 提供了一个 Draggable的组件. 下面就让我们一起先看一下这个组件吧
Draggable基础:什么是Draggable?Draggable是Flutter中一个内置的widget,它可以让任何子组件变得可拖拽。这为构建如列表排序、拖放交互等复杂功能提供了基础。
基础用法非常简单:
123456Draggable( child: Icon(Icons.star), // 正常显示的widget feedback: Icon(Icons.star, color: Colors.grey), // 拖动时的widget data: "Star Data", // 被拖拽的数据)
Draggable的核心属性child: 这是用户看到的widget,当它未被拖动时。
fe ...
Flutter-自定义插件
Flutter 提供了一个强大而灵活的框架,允许开发者编写高效且美观的应用。但是,有时候我们需要访问一些 Flutter 核心库之外的平台特性或第三方库,此时就需要使用或创建自定义插件。本文主要介绍如何在 Flutter 中创建自定义插件,以及如何实现 Flutter 插件与 Android 和 iOS 平台的交互。
下面让我们一起来看看吧:
flutter中的 插件主要分为两种, 一种是自定义 package 模式;一种是 plugins 模式;
Package 模式package 模式可以创建易于共享的模块化代码.使用纯 dart 编写. 不涉及调用原生平台的代码;我们可以使用 flutter 的指令 flutter create --template=package --org com.qiankun test_package 来创建一个package 包
一个基本的 package 包含以下内容:
pubspec.yaml
package 的定义信息, package name, author, version 等等.更详细的配置你可以在官方文档中查看
lib 目录 ...
使用 Github Action实现 flutter 项目的 CI/CD
CI/CD,即持续集成(Continuous Integration)和持续交付/部署(Continuous Delivery/Deployment),是一种软件开发实践,通过引入自动化的构建、测试和部署过程,来提升软件质量并加速交付周期;
使用 CI/CD 可以协助开发和运维人员保障我们软件工程质量
频繁的集成
在CI/CD流程中,开发人员会频繁地将代码合并到主分支,这可以避免长时间的分支开发导致的集成问题。
自动化构建和测试
每次代码变动都会触发自动化的构建和测试过程,这样可以及时发现并解决问题,而不是在软件开发周期的后期进行手动测试。自动化测试覆盖了单元测试、集成测试、功能测试、性能测试等,保证了代码的健壮性和可靠性。
快速反馈
如果在构建或测试阶段发现任何问题,开发人员会立即收到通知。这样,问题可以在早期阶段解决,修复的成本和影响将降到最低。
一致性的构建和部署环境
CI/CD可以确保在同一环境中构建和部署软件,从而避免了“在我机器上运行得好好的”问题。通过容器化技术,可以确保开发、测试和生产环境的一致 ...
leetcode-day1-最长子串
最长子串是什么题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
12345eg: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
最长子串能解决什么问题?最长子串这种问题在计算机科学和编程中有很多引用场景. 找到一个 字符串 中的最长无重复子串可以有以下应用场景:
* 文本分析以及搜索功能 在搜索引擎和数据库搜索中, 最长子串可以用来帮助我们找到最长的匹配字符串, 从而提高搜索效率和搜索精度
* 密码验证 可以用最长子串的概念来要求用户创建的密码必须包含一定长度的无重复字符串序列, 用来保证密码的复杂性和安全性
* 软件开发 在开发编程语言和工具时,最长子串问题可以用于语法高亮显示、自动补全、错误检测等功能。例如,语法高亮显示可能需要找到最长的匹配关键字,自动补全可能需要找到最长的匹配字符串,错误检测可能需要找到最长的不符合语法规则的字符串。
* 数据压缩 数据压缩中,最长子串问题可以用于查找重复的数据段,以 ...
leetcode-day0-两数之和
在算法领域,有一个经典问题,被称为“两数之和”。给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。这个问题可以用不同的方法解决,但是其中最常用的方法是使用哈希表。
两数之和哈希表算法的思想是,通过将数组中的每个元素存储在哈希表中,可以在O(1)时间内查找到特定的元素。因此,我们可以遍历整个数组,对于每个元素,在哈希表中查找是否存在与目标值的差值相等的元素。
给出代码如下:
123456789def two_sum(nums, target): num_map = {} # 创建一个空字典来保存数字和其对应的索引 for i, num in enumerate(nums): # 遍历输入列表 complement = target - num # 计算目标值与当前数字的差值 if complement in num_map: # 如果这个差值已经在字典中(也就是说,这个差值是之前遍历过的数字) return [num_map[complement], i] # 返回这个数字的索引和 ...
算法 排序
常用排序算法在软件工程中的应用本文将介绍软件工程中常用的排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,以及它们的基本思想和实现方法。了解这些排序算法将有助于我们在软件开发过程中根据实际需求选择合适的排序方法。
1 引言排序算法在软件工程中的应用非常广泛,它们用于对数据进行排序,以便进行进一步的处理和分析。本文将探讨六种常见的排序算法,分别是冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序。了解这些排序算法有助于我们在软件开发过程中根据实际需求选择合适的排序方法。
1.1. 冒泡排序冒泡排序是一种简单的排序算法,通过重复地遍历要排序的序列,比较相邻元素并交换它们的顺序(如果顺序错误),直到没有元素需要交换为止。冒泡排序的时间复杂度为 O(n^2),在处理大规模数据时效率较低。
1.2. 选择排序选择排序的基本思想是在每次遍历过程中找到序列中的最小(或最大)值,并将其与序列的首(或尾)元素交换。然后在剩余序列中继续执行相同的操作,直到整个序列有序。选择排序的时间复杂度同样为 O(n^2)。
1.3 插入排序插入排序的工作原理类似于我们手动对扑克牌进行排序。 ...
使用Flutter创建樱花落下动画
在本篇博客中,我们将学习如何使用 Flutter 制作一个樱花落下的动画效果。我们将实现一个简单的樱花落下动画,并加入微风效果以及淡入淡出效果。我们的最终目标是让樱花以不同的速度和初始位置落下,并在屏幕上按照一定的轨迹随微风飘动。
开始之前确保你已经安装了 Flutter 开发环境。本教程适用于具有一定 Flutter 基础知识的开发者。
创建动画首先,我们需要创建一个 StatefulWidget,因为我们需要使用动画控制器。接下来,我们在 State 类中使用 SingleTickerProviderStateMixin 来创建 AnimationController。
12345678910111213141516171819202122232425class FallingLeavesAnimation extends StatefulWidget { @override _FallingLeavesAnimationState createState() => _FallingLeavesAnimationState();}class _Fall ...