Use Golang para escrever uma pequena ferramenta que exibe o preço de ETH na barra de notificação do Mac

I. Introdução

Como um iniciante que é novo na linguagem Go, tenho que escrever alguns códigos para praticar. Considerando minhas próprias necessidades, escrevi uma ferramenta tão pequena. Os registros estão aqui para serem compartilhados com todos e fornecem uma pequena referência para camaradas necessitados.

Esta ferramenta é muito simples, basta usar as bibliotecas existentes na Internet e modificar ligeiramente os exemplos em anexo.

2. Preparação

  1. Abra https://github.com/getlantern/systray e git clone, nosso trabalho é modificar no exemplo que ele dá.
  2. Baixe um logotipo da Ethereum (em formato PNG) da Internet
  3. Instale a última versão do go (acima de 1.13) e configure o GOPATH, você pode ir para o site oficial para ver o tutorial
  4. Configure GOPROXY="https://goproxy.io". Recomenda- .bash_profilese configurá- lo aqui.

Três, crie um projeto

Abra o terminal, crie um diretório de projeto e use-o go module. O seguinte exemplo:

➜  ~ cd work/
➜  work mkdir ethprice
➜  work cd ethprice/
➜  ethprice go mod init ethprice
go: creating new go.mod: module ethprice
➜  ethprice 

Observe que o conteúdo aqui worknão está no GOPATHdiretório. Use vscode para abrir a ethpricepasta agora , crie main.goarquivos e pastas no diretório raiz icone renomeie o logotipo Ethereum logo.pngpara a iconpasta. Será o seguinte:
Insira a descrição da imagem aqui

Quarto, lidar com o logotipo

Copie a bandeja example\icon\make_icon.shdo sistema baixada anteriormente para o diretório do ícone. Abra o terminal no vscode, mude para o diretório e execute sh ./make_icon.sh logo.png, ele irá gerar um iconunix.goarquivo no diretório atual , este é o logotipo que nosso gadget precisa. Aqui está make_icon.sho código em:

#/bin/sh

if [ -z "$GOPATH" ]; then
    echo GOPATH environment variable not set
    exit
fi

if [ ! -e "$GOPATH/bin/2goarray" ]; then
    echo "Installing 2goarray..."
    go get github.com/cratonica/2goarray
    if [ $? -ne 0 ]; then
        echo Failure executing go get github.com/cratonica/2goarray
        exit
    fi
fi

if [ -z "$1" ]; then
    echo Please specify a PNG file
    exit
fi

if [ ! -f "$1" ]; then
    echo $1 is not a valid file
    exit
fi    

OUTPUT=iconunix.go
echo Generating $OUTPUT
echo "//+build linux darwin" > $OUTPUT
echo >> $OUTPUT
cat "$1" | $GOPATH/bin/2goarray Data icon >> $OUTPUT
if [ $? -ne 0 ]; then
    echo Failure generating $OUTPUT
    exit
fi
echo Finished

Como você pode ver, ele instala uma 2goarraybiblioteca e envia os dados convertidos para iconunix.goela com nomes de variáveis Datae nomes de pacotes icon. Você também pode modificá-lo para um nome diferente.

Cinco, escreva o programa principal

Consulte systrayo exemplo em, main.goescrevemos o seguinte código em:

package main

import (
	"encoding/json"
	"ethprice/icon"
	"fmt"
	"net/http"
	"time"

	"github.com/getlantern/systray"
)

const URL = "https://api.pro.coinbase.com/products/ETH-USD/ticker"

type EthPrice struct {
    
    
	Price string `json:price`
}
type Callback func(s string)

var priceInfo = new(EthPrice)
var t *time.Ticker

var step = 15

func backgroundTask(cb Callback) {
    
    
	t = time.NewTicker(time.Duration(step) * time.Second)
	for range t.C {
    
    
		cb(fetchPrice())
	}
}

func fetchPrice() string {
    
    
	resp, err := http.Get(URL)
	if err != nil {
    
    
		return "-"
	}
	defer resp.Body.Close()
	json.NewDecoder(resp.Body).Decode(priceInfo)
	return fmt.Sprintf("ETH $%s(每%d秒)", priceInfo.Price, step)
}

func main() {
    
    
	systray.Run(onReady, onExit)
}

func onReady() {
    
    
	go backgroundTask(systray.SetTitle)
	systray.SetIcon(icon.Data)
	systray.SetTitle(fmt.Sprintf("ETH $%s(每%d秒)", priceInfo.Price, step))
	systray.SetTooltip("定时刷新ETH价格")
	oneMinite := systray.AddMenuItem("每分钟", "每分钟刷新一次")
	halfMinite := systray.AddMenuItem("每半分钟", "每30秒刷新一次")
	quartor := systray.AddMenuItem("每15秒", "每15秒刷新一次")
	mQuit := systray.AddMenuItem("退出", "退出程序")
	systray.SetTitle(fetchPrice())

	go func() {
    
    
		for {
    
    
			select {
    
    
			case <-mQuit.ClickedCh:
				systray.Quit()
				return
			case <-oneMinite.ClickedCh:
				if step != 60 {
    
    
					step = 60
					systray.SetTitle(fmt.Sprintf("ETH $%s(每%d秒)", priceInfo.Price, step))
					t = time.NewTicker(time.Duration(step) * time.Second)
				}

			case <-halfMinite.ClickedCh:
				if step != 30 {
    
    
					step = 30
					systray.SetTitle(fmt.Sprintf("ETH $%s(每%d秒)", priceInfo.Price, step))
					t = time.NewTicker(time.Duration(step) * time.Second)
				}

			case <-quartor.ClickedCh:
				if step != 15 {
    
    
					step = 15
					systray.SetTitle(fmt.Sprintf("ETH $%s(每%d秒)", priceInfo.Price, step))
					t = time.NewTicker(time.Duration(step) * time.Second)
				}
			}
		}
	}()

}

// clean up here
func onExit() {
    
    
	t.Stop()
}

Aqui, o pacote de ícones está localizado no pacote local (diretório) ethprice, e o pacote local é go mod inito pacote definido no momento. Como sou iniciante, o código não é perfeito e ainda há algumas áreas que precisam ser otimizadas, me desculpe.

Seis, compilar e executar

Alterne para o diretório raiz do projeto e execute-o go build, o ethpricearquivo executável será gerado no diretório raiz . Vamos executá-lo em segundo plano:

./ethprice &

Aqui você pode ver o preço da ETH na barra de notificação da tela, clicando nele também pode alterar o intervalo de consulta e sair do programa.
Insira a descrição da imagem aqui

Sete, configurado para funcionar automaticamente

Nós o configuramos para ser executado automaticamente após a inicialização, primeiro clique no programa para sair e, em seguida, copie-o para o diretório raiz do usuário:

cp ethprice ~

Em seguida, abrimos um terminal fora de vscode e digitamos vim auto.sho seguinte:

#!/bin/sh
./ethprice &

Pressione e escape, a seguir, pressione ":" para entrar no modo de comando inferior, insira wq e pressione Enter para salvar. Observe que esta próxima etapa é muito importante, isto é chmod 777 auto.sh.

Para configurar a inicialização, primeiro consulte https://jingyan.baidu.com/article/77b8dc7fbc943c6175eab64e.html , na etapa do item de login, clique no +número no canto esquerdo inferior , ele será auto.shadicionado e selecionado para ocultar. Como mostrado abaixo:
Insira a descrição da imagem aqui

Aqui você precisa configurar o terminal para abrir o .sharquivo com antecedência . Abra o Finder, clique com o botão direito auto.she selecione o método de abertura.Neste momento, se o primeiro item for xcode, você precisa alterá-lo. Selecione Outro, selecione todos os programas em habilitar, digite na pesquisa 终端e clique no terminal na lista à esquerda. Conforme mostrado abaixo:
Insira a descrição da imagem aqui
Clique para abrir, não haverá saída. Clique com o botão direito neste momento e o auto.shprimeiro item do método aberto se tornará um terminal.

8. Saia e faça login novamente

Saia do usuário atual e faça login novamente, podemos ver o preço da ETH na barra de notificação! Sobre!

Na verdade, ele pode ser expandido um pouco, por exemplo, em vez de definir o intervalo de consulta, o menu que aparece após clicar não é usado para consultar BTC \ EOS, etc. Camaradas interessados ​​e necessitados façam eles mesmos!

Você pode deixar uma mensagem para apontar erros ou sugerir melhorias.

Acho que você gosta

Origin blog.csdn.net/weixin_39430411/article/details/105524817
Recomendado
Clasificación