Загрузите json-файл в исполняемый файл [duplicate]

Функции JavaScript называются lamda на другом функциональном языке. Его можно использовать для создания новой api (более мощной или дополняющей функции) на основе простого ввода другого разработчика. Карри - всего лишь один из методов. Вы можете использовать его для создания упрощенного api для вызова сложного api. Если вы являетесь разработчиком, который использует упрощенную api (например, вы используете jQuery для простого манипулирования), вам не нужно использовать curry. Но если вы хотите создать упрощенную api, карри - ваш друг. Вам нужно написать фреймворк javascript (например, jQuery, mootools) или библиотеку, тогда вы сможете оценить его силу. Я написал расширенную функцию curry, в http://blog.semanticsworks.com/2011/03/enhanced-curry-method.html . Вам не нужно использовать метод curry для currying, он просто помогает делать currying, но вы всегда можете сделать это вручную, написав функцию A () {}, чтобы вернуть другую функцию B () {}. Чтобы сделать его более интересным, используйте функцию B () для возврата другой функции C ().

79
задан Jimmy Sawczuk 16 December 2012 в 21:00
поделиться

4 ответа

Пакет go-bindata выглядит так, как будто вас интересует.

https://github.com/go-bindata/go-bindata

Это позволит вам преобразовать любой статический файл в вызов функции, который может быть встроен в ваш код и будет возвращать байтовый фрагмент содержимого файла при вызове.

66
ответ дан gimpf 4 September 2018 в 08:51
поделиться

Вставка текстовых файлов

Если мы говорим о текстовых файлах, они легко могут быть встроены в исходный код. Просто используйте обратные кавычки, чтобы объявить литерал string следующим образом:

const html = `
<html>
<body>Example embedded HTML content.</body>
</html>
`

// Sending it:
w.Write([]byte(html))  // w is an io.Writer

Совет по оптимизации:

. В большинстве случаев вам нужно будет только записать ресурс в io.Writer , вы также можете сохранить результат преобразования []byte:

var html = []byte(`
<html><body>Example...</body></html>
`)

// Sending it:
w.Write(html)  // w is an io.Writer

Единственное, о чем вы должны быть осторожны, это то, что необработанные строковые литералы не могут содержать символ обратной цитаты (`). Необработанные строковые литералы не могут содержать последовательности (в отличие от интерпретируемых строковых литералов), поэтому, если текст, который вы хотите внедрить, содержит обратные кавычки, вам нужно разбить исходный строковый литерал и объединить кавычки в качестве интерпретированных строковых литералов, как в этом примере:

var html = `<p>This is a back quote followed by a dot: ` + "`" + `.</p>`

Производительность не изменяется, так как эти конкатенации будут выполняться компилятором.

Вставка двоичных файлов

Хранение в качестве байтового фрагмента

Для двоичных файлов (например, изображений) наиболее компактных (в отношении результирующего нативного двоичного файла) и наиболее эффективных было бы иметь содержимое файла как []byte в исходном коде. Это может быть создано сторонними toos / libraries, такими как go-bindata .

Если вы не хотите использовать стороннюю библиотеку для этого, вот простой фрагмент кода, который читает двоичный файл и выводит исходный код Go, который объявляет переменную типа []byte, которая будет инициализирована с точным содержимым файла:

imgdata, err := ioutil.ReadFile("someimage.png")
if err != nil {
    panic(err)
}

fmt.Print("var imgdata = []byte{")
for i, v := range imgdata {
    if i > 0 {
        fmt.Print(", ")
    }
    fmt.Print(v)
}
fmt.Println("}")

Пример вывода, если файл будет содержать байты из 0 до 16 (попробуйте на Go Playground ):

var imgdata = []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}

Хранение в качестве base64 string

Если файл не «слишком большой» «(большинство изображений / значков соответствуют критериям), есть и другие жизнеспособные варианты. Вы можете преобразовать содержимое файла в Base64 string и сохранить его в исходном коде. При запуске приложения (func init()) или при необходимости вы можете декодировать его до исходного []byte контента. Go имеет хорошую поддержку кодировки Base64 в пакете encoding/base64 .

Преобразование двоичного файла в base64 string выполняется так же, как:

data, err := ioutil.ReadFile("someimage.png")
if err != nil {
    panic(err)
}
fmt.Println(base64.StdEncoding.EncodeToString(data))

Сохраните строку result64 в исходном коде, например как const.

Декодирование это всего лишь один вызов функции:

const imgBase64 = "<insert base64 string here>"

data, err := base64.StdEncoding.DecodeString(imgBase64) // data is of type []byte

Хранение как указано string

Более эффективно, чем сохранение в качестве base64 , но может быть более длинным в исходном коде, это сохранение строкового литерала , цитируемого двоичных данных. Мы можем получить цитированную форму любой строки, используя функцию strconv.Quote() :

data, err := ioutil.ReadFile("someimage.png")
if err != nil {
    panic(err)
}
fmt.Println(strconv.Quote(string(data))

Для двоичных данных, содержащих значения от 0 до 64, это то, как будет выглядеть вывод (попробуйте на Go Playground ):

"\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?"

(Обратите внимание, что strconv.Quote() добавляет и добавляет к нему кавычку.)

Вы можете напрямую использовать эту цитированную строку в своем исходном коде, например:

const imgdata = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?"

Он готов к использованию, нет необходимости его декодировать; unquoting выполняется компилятором Go во время компиляции.

Вы также можете сохранить его в виде байтового фрагмента, если вам это нужно:

var imgdata = []byte("\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?")
28
ответ дан icza 4 September 2018 в 08:51
поделиться

также существует некоторый экзотический способ - я использую maven plugin для создания проектов GoLang и позволяет использовать препроцессор JCP для встраивания двоичных блоков и текстовых файлов в источники. В коде кода просто выглядит строка ниже (, а некоторые примеры можно найти здесь )

var imageArray = []uint8{/*$binfile("./image.png","uint8[]")$*/}
2
ответ дан Igor Maznitsa 4 September 2018 в 08:51
поделиться

Как популярная альтернатива go-bindata, упомянутая в другом ответе, mjibson / esc также включает в себя произвольные файлы, но особенно удобно обрабатывать каталоги дерева.

0
ответ дан robx 4 September 2018 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: