Как из программы написанной на языке GO поменять MAC адрес сетевого адаптера в windows?
В программе нет MAC адреса поэтому менять нечего.
MAC адрес есть у сетевой карты и поменять его можно либо в драйвере этой самой карты, либо в реестре Windows.
АртемЪ, Из вопроса все кажется ясно (первый тег "GO" конкретно на это указывает). По поводу реестра, это пришло на ум мне не сразу, т.к. в языке go есть библиотека "net" которая через метод HardwareAddr позволяет читать текущее значение аппаратного адреса(откуда этот метод сам берет информацию МНЕ совершенно не ясно). Я предположил, что возможно есть библиотека которая реализует доступ к значению аппаратного адреса(через ос или через драйвер или еще через что-то(вспоминая магию HardwareAddr)). Такую библиотеку я не мог найти, и задал вопрос здесь. Пока ждал ответа, додумался до реестра... 
если кому-то поможет: 
пакет для работы с реестром можно использовать "golang.org/x/sys/windows/registry"
Но моя проблема еще не решена! Решение работать с реестром является все таки костылем, т.к. необходимо обработать ветку "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\", далее в ней разбирать n-ое кол-во ветвей и распарсить параметры... это работает, но это совсем не элегантно (( 
поэтому хочется взаимодействия с существующим кодом... iface, _ := net.Interfaces()
	for _, inter := range iface {
		fmt.Println("iface=", inter.Name, " mac=", inter.HardwareAddr)
		if inter.Name == "Ethernet" {
			fmt.Println("работаем с Ethernet")
			fmt.Println("iface=", inter.Name, " mac=", inter.HardwareAddr) //текущие значения IP и MAC
		}
	}