golang 无缓冲区通道的 range 操作

摘要: 对一个无缓冲通道(chan)进行 range 操作意味着想要迭代并消费通道中的所有值。 但是,由于无缓冲通道的特性,这种操作具有特定的行为和潜在的副作用,主要体现在以下几点: 阻塞行为: 当你开始对无缓冲通道进行 range 操作时,每次循环迭代都会尝试从通道接收一个值。 如果通道中有值可用,ran 阅读全文
posted @ 2024-07-17 21:21 ercom 阅读(1) 评论(0) 推荐(0) 编辑

谈谈 CGO 的优点和缺点

摘要: cgo 是 Go 语言中的一个工具,用于在 Go 中调用 C 代码或让 C 代码调用 Go 代码。 它通过编译时的预处理器和运行时的动态链接器来实现这一功能。 下面列出了 cgo 的一些主要优点和缺点: 优点 1.兼容现有 C 库: cgo 允许 Go 程序直接调用 C 语言编写的库,这极大地扩展了 阅读全文
posted @ 2024-07-11 22:01 ercom 阅读(7) 评论(0) 推荐(0) 编辑

db B+Tree 特殊的二叉搜索树, 时间复杂度

摘要: B+树是一种自平衡的树数据结构,常用于数据库和文件系统的实现中。它具有以下特点: 多路平衡查找树:每个节点可以有多个子节点,且所有叶子节点都位于同一层,保证了树的高度相对较小,提高了查询效率。 键值对存储:每个节点存储一个或多个键值对,内部节点的键用于指导搜索,而所有的数据项都存储在叶子节点上。 高 阅读全文
posted @ 2024-07-09 19:33 ercom 阅读(4) 评论(0) 推荐(0) 编辑

ollama IsEmbedding() 方法含义与 BERT

摘要: func (m *Model) IsEmbedding() bool { return slices.Contains(m.Config.ModelFamilies, "bert") || slices.Contains(m.Config.ModelFamilies, "nomic-bert") } 阅读全文
posted @ 2024-07-08 20:26 ercom 阅读(4) 评论(0) 推荐(0) 编辑

ollama temperature 作用

摘要: 在机器学习,尤其是深度学习和自然语言处理领域中,temperature 参数通常指的是 softmax 函数或采样策略中的一个控制变量。它影响模型输出的概率分布,进而影响模型生成的输出的随机性和多样性。 在 ollama /api/generate 的 API 接口中,temperature 是一个 阅读全文
posted @ 2024-07-08 20:20 ercom 阅读(25) 评论(0) 推荐(0) 编辑

ollama api generate 和 api chat 的区别

摘要: /api/chat 和 /api/generate 这两个API端点的主要区别在于它们的设计目的和处理上下文的方式: /api/generate 用途: 这个端点主要用于生成单个文本片段。它接收输入并返回基于该输入的模型生成的文本,通常不考虑之前的消息历史或对话上下文。 功能: 它可以用于各种生成任 阅读全文
posted @ 2024-07-08 20:14 ercom 阅读(21) 评论(0) 推荐(0) 编辑

[FAQ] a 链接的 rel=noopener 含义

摘要: HTML中的 <a> 标签的 rel 属性用于定义与链接文档的关系。 当 rel="noopener" 被使用时,它表示链接的目标文档不应该拥有对原始文档的任何引用能力。 具体来说,这意呈现在以下几点: 1 . 安全增强: 当一个链接在一个新的浏览上下文中打开(例如一个新的标签页或窗口),rel=" 阅读全文
posted @ 2024-07-07 22:36 ercom 阅读(2) 评论(0) 推荐(0) 编辑

ollama show 命令执行的一般流程

摘要: // 命令行(cmd/cmd.go)以 showCmd 为例。 showCmd // 1.注册自己的 Handler showHandler { // 2.通过使用自己的 GO Client(api/client.go) req := api.ShowRequest{Name: args[0]} r 阅读全文
posted @ 2024-07-06 01:03 ercom 阅读(18) 评论(0) 推荐(0) 编辑

数据传输方式:电路交换、报文交换、分组交换

摘要: 电路交换、报文交换、分组交换是通信网络中三种基本的数据传输方式,它们各有特点,适用于不同的通信场景。下面分别对这三种交换方式进行简要说明: 1. 电路交换 (Circuit Switching) 原理:在数据传输前,首先在通信双方之间建立一条专用的物理连接(电路)。这条路径上的资源(如带宽)在连接期 阅读全文
posted @ 2024-07-04 23:05 ercom 阅读(35) 评论(0) 推荐(0) 编辑

哪些工具不会被LLM替代,及具身机器人技术相结合的情况

摘要: LLM(大型语言模型)虽然在处理自然语言理解和生成任务上表现出色,但仍然存在局限性,某些领域和工具因其专业性、实时性、或需要身体操作的特性,难以被 LLM 完全替代。 以下是一些例子: 1. 专业软件和工具:如CAD软件(计算机辅助设计)用于精密工程制图、3D建模;编程IDE(集成开发环境)如Vis 阅读全文
posted @ 2024-07-04 21:42 ercom 阅读(10) 评论(0) 推荐(0) 编辑

深度学习领域的名词解释:SOTA、端到端模型、泛化、RLHF、涌现 ..

摘要: SOTA (State-of-the-Art) 在深度学习领域,SOTA指的是“当前最高技术水平”或“最佳实践”。它用来形容在特定任务或领域中性能最优的模型或方法。随着研究进展,SOTA会不断被新的研究成果所超越。 非端到端模型 非端到端模型指的是模型架构中包含多个分离的组件或步骤,每个部分可能独立 阅读全文
posted @ 2024-07-03 19:06 ercom 阅读(19) 评论(0) 推荐(0) 编辑

git cherry-pick 用法

摘要: git cherry-pick 是一个 Git 命令,用于将一个或多个提交从一个分支复制并应用到当前分支。 这个操作允许你有选择性地将特定提交引入到不同的分支中,而不需要合并整个分支。 以下是关于 git cherry-pick 的一些关键点和使用方法: 1 基本用法 要使用 git cherry- 阅读全文
posted @ 2024-07-03 19:00 ercom 阅读(17) 评论(0) 推荐(0) 编辑

[FAQ] windows 设置一个程序的开机自启动

摘要: 查看自启动项目: win+R,输入 msconfig,点击“启动”这个Tab、打开任务管理器。 添加自己的程序作为开机启动: win+R,输入 shell:Common Startup,把启动程序的快捷方式复制到文件夹中。 SHA 散列加密 MD5 加密 Unix 时间戳转换 Base64 编码 U 阅读全文
posted @ 2024-07-02 22:17 ercom 阅读(34) 评论(0) 推荐(0) 编辑

golang 构建标签(go:build)条件编译

摘要: //go:build 是 Go 语言(golang)中的一种构建标签(build tag),用于控制源代码文件在特定条件下是否被编译。 这个注释标记允许你在同一个包内编写针对不同平台、操作系统或编译条件的代码。当 go build 或 go test 等命令执行时,它们会检查这些标签来决定哪些文件应 阅读全文
posted @ 2024-07-02 22:10 ercom 阅读(9) 评论(0) 推荐(0) 编辑

区分公有地址和私有地址, golang实现

摘要: 区分公有地址(Public IP Addresses)和私有地址(Private IP Addresses)主要依据它们的分配、使用范围以及是否能在全球互联网上直接路由。 以下是一些关键区别: 分配和管理: 公有地址:由互联网地址分配机构(Internet Assigned Numbers Auth 阅读全文
posted @ 2024-07-02 22:05 ercom 阅读(17) 评论(0) 推荐(0) 编辑

golang embed 含义及用法

摘要: golang embed 包的主要功能是在运行时提供对嵌入到 Go 程序中的文件的访问。 使用 embed 包,Go源文件可以通过使用 //go:embed 指令来将文件的内容初始化为字符串、字节切片或 FS 类型。 这样可以在运行时直接访问这些文件的内容。 以下是使用 embed 包的三个示例: 阅读全文
posted @ 2024-06-25 23:13 ercom 阅读(22) 评论(0) 推荐(0) 编辑

caddy 模块(module) caddyhttp Start启动逻辑分析

摘要: ./modules/caddyhttp/app.go func (app *App) Start() error { // xx } Start 方法属于一个自定义的 App 结构体,用于启动应用程序中的多个 HTTP 服务器实例。 下面是对该方法的主要逻辑和关键步骤的详细分析: 1. 日志设置: 阅读全文
posted @ 2024-06-22 13:50 ercom 阅读(7) 评论(0) 推荐(0) 编辑

golang runtime.Caller 获取调用堆栈信息, Caller(1) 和 Caller(2) 的区别

摘要: func whoCalledMe() { // 获取调用堆栈信息 _, fileName, lineNo, ok := runtime.Caller(2) if !ok { fmt.Println("Failed to get caller information") return } fmt.Pr 阅读全文
posted @ 2024-06-22 13:38 ercom 阅读(11) 评论(0) 推荐(0) 编辑

golang interface guard 技术(接口守护)

摘要: Go代码的接口守卫(interface guards)技术,通常用于库的开发,以确保类型符合预期的接口。 下面示例的 Interface guards 确保 App 类型实现了caddy.App、caddy.Provisioner 和 caddy.Validator 接口。 具体来说,它通过将 (* 阅读全文
posted @ 2024-06-20 23:08 ercom 阅读(3) 评论(0) 推荐(0) 编辑

dockerfile 指令 ADD 和 COPY 的区别

摘要: Dockerfile 中的 ADD 和 COPY 指令都用于将文件或目录从构建上下文复制到 Docker 镜像中,但它们之间存在一些关键差异: 基本复制功能: COPY: 纯粹地将从构建上下文(即执行 docker build 命令时指定的目录及其子目录)中的文件或目录复制到镜像中指定的路径。 AD 阅读全文
posted @ 2024-06-20 23:03 ercom 阅读(17) 评论(0) 推荐(0) 编辑

rust 和 golang 的特点及适用场景

摘要: Rust 特点及适用场景: 内存安全: Rust 通过所有权系统和生命周期管理在编译时保证内存安全,有效防止了空指针异常、数据竞争、悬挂指针等问题,非常适合开发高性能系统软件和底层库。 并发模型: Rust 提供了强大的并发工具,如 async/await 和通道 (channel),支持高效且安全 阅读全文
posted @ 2024-06-17 19:43 ercom 阅读(21) 评论(0) 推荐(0) 编辑

用人话解释 Transformer 的执行过程

摘要: 1. 向量化。 文本 → Tokenization(分词) → Embeddings(向量化) → 模型 2. 模型需要完整上下文 且 知道 token 的相对位置及关系。 3. 关注 token 的 score。 4. 用输入文本的向量,去查找,得到值向量。 5. 得到上下文感知的向量。 在线拾取 阅读全文
posted @ 2024-06-15 22:53 ercom 阅读(10) 评论(0) 推荐(0) 编辑

golang net 包的功能概述

摘要: Go语言中的 net 包提供了一个可移植的网络输入输出接口,涵盖了 TCP/IP、UDP、域名解析以及 Unix 域套接字等功能。 该包提供了访问底层网络原语的能力,但大多数客户端仅需使用基本接口,这包括 Dial、Listen 和 Accept 函数以及相关的 Conn 和 Listener 接口 阅读全文
posted @ 2024-06-15 22:52 ercom 阅读(11) 评论(0) 推荐(0) 编辑

golang 所有关键字的列表及释义归类

摘要: golang 所有关键字的列表及释义归类,截至1.18版本。 [控制结构] if : 条件语句,基于布尔表达式的值决定是否执行特定的代码块。 else、 else if : 用在 if 语句之后,当条件表达式为假时执行的代码块。 switch : 多路选择语句,根据不同的情况执行不同的代码块。 ca 阅读全文
posted @ 2024-06-15 22:50 ercom 阅读(11) 评论(0) 推荐(0) 编辑

caddy run 命令详解

摘要: caddy run 这个子命令启动 Caddy 进程,并可选地使用初始配置文件进行引导,并无限期地阻塞,直到服务器停止运行,即 run 是在"守护进程"模式(前台)中运行 Caddy。 使用参数: [--config <path> [--adapter <name>]] [--envfile <pa 阅读全文
posted @ 2024-06-14 23:25 ercom 阅读(12) 评论(0) 推荐(0) 编辑

caddy 服务器的 Docker 镜像构建流程

摘要: 构建一个包含 Caddy 服务器的 Docker 镜像,关键部分: https://github.com/caddyserver/caddy-docker/blob/master/Dockerfile.tmpl这个 Dockerfile 精心设计,用于自动化构建一个包含最新版 Caddy Web 服 阅读全文
posted @ 2024-06-14 23:22 ercom 阅读(68) 评论(0) 推荐(0) 编辑

golang select {} 和 for {} 的区别

摘要: select {} 与 for {} 在 Go 语言中都是循环结构,但它们的行为和用途有所不同: select {}: 是一个无限阻塞的 select 语句,没有指定任何 case。 主要用于等待通道操作或其他事件,在没有明确的通信或信号需求时保持运行状态。 当程序需要在没有明确结束条件的情况下保持 阅读全文
posted @ 2024-06-14 23:19 ercom 阅读(14) 评论(0) 推荐(0) 编辑

dockerfile CMD 和 ENTRYPOINT 分别什么时候用

摘要: 在 Docker中,CMD 和 ENTRYPOINT 指令都是用来定义容器启动时运行的默认命令,但它们的用途和行为有所不同,适用于不同的场景: CMD 用途:CMD指令用来指定容器启动后默认执行的命令及其参数。它更倾向于提供默认的或可被替代的执行行为。 可覆盖性:当使用docker run命令启动容 阅读全文
posted @ 2024-06-13 19:57 ercom 阅读(44) 评论(0) 推荐(0) 编辑

caddy 入口 rootCmd 概览

摘要: $ go run cmd/caddy/main.go cmd/caddy/main.go Caddy入口点,Caddy的功能主要通过模块提供,可以通过在导入语句中添加模块来插入。 该程序的目的是为了定制 Caddy 构建,而无需修改源代码。可以通过复制 main.go 文件到新文件夹,编辑导入语句以 阅读全文
posted @ 2024-06-13 19:52 ercom 阅读(3) 评论(0) 推荐(0) 编辑

golang reflect 反射机制的使用场景

摘要: Go语言中的 reflect 包提供了运行时反射机制,允许程序在运行时检查和操作任意对象的数据类型和值。 以下是 reflect 包的一些典型使用场景: 1. 动态类型判断与转换:当需要处理多种类型的变量且具体类型直到运行时才能确定时,可以使用反射来检查变量的实际类型,并在可能的情况下进行类型转换。 阅读全文
posted @ 2024-06-13 19:45 ercom 阅读(15) 评论(0) 推荐(0) 编辑

golang 字节级操作和字符串的区别与转换 []byte(message)

摘要: []byte(message) 将字符串 message 转换为一个字节切片( []byte )。 在Go语言中,字符串是不可变的,而字节切片可以被修改。 这种转换常用于处理字符串的字节级操作,如编码、解码或写入IO流。 字节级操作 和 字符串操作 在编程中有本质的不同,主要体现在以下几个方面: 1 阅读全文
posted @ 2024-06-12 21:10 ercom 阅读(12) 评论(0) 推荐(0) 编辑

golang sync.Map 与使用普通的 map 的区别

摘要: 使用sync.Map与普通的Go map主要有以下几点区别: 1. 并发安全性 普通map: 在没有外部同步的情况下,不是并发安全的。在多goroutine访问时,如果没有适当的锁或其他同步机制保护,可能会导致数据竞争和未定义行为。 sync.Map: 是并发安全的。它内部实现了必要的同步机制,允许 阅读全文
posted @ 2024-06-12 21:06 ercom 阅读(17) 评论(0) 推荐(0) 编辑

[FAQ] vscode 装了 vim 之后,ctrl+p 不起作用?

摘要: # 进入设置(左下角setting) --> vim.handleKeys --> 在 settings.json中编辑, 把需要禁用Vim的热键以json格式写入vim.handleKeys中即可,如: "vim.handleKeys": { "<C-a>": false, "<C-c>": fa 阅读全文
posted @ 2024-06-11 22:14 ercom 阅读(5) 评论(0) 推荐(0) 编辑

golang oncefunc.go 的 OnceFunc 和 once.go Do 的区别

摘要: sync.Once 的 Do 方法和 OnceFunc/OnceValue/OnceValues 函数的主要区别在于使用场景和灵活性: 1、直接使用Once.Do(f): 更基础、低级的 API。你需要显式声明一个 sync.Once 变量,然后在其上调用 Do(f)方法来执行函数f。 仅保证函数f 阅读全文
posted @ 2024-06-11 22:00 ercom 阅读(6) 评论(0) 推荐(0) 编辑

golang 特别“别扭”的地方,或者说是特色

摘要: 尽管 Go 语言在很多方面设计得相当精巧,但仍有一些特性或限制可能让部分开发者觉得 “别扭” 或需要时间适应。 下面是一些常见的讨论点: 1. 错误处理: Go 语言没有异常机制,而是通过返回错误值的方式来处理错误。 这意味着在很多函数调用后都需要检查错误,可能会导致代码中出现大量的错误检查逻辑,有 阅读全文
posted @ 2024-06-11 21:57 ercom 阅读(10) 评论(0) 推荐(0) 编辑

golang 泛型的格式写法

摘要: Go语言中的泛型(Generics)是在 Go 1.18 版本中引入的一个重要特性,它允许你编写可重用的代码,而不需要为每种数据类型重复编写相同的逻辑。 泛型通过参数化类型(type parameters)来实现,使得函数、方法、接口和结构体可以与多种类型一起工作。 下面详细介绍Go语言中泛型的基本 阅读全文
posted @ 2024-06-11 21:56 ercom 阅读(37) 评论(0) 推荐(0) 编辑

golang sync.Once 保证某个动作仅执行一次的机制

摘要: type Once struct { done atomic.Uint32 m Mutex } sync.Once 是 Go 语言标准库 sync 包中的一个类型,用于确保某个操作(函数)只被执行一次。 这对于初始化操作非常有用,比如数据库连接的建立、日志文件的打开等,这些操作通常只需要在程序启动时 阅读全文
posted @ 2024-06-10 20:09 ercom 阅读(10) 评论(0) 推荐(0) 编辑

golang select 的 case 执行顺序

摘要: 问题: golang select 结构,假如底下有三个case,分别从 chan1, chan2, chan3 读取内容,chan1, chan2, chan3都是非阻塞的,那么是会先进入第一个 case,其它case还会再进入吗 ? 在 Go 语言中,select 语句用于监控多个通道的操作,并 阅读全文
posted @ 2024-06-06 22:06 ercom 阅读(19) 评论(0) 推荐(0) 编辑

golang interface 和 struct 添加方法的区别

摘要: 在 Go 语言中,struct 和 interface 都可以关联方法,但它们的方式不同: 1. struct 添加方法: 结构体(struct)本身不直接包含方法,但可以通过定义一个指向该结构体类型的指针作为接收者的函数来为结构体“添加”方法。 type MyStruct struct { // 阅读全文
posted @ 2024-06-06 21:57 ercom 阅读(20) 评论(0) 推荐(0) 编辑

golang 可变参数用法, handlers ...HandlerFunc

摘要: handlers ...HandlerFunc 这是什么写法,与 group.handle() 第三个参数是 []handlerFunc 是什么关系呢? 下面是 gin 中的用法: routergroup.go // GET is a shortcut for router.Handle("GET" 阅读全文
posted @ 2024-06-05 21:00 ercom 阅读(11) 评论(0) 推荐(0) 编辑