<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le Blog du grand loup Zeur &#187; golang</title>
	<atom:link href="http://blog.gaetan-grigis.eu/tag/golang/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gaetan-grigis.eu</link>
	<description>Le blog qui vous fait connaitre ce que vous savez déjà</description>
	<lastBuildDate>Tue, 17 Jan 2012 08:43:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mumuse avec GOLang &#8230;</title>
		<link>http://blog.gaetan-grigis.eu/programmation/mumuse-avec-golang/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/mumuse-avec-golang/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 21:37:57 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[html parsing]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[regexp]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=624</guid>
		<description><![CDATA[Depuis pas mal de temps déjà, Google a release un langage qui se veut simple, puissant &#8230; et tout et tout. Pour savoir un peut ce que ça vaut, j&#8217;ai donc installé la bête, et fait un test basique : connexion HTTP/parsing regexp. Pour installer la bestiole (chez moi dans le home/$USER/go) : Les exports [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis pas mal de temps déjà, Google a release un <a href="http://golang.org/" target="_blank">langage</a> qui se veut simple, puissant &#8230; et tout et tout.</p>
<p>Pour savoir un peut ce que ça vaut, j&#8217;ai donc installé la bête, et fait un test basique : connexion HTTP/parsing regexp.</p>
<p><span id="more-624"></span></p>
<p>Pour installer la bestiole (chez moi dans le home/$USER/go) :<br />
Les exports à mettre dans votre .bashrc ou à taper avant chaque compilation/mise à jour :<br />
<code><br />
export GOROOT=~/go<br />
export GOARCH=386 ou amd64 ou arm<br />
export GOOS=linux<br />
export GOBIN=$GOROOT/bin<br />
export PATH=$PATH:$GOBIN<br />
</code><br />
Pour l&#8217;installation :<br />
<code><br />
apt-get install mercurial bison gcc libc6-dev ed make<br />
hg clone -r release https://go.googlecode.com/hg/ $GOROOT<br />
cd $GOROOT/src<br />
./all.bash<br />
</code><br />
Pour mettre à jour :<br />
<code><br />
cd $GOROOT &amp;&amp; hg pull &amp;&amp; hg update &amp;&amp; cd src &amp;&amp; ./all.bash<br />
</code></p>
<p>Pour ensuite compiler un logiciel en go &#8230; c&#8217;est assez spécial, le nom du compilateur/linkeur change suivant votre architecture :</p>
<ul>
<li>8g, 8l pour les x86</li>
<li>6g, 6l pour les amd64</li>
<li>5g, 5l pour les arm</li>
</ul>
<p>Pour ma part étant sur un bon vieux x86, j&#8217;obtiens donc ce genre de choses pour compiler :<br />
<code><br />
8g source.go<br />
8l source.8<br />
./8.out<br />
</code><br />
Il vous faudra donc changer le 8 par le chiffre &laquo;&nbsp;lié&nbsp;&raquo; à votre architecture.</p>
<p>Maintenant la source pour le plaisir des yeux (ou pas ^^), un mini soft récupérant les liens d&#8217;une page web fournit en paramètre (sans vérification du paramètre &#8230;). C&#8217;est mon &laquo;&nbsp;hello world&nbsp;&raquo; à moi.</p>
<div class="geshi no go">
<ol>
<li class="li1">
<div class="de1">package main
</div>
</li>
<li class="li1">
<div class="de1">import &quot;http&quot;
</div>
</li>
<li class="li1">
<div class="de1">import &quot;fmt&quot;
</div>
</li>
<li class="li1">
<div class="de1">import &quot;io&quot;
</div>
</li>
<li class="li1">
<div class="de1">import &quot;regexp&quot;
</div>
</li>
<li class="li1">
<div class="de1">import &quot;flag&quot;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">func main() {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;flag.Parse();
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;if(flag.NArg()!=1){fmt.Printf(&quot;Il manque un argument\n&quot;);return;}
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;resp := new(http.Response);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;resp,_, _ = http.Get(flag.Arg(0));
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;b,_:=io.ReadAll(resp.Body);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;resp.Body.Close();
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;result:=string(b);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;/*REGEXP*/
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;re,_:= regexp.Compile(&quot;&lt;a[^&gt;]*&gt;[^&lt;]*&lt;/a&gt;&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;mat:= re.AllMatchesString(result,0);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;for i:=range mat {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; fmt.Printf(&quot;%s\n&quot;,mat[i]);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; re,_=regexp.Compile(&quot;href=[\&quot;&#39;]([^\&quot;&#39;&gt;]*)[\&quot;&#39;](.*)?&gt;([^&lt;]*)&lt;/a&gt;&quot;);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ma:=re.MatchStrings(mat[i]);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; for j:=range ma {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;fmt.Printf(&quot;Got[%d] : %s\n&quot;,j,ma[j]);
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;}
</div>
</li>
<li class="li1">
<div class="de1">}</div>
</li>
</ol>
</div>
<p>La source ne présente rien de complexe, le but étant juste pour ma part de comprendre la &laquo;&nbsp;logique&nbsp;&raquo; du langage, les retours des fonctions changent pas mal des autres langages (ça autorise juste le retour de plusieurs variables en même temps &#8230; les ingénieurs de chez google ne connaissaient pas les tableaux =)), et le style de déclaration des variables (on peut passer par des déclarations typées pour les intellos, et des déclarations alârache via les := &#8230;).</p>
<p>Niveau performances c&#8217;est sympa (quoiqu&#8217;un script en perl/python/php soit aussi rapide pour ce test &#8230;), niveau syntaxe ça tiens la route, les retours d&#8217;erreurs sont assez explicite ^^.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=624">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/exemple-de-bot-dauthentification-et-de-clic-en-php/" rel="bookmark" title="Permanent Link: Exemple de Bot d&#8217;Authentification et de clic en Php">Exemple de Bot d&#8217;Authentification et de clic en Php</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/mumuse-avec-golang/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

