índice
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
- Abra https://github.com/getlantern/systray e git clone, nosso trabalho é modificar no exemplo que ele dá.
- Baixe um logotipo da Ethereum (em formato PNG) da Internet
- 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
- Configure
GOPROXY="https://goproxy.io"
. Recomenda-.bash_profile
se 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 work
não está no GOPATH
diretório. Use vscode para abrir a ethprice
pasta agora , crie main.go
arquivos e pastas no diretório raiz icon
e renomeie o logotipo Ethereum logo.png
para a icon
pasta. Será o seguinte:
Quarto, lidar com o logotipo
Copie a bandeja example\icon\make_icon.sh
do 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.go
arquivo no diretório atual , este é o logotipo que nosso gadget precisa. Aqui está make_icon.sh
o 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 2goarray
biblioteca e envia os dados convertidos para iconunix.go
ela com nomes de variáveis Data
e nomes de pacotes icon
. Você também pode modificá-lo para um nome diferente.
Cinco, escreva o programa principal
Consulte systray
o exemplo em, main.go
escrevemos 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 init
o 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 ethprice
arquivo 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.
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.sh
o 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.sh
adicionado e selecionado para ocultar. Como mostrado abaixo:
Aqui você precisa configurar o terminal para abrir o .sh
arquivo com antecedência . Abra o Finder, clique com o botão direito auto.sh
e 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:
Clique para abrir, não haverá saída. Clique com o botão direito neste momento e o auto.sh
primeiro 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.