Golang Alfred工作流开发教程

最近在学习用Golang开发Alfred工作流,但遇到几个问题想请教:

  1. 如何用Go调用Alfred的API实现工作流的基本功能?
  2. 在Go中处理JSON输入输出有什么需要注意的地方?
  3. 有没有推荐的Go库可以简化Alfred工作流开发?
  4. 能分享一个完整的Go实现的Alfred工作流示例吗?
  5. 调试Go写的Alfred工作流有什么技巧或工具推荐?
2 回复

以下是一个简单的Golang Alfred工作流开发教程:

  1. 安装依赖

    • 安装Alfred Powerpack
    • 安装Go语言环境
  2. 创建工作流

    • 打开Alfred偏好设置 → Workflows → 点击"+"创建空白工作流
    • 设置工作流名称和图标
  3. 编写Go脚本

    package main
    import (
        "encoding/json"
        "fmt"
        "os"
    )
    
    type AlfredItem struct {
        Title string `json:"title"`
        Arg   string `json:"arg"`
    }
    
    func main() {
        query := os.Args[1]
        items := []AlfredItem{
            {Title: "结果: " + query, Arg: query},
        }
        output, _ := json.Marshal(map[string][]AlfredItem{"items": items})
        fmt.Print(string(output))
    }
    
  4. 配置工作流

    • 添加Script Filter输入组件
    • 语言选择:/bin/bash
    • 脚本内容:go run main.go "{query}"
    • 设置关键词触发
  5. 编译部署

    • 编译Go程序:go build -o workflow main.go
    • 在工作流中直接调用可执行文件
  6. 调试技巧

    • 使用Alfred的Debug面板查看输出
    • 在终端测试脚本输出格式

提示:确保JSON输出符合Alfred要求格式,包含items数组和必要字段。可以添加更多功能如子标题、图标等增强体验。

更多关于Golang Alfred工作流开发教程的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang Alfred工作流开发指南

Alfred工作流是macOS上强大的自动化工具,结合Golang可以创建高性能的自定义工作流。

基本概念

Alfred工作流通常包含:

  • 触发器(热键、关键词等)
  • 脚本处理(使用Golang)
  • 输出结果到Alfred

开发步骤

1. 创建Golang脚本

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

type AlfredItem struct {
    Title    string `json:"title"`
    Subtitle string `json:"subtitle"`
    Arg      string `json:"arg"`
}

type AlfredOutput struct {
    Items []AlfredItem `json:"items"`
}

func main() {
    // 获取Alfred传入的参数
    query := ""
    if len(os.Args) > 1 {
        query = os.Args[1]
    }
    
    // 处理逻辑
    items := processQuery(query)
    
    // 输出Alfred格式的JSON
    output := AlfredOutput{Items: items}
    jsonData, _ := json.Marshal(output)
    fmt.Print(string(jsonData))
}

func processQuery(query string) []AlfredItem {
    var items []AlfredItem
    
    // 示例:简单的搜索功能
    items = append(items, AlfredItem{
        Title:    "搜索结果: " + query,
        Subtitle: "按回车执行操作",
        Arg:      query,
    })
    
    return items
}

2. 编译Golang程序

go build -o my-workflow main.go

3. 在Alfred中配置工作流

  1. 打开Alfred Preferences → Workflows
  2. 点击"+"创建空白工作流
  3. 添加Script Filter输入源
  4. 配置:
    • Keyword:触发关键词
    • Language:/bin/bash
    • Script:./my-workflow "{query}"

4. 添加后续动作

在Script Filter后可以连接:

  • Open URL
  • Run Script
  • Copy to Clipboard等

实用技巧

环境变量传递

// 读取Alfred环境变量
workflowCache := os.Getenv("alfred_workflow_cache")
workflowData := os.Getenv("alfred_workflow_data")

错误处理

func checkErr(err error) {
    if err != nil {
        items := []AlfredItem{
            {
                Title:    "错误",
                Subtitle: err.Error(),
                Arg:      "",
            },
        }
        output, _ := json.Marshal(AlfredOutput{Items: items})
        fmt.Print(string(output))
        os.Exit(1)
    }
}

发布工作流

将编译好的二进制文件和图标等资源打包成.alfredworkflow文件即可分享。

这样你就可以用Golang创建高性能的Alfred工作流了!

回到顶部