依赖注入
依赖注入使用接口来实现依赖注入,降低模块间的耦合。概念: 依赖注入是一种设计模式,它允许你将组件的依赖关系(即其他组件或服务)从组件本身中分离出来,并在组件外部进行配置。这样做可以减少组件之间的耦合,使得代码更加模块化,易于测试和维护。 Go 语言实现: 在 Go 语言中,可以通过接口来实现依赖注入。接口定义了组件所需的行为,然后你可以在运行时注入任何实现了这些行为的具体类型。 优点: 降低耦合:组件不直接依赖于具体的实现类,而是依赖于接口,这降低了组件之间的耦合度。 提高灵活性:可以轻易地替换依赖的具体实现,而不需要修改组件的代码。 易于测试:可以为测试注入模拟对象(mocks),从而可以隔离测试组件,不依赖于外部服务或组件。 1234567891011121314151617181920212223242526272829303132333435package maintype Logger interface { Log(message string)}type ConsoleLogger struct{}func (l...
回调函数和直接调用的区别
...
vue3快速实践
教程 | Vue.js (vuejs.org) 声明式渲染你在编辑器中看到的是一个 Vue 单文件组件 (Single-File Component,缩写为 SFC)。SFC 是一种可复用的代码组织形式,它将从属于同一个组件的 HTML、CSS 和 JavaScript 封装在使用 .vue 后缀的文件中。 Vue 的核心功能是声明式渲染:通过扩展于标准 HTML 的模板语法,我们可以根据 JavaScript 的状态来描述 HTML 应该是什么样子的。当状态改变时,HTML 会自动更新。能在改变时触发更新的状态被称作是响应式的。我们可以使用 Vue 的 reactive() API 来声明响应式状态。由 reactive() 创建的对象都是 JavaScript Proxy 123456789import { reactive } from 'vue'const counter = reactive({ count: 0})console.log(counter.count) //...
jupyter
安装pip install notebook 用于启动 Jupyter Notebook 服务的一系列命令 12345jupyter-notebook stop 8888JUPYTER_TOKEN=$(< /dev/urandom tr -dc A-Za-z0-9 | head -c16; echo)echo $JUPYTER_TOKENnohup jupyter-notebook --ip 0.0.0.0 --port 8888 --no-browser --allow-root --NotebookApp.token=$JUPYTER_TOKEN &jupyter-notebook list 这里是每条命令的简要说明: 12345jupyter-notebook stop 8888:停止端口为 8888 的 Jupyter Notebook 服务。JUPYTER_TOKEN=$(< /dev/urandom tr -dc A-Za-z0-9 | head -c16; echo):生成一个随机的 16 位的 token,用于 Jupyter...
leetcode 每日温度 单调栈
739. 每日温度 - 力扣(LeetCode) 栈里边存放的是还没有找到后边更大值的元素 1234567891011121314151617181920212223242526272829303132333435363738394041424344// 从左向右,func dailyTemperatures(temperatures []int) []int { length := len(temperatures) // 长度 ans := make([]int, length) // 返回的数组 stack := []int{} // 单调栈 for i := 0; i < length; i ++ { temperature := temperatures[i] fmt.Println("temperature:", temperature) fmt.Println("stack:",...
go语言实现优先队列
Go 语言中实现优先队列,最大堆和最小堆通常可以通过使用容器/heap包来完成。Go 语言的heap包提供了一个堆操作的接口,它允许用户实现任意类型的堆,包括最大堆和最小堆。 1. 优先队列优先队列是一种特殊的队列,元素出队顺序是根据优先级来决定的,而不是按照元素入队顺序。在Go语言中,优先队列可以通过heap包来实现。 2. 最大堆最大堆是一种特殊的完全二叉树,其中每个父节点的值都大于或等于其子节点的值。在Go语言中,可以通过实现heap.Interface接口来创建最大堆。 3. 最小堆最小堆与最大堆相反,其中每个父节点的值都小于或等于其子节点的值。最小堆也可以通过实现heap.Interface接口来创建。 实现步骤定义堆的元素类型首先,你需要定义一个元素类型,这个类型将用于存储在堆中的元素。 1type IntHeap []int 实现heap.Interface接口要使用heap包的功能,你需要实现heap.Interface接口。这个接口包括三个方法:Push, Pop, 和 Less。 1234567891011121314151617type...
leetcode 355设计推特
Problem: 355. 设计推特 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798type Twitter struct { userMap map[int]*User}type User struct { userId int followees map[int]bool tweets []*Tweet}type Tweet struct { tweetId int time int userId int}// 推特时间排序var tweetCount intfunc Constructor() Twitter { return...
如何使用递归
123456789101112131415func sortedArrayToBST(nums []int) *TreeNode { return traversal(nums,0,len(nums)-1)}// 定义:返回nums root 节点func traversal(nums []int,left int , right int) *TreeNode{ if left > right { return nil } mid := (left + right)/2 root := &TreeNode{nums[mid],nil,nil} root.Left = traversal(nums,left,mid-1) // 把后边 root 节点添加到当前root left 左节点上 root.Right = traversal(nums,mid+1,right) // 把后边 root 节点添加到当前root right 左节点上 ...
goland中debug 无法显示全局变量解决
实际只会有局部变量,没有全局变量test 解决方法: 右键 选择+ New Watch ; 或者 按按键 Insert 添加变量 test 即可 添加成功之后每次单步执行都会显示变量结果:
