<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Форум 'Язык Go' на RSDN</title>
    <link>http://rsdn.org/Forum/golang/</link>
    <description>Язык программирования Go</description>
    <category>golang</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN, 2001-2007</copyright>
    <webMaster>forum@rsdn.org</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://rsdn.org/rsdn.gif</url>
      <title>RSDN</title>
      <link>http://rsdn.org</link>
    </image>
    <lastBuildDate>Tue, 28 Apr 2026 08:41:46 GMT</lastBuildDate>
    <ttl>5</ttl>
	<item>
		<title>Структуры данных на Go</title>
		<link>http://rsdn.org/Forum/golang/8960265.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8960265</guid>
		<comments>http://rsdn.org/Forum/golang/8960265</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8960265</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8960265</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8960265</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="github m" href="https://github.com/zyedidia/generic" target="_blank"&gt;https://github.com/zyedidia/generic&lt;/a&gt;&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;This package implements some generic data structures.&lt;br /&gt;
&lt;br /&gt;
array2d: a 2-dimensional array.&lt;br /&gt;
avl: an AVL tree.&lt;br /&gt;
bimap: a bi-directional map; a map that allows lookups on both keys and values.&lt;br /&gt;
btree: a B-tree.&lt;br /&gt;
cache: a wrapper around map[K]V that uses a maximum size and evicts elements using LRU when full.&lt;br /&gt;
hashmap: a hashmap with linear probing. The main feature is that the hashmap can be efficiently copied, using copy-on-write under the hood.&lt;br /&gt;
hashset: a hashset that uses the hashmap as the underlying storage.&lt;br /&gt;
heap: a binary heap.&lt;br /&gt;
interval: an interval tree, implemented as an augmented AVL tree.&lt;br /&gt;
list: a doubly-linked list.&lt;br /&gt;
mapset: a set that uses Go's built-in map as the underlying storage.&lt;br /&gt;
multimap: an associative container that permits multiple entries with the same key.&lt;br /&gt;
queue: a First In First Out (FIFO) queue.&lt;br /&gt;
rope: a generic rope, which is similar to an array but supports efficient insertion and deletion from anywhere in the array. Ropes are typically used for arrays of bytes, but this rope is generic.&lt;br /&gt;
prope: a persistent version of the rope, which allows for keeping different versions of the rope with only a little extra time or memory.&lt;br /&gt;
stack: a LIFO stack.&lt;br /&gt;
trie: a ternary search trie.&lt;br /&gt;
ulist: an un-rolled doubly-linked list.&lt;br /&gt;
&lt;br /&gt;
See each subpackage for documentation and examples. The top-level generic package provides some useful types and constraints. See DOC.md for documentation.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Fri, 04 Jul 2025 14:51:06 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Книги по Go на гитхабе</title>
		<link>http://rsdn.org/Forum/golang/8846868.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8846868</guid>
		<comments>http://rsdn.org/Forum/golang/8846868</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8846868</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8846868</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8846868</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="github m" href="https://github.com/dariubs/GoBooks" target="_blank"&gt;https://github.com/dariubs/GoBooks&lt;/a&gt;&lt;br /&gt;
Начинающие&lt;br /&gt;
Пробвинутые&lt;br /&gt;
Веб&lt;br /&gt;
&lt;br /&gt;
И адреса инета&lt;br /&gt;
A tour of Go&lt;br /&gt;
Video: Learn Go Syntax in one video&lt;br /&gt;
Tutorials: Go by Example&lt;br /&gt;
Go Fundamentals Video Training&lt;br /&gt;
More Books on the Go Wiki&lt;br /&gt;
TutorialEdge.net Course&lt;br /&gt;
Coursera Specialization: Programming with Go&lt;br /&gt;
Course: Understand Go's In-Depth Mechanics&lt;br /&gt;
Course: Mastering Go Programming&lt;br /&gt;
Course: Web Development with Google’s Go Programming Language&lt;br /&gt;
Golangbot.com Articles&lt;br /&gt;
Tuxerrante repo on go exercises&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Mon, 04 Nov 2024 08:49:33 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>5</slash:comments>
		
	</item>

	<item>
		<title>Анонс: CGo binding для Avahi</title>
		<link>http://rsdn.org/Forum/golang/8808017.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8808017</guid>
		<comments>http://rsdn.org/Forum/golang/8808017</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8808017</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8808017</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8808017</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Приветики!&lt;br /&gt;
&lt;br /&gt;
Выложил тут в публичный доступ библиотечку, написанную для своего большого проекта:&lt;br /&gt;
&lt;br /&gt;
GitHub: &lt;a class="github m" href="https://github.com/alexpevzner/go-avahi" target="_blank"&gt;https://github.com/alexpevzner/go-avahi&lt;/a&gt;&lt;br /&gt;
Reference: &lt;a class="m" href="https://pkg.go.dev/github.com/alexpevzner/go-avahi" target="_blank"&gt;https://pkg.go.dev/github.com/alexpevzner/go-avahi&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Библиотечка позволяет использовать Avahi API из Go.&lt;br /&gt;
&lt;br /&gt;
Для тех, кто не в курсе, Avahi &amp;mdash; это системный демон, который реализует Multicast DNS и DNS-SD (поиск "сервисов" с помощью мультикастного DNS). С клиентами общается через D-Bus, родная клиентская библиотека написана на Си и прячет все эти D-Bus-овские тонкости под капотом. Является стандартной реализацией mDNS/DNS-SD для Linux, и, видимо, для FreeBSD (но это не точно).&lt;br /&gt;
&lt;br /&gt;
Широко используется в мире принтеров и сканеров, позволяя подключать их по принципу "воткнул, и оно само заработало" (zeroconf). Может использоваться для поиска своих запчастей в облаке, если все запчасти находятся в едином мультикастном домене.&lt;br /&gt;
&lt;br /&gt;
Сам по себе Avahi довольно уныло документирован. Поэтому я поднапрягся, разобрался в предмете и всё тщательно описал. Поскольку Go-ный API старается быть, несколько это возможно, близким к Сишному, то документация этого пакета может быть полезной и для тех, кто работает с Avahi не через Go.&lt;br /&gt;
&lt;br /&gt;
Состояние проекта: уверенная бета. Особых ошибок не наблюдается, API будет, наверное, еще меняться, но по-мелочи. Требует Go 1.18 и новее.&lt;br /&gt;
&lt;br /&gt;
Лицензия: BSD. Можно использовать в закрытых проектах.&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Thu, 29 Aug 2024 10:05:26 GMT</pubDate>
		
			<author>Pzz &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>11</slash:comments>
		
	</item>

	<item>
		<title>Решение LeetCode на Go</title>
		<link>http://rsdn.org/Forum/golang/8802635.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8802635</guid>
		<comments>http://rsdn.org/Forum/golang/8802635</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8802635</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8802635</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8802635</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="github m" href="https://github.com/TheDoctor0/leetcode-golang?tab=readme-ov-file" target="_blank"&gt;https://github.com/TheDoctor0/leetcode-golang?tab=readme-ov-file&lt;/a&gt;&lt;br /&gt;
468 задач&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Mon, 19 Aug 2024 16:20:58 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Как такое сделать на Go</title>
		<link>http://rsdn.org/Forum/golang/8748436.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8748436</guid>
		<comments>http://rsdn.org/Forum/golang/8748436</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8748436</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8748436</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8748436</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;В проекте есть два пакета, по структуре они идентичны.&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;package banzai

type BanzaiCalculator &lt;span class='kw'&gt;struct&lt;/span&gt; {
}

func (d BanzaiCalculator) Start(symbol string) BanzaiSession {
  &lt;span class='kw'&gt;return&lt;/span&gt; BanzaiSession{len(symbol)}
}

type BanzaiSession &lt;span class='kw'&gt;struct&lt;/span&gt; {
  seed &lt;span class='kw'&gt;int&lt;/span&gt;
}

func (s BanzaiSession) Calculate(input &lt;span class='kw'&gt;int&lt;/span&gt;) &lt;span class='kw'&gt;int&lt;/span&gt; {
  s.seed++
  &lt;span class='kw'&gt;return&lt;/span&gt; input + s.seed
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
и второй&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;package hiphop

type HiphopCalculator &lt;span class='kw'&gt;struct&lt;/span&gt; {
}

func (d HiphopCalculator) Start(symbol string) HiphopSession {
  &lt;span class='kw'&gt;return&lt;/span&gt; HiphopSession{len(symbol)}
}

type HiphopSession &lt;span class='kw'&gt;struct&lt;/span&gt; {
  state &lt;span class='kw'&gt;int&lt;/span&gt;
}

func (s HiphopSession) Calculate(input &lt;span class='kw'&gt;int&lt;/span&gt;) &lt;span class='kw'&gt;int&lt;/span&gt; {
  s.state--
  &lt;span class='kw'&gt;return&lt;/span&gt; input * s.state
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Каждый такой калькулятор в реальности довольно большой, там много вспомогательных типов с повторяющимимся именами, и самих калькуляторов под десяток. Так что объединять все в один пакет не годится.&lt;br /&gt;
&lt;br /&gt;
Теперь я бы хотел единообразно работать с разными калькуляторами. Например вот так:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;package main

type Calculator interface {
  Start(symbol string) Session &lt;span class='com'&gt;// В конкретных калькуляторах этот метод возвращает конкретный тип, а не интерфейс. &lt;/span&gt;
}

type Session interface {
  Calculate(input &lt;span class='kw'&gt;int&lt;/span&gt;) &lt;span class='kw'&gt;int&lt;/span&gt;
}

type Dispatcher &lt;span class='kw'&gt;struct&lt;/span&gt; {
  calculators map[string]Calculator
}

func NewDispatcher() Dispatcher {
  &lt;span class='kw'&gt;return&lt;/span&gt; Dispatcher{
    calculators: map[string]Calculator{
      &lt;span class='str'&gt;"banzai"&lt;/span&gt;: BanzaiCalculator{}, &lt;span class='com'&gt;// Это не работает потому что типы&lt;/span&gt;
      &lt;span class='str'&gt;"hiphop"&lt;/span&gt;: HiphopCalculator{}, &lt;span class='com'&gt;// не удовлетворяют общему интерфейсу&lt;/span&gt;
    },
  }
}

func (d Dispatcher) Start(key, symbol string) Session {
  &lt;span class='kw'&gt;return&lt;/span&gt; d.calculators[key].Start(symbol)
}

func main() {
  dispatcher := NewDispatcher()
  session := dispatcher.Start(&lt;span class='str'&gt;"banzai"&lt;/span&gt;,&lt;span class='str'&gt;"pyjama"&lt;/span&gt;)

  rate := session.Calculate(25)
  rate = session.Calculate(rate)
  fmt.Printf(&lt;span class='str'&gt;"Banzai calculator, two iterations, Pyjama rate: %d\n"&lt;/span&gt;, rate)
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Как видно, проблема в том, что конкретные типы калькуляторов возвращают в своем фабричном методе конкретные типы сеансов. Через общий интерфейс я эту идею выразить не сумел.&lt;br /&gt;
&lt;br /&gt;
Дженерик версия интерфейса тут тоже не спасает.&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;type Calculator[T Session] interface {
  Start(symbol string) T 
}&lt;/code&gt;&lt;/pre&gt; потому как после инстанцирования разными параметрами это будут разные типы, и в один мап их не положишь.&lt;br /&gt;
&lt;br /&gt;
Единственный вариант, который приходит в голову, это добавить ещё один пакет, &lt;tt&gt;common&lt;/tt&gt;, общий для всех калькуляторов, переместить туда интерфейс &lt;tt&gt;Session&lt;/tt&gt;, заимпортировать его в каждый из пакетов с калькуляторами, и из фабричного метода возвращать интерфейс. &lt;br /&gt;
Но это, кроме того, что неуклюже, так ещё и дважды неидиоматично. И пакет с одними только интерфейсами, и возврат интерфейсов вместо конкретных типов, все не по гайдлайнам.&lt;br /&gt;
&lt;br /&gt;
Что делать? ©&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Sat, 18 May 2024 21:43:20 GMT</pubDate>
		
			<author>SergASh &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>А вот еще учебник Go</title>
		<link>http://rsdn.org/Forum/golang/8740159.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8740159</guid>
		<comments>http://rsdn.org/Forum/golang/8740159</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8740159</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8740159</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8740159</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://quii.gitbook.io/learn-go-with-tests" target="_blank"&gt;https://quii.gitbook.io/learn-go-with-tests&lt;/a&gt;&lt;br /&gt;
TDD на Go&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Tue, 30 Apr 2024 09:40:37 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Методические рекомендации по написанию Go кода от Uber</title>
		<link>http://rsdn.org/Forum/golang/8723127.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8723127</guid>
		<comments>http://rsdn.org/Forum/golang/8723127</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8723127</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8723127</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8723127</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="github m" href="https://github.com/sau00/uber-go-guide-ru/blob/master/style.md" target="_blank"&gt;https://github.com/sau00/uber-go-guide-ru/blob/master/style.md&lt;/a&gt;&lt;br /&gt;
На русском, как предыдущий пост&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Tue, 02 Apr 2024 14:47:45 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>5</slash:comments>
		
	</item>

	<item>
		<title>Yandex Go (?)</title>
		<link>http://rsdn.org/Forum/golang/8723030.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8723030</guid>
		<comments>http://rsdn.org/Forum/golang/8723030</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8723030</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8723030</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8723030</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://pkg.go.dev/github.com/comerc/yandex#section-readme" target="_blank"&gt;https://pkg.go.dev/github.com/comerc/yandex#section-readme&lt;/a&gt;&lt;br /&gt;
Довольно познавательно, особенно для новичков&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Tue, 02 Apr 2024 12:27:44 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>Вопросы с собеседований по Go</title>
		<link>http://rsdn.org/Forum/golang/8711271.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8711271</guid>
		<comments>http://rsdn.org/Forum/golang/8711271</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8711271</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8711271</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8711271</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://golangreview.ru/docs/category/%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B-%D1%81-%D1%81%D0%BE%D0%B1%D0%B5%D1%81%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9-%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%81-golang/" target="_blank"&gt;Здесь&lt;/a&gt;&lt;br /&gt;
И другие тоже есть некоторые. &lt;br /&gt;
По инфраструктуре, например&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Wed, 13 Mar 2024 18:05:44 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Stringer интерфейс, метод  String</title>
		<link>http://rsdn.org/Forum/golang/8706379.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8706379</guid>
		<comments>http://rsdn.org/Forum/golang/8706379</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8706379</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8706379</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8706379</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;День добрый.&lt;br /&gt;
В Go я полный ноль. Поэтому читаю вскую документацию.&lt;br /&gt;
Наткнулся на вот такой пример: &lt;a class="m" href="https://go.dev/tour/methods/18" target="_blank"&gt;https://go.dev/tour/methods/18&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Поясните пожалуйста, почему в данном примере если все оставить как есть, то напечатается два раза "0.0.0.0", &lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;package main

import &lt;span class='str'&gt;"fmt"&lt;/span&gt;

type IPAddr [4]byte

func (v IPAddr) String() string {
    &lt;span class='kw'&gt;return&lt;/span&gt; &lt;span class='str'&gt;"0.0.0.0"&lt;/span&gt;
}

func main() {
    hosts := map[string]IPAddr{
        &lt;span class='str'&gt;"loopback"&lt;/span&gt;:  {127, 0, 0, 1},
        &lt;span class='str'&gt;"googleDNS"&lt;/span&gt;: {8, 8, 8, 8},
    }
    &lt;span class='kw'&gt;for&lt;/span&gt; name, ip := range hosts {
        fmt.Printf(&lt;span class='str'&gt;"%v: %v\n"&lt;/span&gt;, name, ip)
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="m" href="https://ideone.com/lIeMk8" target="_blank"&gt;https://ideone.com/lIeMk8&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
если же заменить сигнатуру на &lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;func (v *IPAddr) String() string&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
то будет вызван иной метод преобразования и напечатаются реальные значения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Допустим fmt.Printf ищет interface Stringer, но в интерфейсе не указывается указатель ли это или нет.&lt;br /&gt;
Опять же, согласно этому примеру &lt;a class="m" href="https://go.dev/tour/methods/7" target="_blank"&gt;https://go.dev/tour/methods/7&lt;/a&gt; GO сам берет указатель если сильно надо и наоборот.&lt;br /&gt;
&lt;br /&gt;
Спасибо!&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Tue, 05 Mar 2024 20:30:23 GMT</pubDate>
		
			<author>k55 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>равно и не равно</title>
		<link>http://rsdn.org/Forum/golang/8699539.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8699539</guid>
		<comments>http://rsdn.org/Forum/golang/8699539</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8699539</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8699539</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8699539</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Почему гоу использует &lt;b&gt;==&lt;/b&gt; и &lt;b&gt;!=&lt;/b&gt; для равно и не равно, соответственно, если&lt;br /&gt;
можно просто &lt;b&gt;=&lt;/b&gt; и &lt;b&gt;#&lt;/b&gt; как в оберон, идеи которого повлияли на гоу(тот же &lt;b&gt;:=&lt;/b&gt; оператор присваивания)?&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Mon, 26 Feb 2024 02:55:50 GMT</pubDate>
		
			<author>Разраб &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>10</slash:comments>
		
	</item>

	<item>
		<title>Библиотека wails</title>
		<link>http://rsdn.org/Forum/golang/8678339.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8678339</guid>
		<comments>http://rsdn.org/Forum/golang/8678339</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8678339</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8678339</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8678339</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://wails.io/ru/docs/introduction/" target="_blank"&gt;https://wails.io/ru/docs/introduction/&lt;/a&gt;&lt;br /&gt;
Wails &amp;mdash; это проект, позволяющий писать настольные приложения с использованием Go и web технологий.&lt;br /&gt;
Считайте, что это легкая и быстрая альтернатива Electron для Go. &lt;br /&gt;
Вы можете легко создавать приложения с гибкостью и мощностью Go, в сочетании с богатым современным фронтендом&lt;br /&gt;
&lt;br /&gt;
Кто-нить пользовался ?&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Tue, 30 Jan 2024 15:27:19 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>100 вопросов с собеседований</title>
		<link>http://rsdn.org/Forum/golang/8669568.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8669568</guid>
		<comments>http://rsdn.org/Forum/golang/8669568</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8669568</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8669568</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8669568</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://habr.com/ru/articles/786826/" target="_blank"&gt;https://habr.com/ru/articles/786826/&lt;/a&gt;&lt;br /&gt;
Кому надо готовиться &amp;mdash; можно с этого начать.&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Wed, 17 Jan 2024 06:02:32 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Практики разбивки проекта на пакеты</title>
		<link>http://rsdn.org/Forum/golang/8659711.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8659711</guid>
		<comments>http://rsdn.org/Forum/golang/8659711</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8659711</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8659711</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8659711</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Добрый день! Есть проект на Go, проект разрастается, и стало неудобно когда все файлы в IDE в одном длинном списке. Хочется разбить на папки. &lt;br /&gt;
А, насколько я понимаю, это также подразумевает разбивку на пакеты (или нет?).&lt;br /&gt;
&lt;br /&gt;
Сейчас есть main, содержащий глобальную структуру Application, в которой хранятся всякие общие для всего проекта сущности&lt;br /&gt;
Объект соединения с БД&lt;br /&gt;
Объект с разными настройками программы, читаемыми из конфига&lt;br /&gt;
Объект соединения с удаленным сервисом, предоставляющим данные по API&lt;br /&gt;
Объект собственного веб-сервера&lt;br /&gt;
Объект прокси&lt;br /&gt;
и т.п.&lt;br /&gt;
&lt;br /&gt;
Есть группа файлов, которая занимается только работой с БД (выполняет запросы и возвращает массивы с результатами)&lt;br /&gt;
&lt;br /&gt;
Есть группа файлов, которая занимается запросами к удаленному серверу с помощью его API и складыванием результатов в БД&lt;br /&gt;
&lt;br /&gt;
Есть группа файлов, которая занимается формированием собственного веб-интерфейса; она также использует объект БД&lt;br /&gt;
&lt;br /&gt;
Есть файлы, содержащие общие вспомогательные функции&lt;br /&gt;
&lt;br /&gt;
Хочется все это разделить. Но к примеру база должна быть доступна всем "пакетам". Передавать ее каждый раз как аргумент?&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Sun, 31 Dec 2023 09:15:28 GMT</pubDate>
		
			<author>a9000 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Как пользоваться Go в России, если go-ресурсы заблокированы Гуглом?</title>
		<link>http://rsdn.org/Forum/golang/8641088.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8641088</guid>
		<comments>http://rsdn.org/Forum/golang/8641088</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8641088</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8641088</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8641088</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Golang.org &amp;mdash; доступ из РФ заблокирован Гуглом &lt;a class="m" href="https://disk.yandex.ru/i/Km3c1mUHWCm7Pg" target="_blank"&gt;https://disk.yandex.ru/i/Km3c1mUHWCm7Pg&lt;/a&gt; .&lt;br /&gt;
Pkg.go.dev &amp;mdash; доступ из РФ заблокирован Гуглом &lt;br /&gt;
&lt;a class="m" href="https://disk.yandex.ru/i/DQSRxj1F3YA1uA" target="_blank"&gt;https://disk.yandex.ru/i/DQSRxj1F3YA1uA&lt;/a&gt; .&lt;br /&gt;
&lt;br /&gt;
Гоферы, у вас постоянно включен ВПН?&lt;br /&gt;
Оплачиваете зарубежный ВПН/вдс рублями картой мир?&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Sat, 25 Nov 2023 17:15:31 GMT</pubDate>
		
			<author>Andrey Vorobyev &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>20</slash:comments>
		
	</item>

	<item>
		<title>Awesome-go</title>
		<link>http://rsdn.org/Forum/golang/8589915.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8589915</guid>
		<comments>http://rsdn.org/Forum/golang/8589915</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8589915</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8589915</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8589915</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Нашел на GitFlic &lt;br /&gt;
&lt;a class="m" href="https://gitflic.ru/project/tecras/awesome-go#gui" target="_blank"&gt;https://gitflic.ru/project/tecras/awesome-go#gui&lt;/a&gt;&lt;br /&gt;
То, что смотрел, ведет на github&lt;br /&gt;
&lt;br /&gt;
В частности, по gui: &lt;a class="m" href="https://gitflic.ru/project/tecras/awesome-go#gui" target="_blank"&gt;https://gitflic.ru/project/tecras/awesome-go#gui&lt;/a&gt;&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Tue, 29 Aug 2023 04:12:09 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Оконная библиотека Gotk3</title>
		<link>http://rsdn.org/Forum/golang/8578161.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8578161</guid>
		<comments>http://rsdn.org/Forum/golang/8578161</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8578161</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8578161</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8578161</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://habr.com/ru/articles/420035/" target="_blank"&gt;https://habr.com/ru/articles/420035/&lt;/a&gt; &amp;mdash; небольшая статья по теме&lt;br /&gt;
&lt;a class="github m" href="https://github.com/gotk3" target="_blank"&gt;https://github.com/gotk3&lt;/a&gt; &amp;mdash; сама библиотека&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Sat, 12 Aug 2023 05:00:20 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Ускорение работы с sqlite</title>
		<link>http://rsdn.org/Forum/golang/8562754.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8562754</guid>
		<comments>http://rsdn.org/Forum/golang/8562754</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8562754</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8562754</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8562754</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Пишу простенький локальный веб-сервер для работы с данными из соцсети VK. Это мой личный учебный проект, чисто для локального использования. Ни с Go ни с Sqlite ранее не работад.&lt;br /&gt;
С помощью API выкачиваю данные, затем закладываю их в базу на sqlite.&lt;br /&gt;
Я ожидал что все это будет работать очень быстро, а оно реально тормозит.&lt;br /&gt;
Скачивание по 1000 записей происходит быстро, а вот добавление в базу (операция "upsert", т.е. добавление или обновление если данные уже есть) &amp;mdash; крайне медленно, в среднем по полсекунды на запись. Т.е. просто глазами видно как в консоль раз в полсекунды-секунду выводятся строчки с именами юзеров.&lt;br /&gt;
Сделано конечно в лоб. Вот например цикл по массиву скачанной порции данных&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;for _, member := range members.Items {
    name := member.FirstName + " " + member.LastName
    fmt.Println(name)
    app.UpsertUser(member.ID, name)
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Вот функция добавления и обновления юзера&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;func (app *Application) UpsertUser(uid int, name string) {
    user := User{Uid: uid}
    app.db.FirstOrCreate(&amp;amp;user, User{Uid: uid})
    if !(name == "DELETED" &amp;amp;&amp;amp; user.Name != "DELETED") {
        user.Name = name
    }
    app.db.Save(&amp;amp;user)
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Для работы с sqlite используется библиотека GORM. &lt;br /&gt;
Откуда такие огромные задержки и как можно ускорить работу с базой?&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Sat, 15 Jul 2023 10:07:09 GMT</pubDate>
		
			<author>00011011 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>33</slash:comments>
		
	</item>

	<item>
		<title>ООП не получается [Решено]</title>
		<link>http://rsdn.org/Forum/golang/8552245.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8552245</guid>
		<comments>http://rsdn.org/Forum/golang/8552245</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8552245</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8552245</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8552245</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Да знаю, знаю, что нет в go ООП. Но есть эмуляция, и я хочу решить задачу, которая на плюсах решается &lt;s&gt;тривально&lt;/s&gt; привычно:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;iostream&amp;gt;
&lt;span class='kw'&gt;struct&lt;/span&gt; FooBar {
    &lt;span class='kw'&gt;virtual void&lt;/span&gt; Foo() = 0;
    &lt;span class='kw'&gt;virtual void&lt;/span&gt; Bar() = 0;
};

&lt;span class='com'&gt;// Этот класс имплементирует интерфейс методами по умолчанию &lt;/span&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; foo : &lt;span class='kw'&gt;public&lt;/span&gt; FooBar {
&lt;span class='kw'&gt;public&lt;/span&gt;:
    &lt;span class='com'&gt;// Этот метод будет переопределяться в наследниках&lt;/span&gt;
    &lt;span class='kw'&gt;void&lt;/span&gt; Foo() override {
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"foo::Foo"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }

    &lt;span class='kw'&gt;void&lt;/span&gt; Bar() override {
        Foo(); &lt;span class='com'&gt;// Ожидается, что здесь будет вызван метод наследника&lt;/span&gt;
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"foo::Bar"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }
};

&lt;span class='com'&gt;//  А вот и наследник с переопределённым методом&lt;/span&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; bar : &lt;span class='kw'&gt;public&lt;/span&gt; foo {
&lt;span class='kw'&gt;public&lt;/span&gt;:
    &lt;span class='kw'&gt;void&lt;/span&gt; Foo() override {
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"bar::Foo"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }
};
 
&lt;span class='kw'&gt;int&lt;/span&gt; main() {
    FooBar* fb = &lt;span class='kw'&gt;new&lt;/span&gt; bar();
    fb-&amp;gt;Bar();
    &lt;span class='kw'&gt;delete&lt;/span&gt; fb;
    &lt;span class='kw'&gt;return&lt;/span&gt; 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
И всё работает как и ожидалось:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;bar::Foo
foo::Bar&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="m" href="https://ideone.com/1Lf02l" target="_blank"&gt;https://ideone.com/1Lf02l&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Теперь go:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;package main

import &lt;span class='str'&gt;"log"&lt;/span&gt;

type FooBar interface {
    Foo()
    Bar()
}

type foo &lt;span class='kw'&gt;struct&lt;/span&gt;{}

func (*foo) Foo() {
    log.Println(&lt;span class='str'&gt;"foo::Foo"&lt;/span&gt;)
}

func (f *foo) Bar() {
    f.Foo() &lt;span class='com'&gt;// Ожидается, что здесь будет вызван метод "наследника"
                // Но похоже, что инфорация о типе здесь безвозвратно утеряна.&lt;/span&gt;
    log.Println(&lt;span class='str'&gt;"foo:Bar"&lt;/span&gt;)
}

type bar &lt;span class='kw'&gt;struct&lt;/span&gt;{ *foo }

func (*bar) Foo() {
    log.Println(&lt;span class='str'&gt;"bar::Foo"&lt;/span&gt;)
}

func NewFooBar() FooBar {
    &lt;span class='kw'&gt;return&lt;/span&gt; &amp;amp;bar{&amp;amp;foo{}}
}

func main() {
    fb := NewFooBar()
    fb.Bar()
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Но нет:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;2009/11/10 23:00:00 foo::Foo
2009/11/10 23:00:00 foo:Bar

Program exited.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="m" href="https://go.dev/play/p/23zNfIZ3Swq" target="_blank"&gt;https://go.dev/play/p/23zNfIZ3Swq&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
И как же быть?&lt;br /&gt;
Пока приходится копировать реализацию Bar() в каждом "наследнике". А это ну... моветон какой-то. Должен же быть способ, не может же быть что так тупо всё и задумывалось.&lt;br /&gt;
&lt;br /&gt;
Гугление проводит к таким ресультатам:&lt;br /&gt;
&lt;a class="m" href="https://www.reddit.com/r/golang/comments/28garc/what_is_the_preferred_way_to_provide_a_default/" target="_blank"&gt;https://www.reddit.com/r/golang/comments/28garc/what_is_the_preferred_way_to_provide_a_default/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Но там нет вызова методов, который я хочу.&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Tue, 27 Jun 2023 07:13:16 GMT</pubDate>
		
			<author>Doom100500 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>19</slash:comments>
		
	</item>

	<item>
		<title>Видеокурс по Go</title>
		<link>http://rsdn.org/Forum/golang/8551477.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/golang/8551477</guid>
		<comments>http://rsdn.org/Forum/golang/8551477</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8551477</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8551477</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8551477</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="m" href="https://tproger.ru/video/uchimsja-razrabatyvat-na-golang-urok-15-rabota-s-json/" target="_blank"&gt;https://tproger.ru/video/uchimsja-razrabatyvat-na-golang-urok-15-rabota-s-json/&lt;/a&gt;&lt;br /&gt;
Ссыль на 15 видос, но там все предыдущие 14 прописаны&lt;/div&gt;
				
		</description>
		
		<category>golang</category>
		<pubDate>Mon, 26 Jun 2023 04:53:11 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>8</slash:comments>
		
	</item>
</channel>
</rss>
