Skip to content

Instantly share code, notes, and snippets.

@squiidz
Created November 5, 2014 01:13
Show Gist options
  • Save squiidz/11c5781e8b7763393010 to your computer and use it in GitHub Desktop.
Save squiidz/11c5781e8b7763393010 to your computer and use it in GitHub Desktop.
Learn Go
package main
import (
"io/ioutil"
"net/http"
)
type Fetcher interface {
GetName() string
Fetch() (*[]byte, error)
}
type File struct {
Name string
Url string
Version string
Ext string
Min bool
}
func (f *File) GetName() string {
if f.Min {
return f.Name + ".min" + f.Ext
}
return f.Name + f.Ext
}
func (f *File) Fetch() (*[]byte, error) {
if f.Min {
resp, err := http.Get(f.Url + f.Version + "/" + f.Name + ".min" + f.Ext)
if err != nil {
return nil, err
}
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
return &data, nil
}
resp, err := http.Get(f.Url + f.Version + "/" + f.Name + f.Ext)
if err != nil {
return nil, err
}
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
return &data, nil
}
func main() {
angular := &File{
Name: "angular",
Url: "https://ajax.googleapis.com/ajax/libs/angularjs/",
Version: "1.3.1",
Ext: ".js",
Min: true,
}
animate := &File{
Name: "animate",
Url: "https://raw.github.com/daneden/animate.css/master/",
Version: "",
Ext: ".css",
Min: false,
}
CreateLib(angular, animate)
}
func CreateLib(ft ...Fetcher) {
fileChan := make(chan []byte)
for _, fetch := range ft {
go func() {
data, err := fetch.Fetch()
if err != nil {
panic(err)
}
fileChan <- *data
}()
ioutil.WriteFile(fetch.GetName(), <-fileChan, 0777)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment