Sto scrivendo una libreria in Go. Sto pianificando di distribuirlo e con un requisito principale di "senza codici sorgente".Utilizzo di pacchetti binari direttamente
Per il test, ho creato due aree di lavoro, come segue,
WS1
- bin/
- pkg/linux_amd64/lib.a
- src/lib/src.go
WS2
- bin/
- pkg/
- src/main/main.go
Il mio primo lavoro (WS1) è la libreria manichino vero e proprio, che ha alcune funzioni di utilità. Second workspace (WS2) ha una funzione principale che utilizza il pacchetto (lib.a) di WS1.
Tutto funzionava correttamente finché non rimuovo i sorgenti da WS1. Se rimuovo il /lib/src.go directory in WS1, sto ottenendo il seguente errore durante il movimento di generazione,
main.go: 5: 2: non riesce a trovare il pacchetto "lib" in uno qualsiasi dei: /usr/local/go/src/pkg/lib (da $ GOROOT) ../Testing/ws1/src/lib (da $ GOPATH)
il messaggio sopra di noi indica che dovremmo tenere la fonte file pure. I pacchetti binari precompilati da soli non possono essere utilizzati direttamente.
Sulla base di alcuni suggerimenti online, è possibile che alcune fonti fittizie con valore di timestamp inferiore al timestamp dei pacchetti binari. Ma questo non sembra essere una soluzione fattibile per noi. Cosa succede se il timestamp delle sorgenti fittizie è stato aggiornato purtroppo?
ho visto problema simile discusso qui, https://github.com/golang/go/issues/2775
Le mie domande:
distribuire le fonti è l'unica possibilità in Golang?
Perché Go non fornisce una disposizione per l'utilizzo diretto dei file ".a"?
Se mantenere la sorgente è obbligatorio per Go, perché questa piccola cosa è non menzionata ovunque in Go? (o) Mi manca qualcosa qui?
Grazie in anticipo per il vostro aiuto ragazzi!
Grazie Volker! Ora capisci il problema qui. La ragione per cui stavo premendo su "go build" è che la maggior parte degli sviluppatori utilizzerà comunque questo strumento per i loro progetti. –
Heads up: questo trucco non funziona più a partire da Go 1.5, vedi [questo problema con GitHub] (https://github.com/golang/go/issues/12186). – tsuna