Можно ли делать так чтобы константный текст брался на этапе «(пре)компиляции» из фаила который не являеся source code?

В языке программирования Go не предусмотрен механизм "пре-компиляции", но есть способ, с помощью которого можно использовать константный текст, который не является частью исходного кода приложения.

Для этого можно воспользоваться средствами языка Go для работы с внешними файлами или внешними ресурсами, такими как файлы конфигурации или базы данных.

Один из подходов к этому - использование функции ioutil.ReadFile(), которая позволяет читать содержимое файла в виде массива байтов. Например, если у вас есть файл constants.txt, содержащий константный текст, вы можете прочитать его следующим образом:

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	data, err := ioutil.ReadFile("constants.txt")
	if err != nil {
		fmt.Println("Ошибка чтения файла:", err)
		return
	}

	fmt.Println("Содержимое файла:", string(data))
}

В этом примере мы использовали функцию ioutil.ReadFile() для чтения содержимого файла constants.txt. Если файл успешно прочитан, его содержимое преобразуется в строку с помощью string(data), и выводится на экран.

Вы также можете использовать подход, когда содержимое файла JSON-структурируется и исспользуется для конфигурирования вашего приложения. В этом случае, вы можете использовать Go пакет encoding/json, чтобы прочитать данные из внешнего файла JSON и разместить в структуру данных. Это позволит вам использовать эти константы в вашем приложении.

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
)

type Configuration struct {
	Constant1 string `json:"constant1"`
	Constant2 string `json:"constant2"`
}

func main() {
	data, err := ioutil.ReadFile("config.json")
	if err != nil {
		fmt.Println("Ошибка чтения файла:", err)
		return
	}

	var config Configuration
	err = json.Unmarshal(data, &config)
	if err != nil {
		fmt.Println("Ошибка распаковки конфигурации:", err)
		return
	}

	fmt.Println("Константа 1:", config.Constant1)
	fmt.Println("Константа 2:", config.Constant2)
}

В этом примере мы используем пакет encoding/json, чтобы распаковать данные из файла config.json в структуру Configuration. Затем мы можем использовать эти данные, например, для конфигурации приложения.

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