暗号通貚をPHPからGoに8か月間曞き盎した方法。 パヌト2





カティアからのSMSで始たったストヌリヌの2番目の郚分は「もう電話しないで、もう曞いおはいけない!!!!」



最初の郚分はこちらです。 読むのが面倒な人のために、簡単な芁玄をしたす。



4.5幎前、私はこのビゞネスに完党に䞍適切な蚀語、぀たりPHPで暗号通貚を曞き始めるのは無謀でした。 結局、私は曞きたした私は頑固ですが、束葉杖で束葉杖を手に入れたした。それが䞀般的に機胜するずいう事実は、ある皮の魔法でした。

私はすぐにあなたに譊告したいず思いたす、私は独孊のプログラマヌで、半孊歎のあるプログラマヌです、そしお、それを穏やかに蚀えば、コヌドを曞くこずは理想的ではありたせん。



それはすべお、私がカティアずいう名前の女の子ず別れ、同じ日に2015幎4月4日Goを勉匷しお暗号通貚を曞き換えるこずにしたずいう事実から始たりたした。 カティアで䜕が起こっおいるかに興味がある人のために、私はネタバレをしたしたが、興味がない人はカティアに泚意を払わないでください



カティアに぀いおの最初の郚分を読んでいない人のために
たず、それがどのように始たったのかを説明したす。 私は2015幎初めに出䌚い系サむトでむンタヌネットで圌女に䌚った。 すぐに恋に萜ちたした。 倖郚的には、圌女は私の奜みに合っおいたした。 私たちは公園を歩き回り、冗談を蚀い、笑い、ピン留めし、寒くなりたした、私は別れたくありたせんでした。 挫画を芋るために電話したした。 タクシヌに乗っお到着したした。 圌は非垞に面癜い挫画である「3人のヒヌロヌ乗銬」をオンにし、ベッドに暪たわっお、涙を浮かべお笑いたした。



倕方、私はカティアが倜を過ごすず確信しおいたす。 しかし、䜕らかの理由で、圌女は家に垰る必芁があるず繰り返し始めたした。 ベッドで圌女の朝食を食べたいず蚀った。 明日の朝に圌女が朝食をずるように手配しおください。 私はタクシヌを呌んだ、圌女は去った。 私は幞せに眠りたした 私は自分自身が矎しい女の子で、面癜くお面癜かったです。 翌日、テキストメッセヌゞ「こんにちは。 䜕しおるの」 私は自分の気持ちを芚えおいたす。私は本圓に奜きな女の子を曞いたので、楜しかったです。 そしおすぐに私たちは圌女ず再び䌚うこずになりたした...



その日は䌚ったこずがない。 そしお次も。 圌女の頭の䞭で䜕が起こっおいるのかわかりたせんが、圌女は絶えずデヌトに耐えたした。 2月23日には祝犏すらしたせんでした。

どういうわけかそれをかき混ぜるこずにしたした。 カティアはSMSを曞きたした「私はすぐに、もちろん私はキャプチャしたす」

圌女は答えたした「ある意味で」

私「おっず、ない」

圌女「そうです」

圌女のjeはオンになりたした。 1日埌、䌚うように招埅され、圌女は同意した。



圌女の行動を分析し、少しグヌグルで調べたずころ、「New Rules。 珟代の女の子のための成功した関係の秘密」

倕方、私は本を読んで、この本からのアドバむスを䜿っお、䜕らかの理由で圌女が私を愛しおいるこずに気付きたした。



8か月の結果アプリケヌションは、Win 64/32 、OSX64/32、Linux64/32、FreeBSD64/32、 Android 、 IOS 誰かがApp Storeにドロップするずクヌルになりたすで実行されたす

合蚈コヌドは玄73k行で、異なるOSのコヌドは数癟行皋床です。

40k-凊理/ブロック生成/ tr-17、17.5k-むンタヌフェヌス甚コントロヌラヌ、15.5k-テンプレヌト

PostgreSQL、SQLite、MySQLがサポヌトされおいたす。



私の䜜品をテストする人に譊告したす-バグがあるかもしれたせん。時間があれば、 darwin @ dcoin.clubたたはハブのPMでそれらに぀いお曞いおください。 提案やアドバむスも歓迎したす。



最初の郚分では、Webサヌバヌがdcoinでどのように機胜するかに぀いお説明したした。



この蚘事では、 HTML /テンプレヌトの䜿甚方法に぀いお説明したす



パタヌン



Goには、htmlペヌゞを生成するための非垞に䟿利なパッケヌゞがありたす-html / template。 仕組みを理解する最も簡単な方法は、 この䟋を詊しおみるこずです 。 通垞、テンプレヌトは個別のhtmlファむルに保存されたすが、play.golang.orgの䟋では、わかりやすくするためにテンプレヌトをgo-codeに挿入しおいたす。



テンプレヌト情報のほずんどをgohugo.io/templates/go-templatesから取埗したした



テンプレヌトはこちらです。 各テンプレヌトは、その名前の定矩{{define "templateName"}}で始たり、{{end}}で終わりたす



テンプレヌトを䜿甚するコントロヌラヌは、 makeTemplate関数を介しおhtmlコヌドを受け取りたす。 htmlファむルの名前、テンプレヌトの名前{{define}}で指定されおいる、パラメヌタヌを枡したす。



TemplateStr, err := makeTemplate("template_name", "templateName", &tplPage{ Alert: c.Alert, Lang: c.Lang, TxType: txType, TxTypeId: txTypeId})
      
      





TemplateStrで受信したバむトセットはcontent.goに転送され、その結果、ブラりザヌは生成されたhtmlペヌゞを受信したす



すべおのテンプレヌトのmakeTemplateに、signatures.html、alert_success.htmlなどの远加のテンプレヌトを含めたす。 たた、テンプレヌト内のデヌタを凊理するために䜿甚されるナヌザヌ定矩関数FuncMapを远加したす。



Katyaに぀いお
二日目、私たちはただ歩いお、おしゃべりしたした。 すべおが良かった。 私のSMSに぀いお「私はすぐに、もちろん、私は぀かむ」圌女は、私の幞犏に、䜕も蚀わなかった。

私はこの本の問題に悩たされ、それによれば、それ自䜓に恋をするように思えた。 私は盎接尋ねるこずを敢えおしたせんでした。 圌は䜕を読んでいるのだろうず思った。 圌女はいく぀かの著者に名前を付けたした。 心理孊に関する本に぀いお尋ねられたずき、圌女は自分で読むず答えた。

寒かった。 家に垰りたした。 先日リンクに行くこずに同意したした。



テンプレヌトに含たれるもの



テンプレヌトに別のテンプレヌトを含めるには、{{template "signatures"構造を䜿甚する必芁がありたす。 }}。 末尟のドットは、眲名テンプレヌト内のすべおのパラメヌタヌを凊理する必芁があるこずを瀺しおいたす。ドットがないず、パラメヌタヌは凊理されたせん。 ほずんどすべおのテンプレヌトに眲名を远加したす。ここに䟋を瀺したす



パラメヌタ



比范 どれだけ簡単かを瀺すために、いく぀かの䟋を䞀床に瀺したす。

 {{if not .UserID}} <span></span> {{end}} {{if .UserID}} <span> </span> {{end}} {{if eq .UserID 0}} <span>UserID == 0</span> {{end}} {{if ne .UserID 0}} <span>UserID != 0</span> {{end}} {{if lt .UserID 0}} <span>UserID < 0</span> {{end}} {{if le .UserID 0}} <span>UserID <= 0</span> {{end}} {{if gt .UserID 0}} <span>UserID > 0</span> {{end}} {{if ge .UserID 0}} <span>UserID >= 0</span> {{end}}
      
      





{{.Lang.pool}-ラングは地図です。 ぀たり ポむントを通じお、キヌが「プヌル」である倀を取埗したす



Katyaに぀いお
玄䞀週間、私は圌女に手玙を曞いたり電話したりしたせんでした。 圌女が最初に電話するかどうかを確認するこずにしたした。 それはカペットでした、それは困難でした、私は苊しめられたした、しかし、私は圌女の呌び出しを埅っおいたした、私は圌女が本から芏則を砎るこずを望みたした。

その結果、あきらめたした。 私は圌女に手玙を曞き、映画通に呌ばれた。 圌女は、今日はできないず蚀った。 匕っ越したす 圌女は移動の助けを拒吊したした。



少し前に走っお、「もう電話しないで、もう曞いおはいけない!!!!」ずいう同じテキストメッセヌゞの埌に、VKの私は圌女が2幎間䜏んでいる友人を誘い、カティアを返すのを助けたず蚀いたす。 。 だから、圌女の友人は、私が電話しなかった週の間、カティアは非垞に心配しおいお、私からの電話を埅っおいたず蚀いたした。 圌女はたた、最初のデヌトの埌、カティアは文字通り喜びで茝いたず蚀いたした。 圌女はたた、誘惑の本を読んだこずがないず付け加えたした。



カスタム関数



倉数内のhtmlコヌドを゚スケヌプする必芁がありたす。 これを行うには、関数を远加したす。



 funcMap := template.FuncMap{ "noescape": func(s string) template.HTML { return template.HTML(s) }, }
      
      





すべおのナヌザヌ定矩関数はmakeTemplateでコンパむルされたす 。 次のように䜿甚したす。



 {{noescape .Lang.htmlText}}
      
      





Katyaに぀いお
3月8日に近づいおいた。 カティアはただ私ず䌚いたくなかった。 そしお、私は本圓に圌女を祝犏したいず思っおいたした。 最埌に、私は質問に端を投げた。 3月8日に䌚うか、二床ず電話したせん。 私たちは私ず䞀緒に䌑日を祝うこずに同意したした。



私は圌女の奜きな花やワむンなどを買いたした。䞀日䞭圌女ず過ごしたかったのですが、圌女は倕食の準備ができおいたせんでした。 驚いたこずに、6時に圌女は぀いに準備が敎いたした。 私は圌女をタクシヌず呌んだ。


範囲



範囲は、カヌドの解析に䜿甚されたす。 ここからの䟋を瀺したす 。



 {{range $k, $country := .Countries}} <option value='{{$k}}' {{if eq $k $.MyCountry}} selected {{end}}>{{$country}}</option> {{end}}
      
      





コヌドから、おそらく䜕が起こっおいるのかが明らかです。 しかし、$ .MyCountryには特に泚意を払いたいず思いたす。 $を远加しない堎合、.MyCountryパラメヌタヌぞのアクセスはありたせん。 最初は、このこずをよく忘れお、䜕が悪いのかず長い間考えおいたした。 範囲倖の堎合、MyCountryぞのアクセスは{{.MyCountry}}を介しお再床取埗されたす



Katyaに぀いお
私は到着し、花、プレれントを莈りたした。 圌はワむンのボトルを開けたした。 圌女はモニタヌの1぀で私の叀いPHP゜ヌスを芋たした。 圌女は尋ねた-「これは䜕」 私はブロックチェヌンに぀いお、Dcoinが利益を埗るための人々の自然な欲求「゜ファから立ち䞊がらない」のおかげで、䜕癟䞇人もの心を぀かむこずができ、普通の通貚を分散通貚にスムヌズに眮き換えお、排出が停止し、透明性のある新しい䞖界ができるこずに぀いお話したした金融システム。 カティアは䜕も理解したせんでした。 それから圌らはキスをしお映画を芋た。 突然、ワむンがなくなり、私は圌女がもっず欲しいかず尋ねたした、圌女は圌女が欲しいず蚀いたした。 私は店に行きたした。



倉数



テンプレヌトに独自の倉数を䜜成できたす。 ここからの䟋を瀺したす 。



 {{range $i, $pageType := .PagesArray}} {{$counter := ""}} {{if eq $pageType "funders"}} {{$counter := " <span class='count h6 bg-grey-dark white'>{{$.ProjectCountFunders}}</span>"}} {{else if eq $pageType "comments"}} {{$counter := " <span class='count h6 bg-grey-dark white'>{{$.ProjectCountComments}}</span>"}} {{end}} {{$counter}} {{end}}
      
      





この䟋では、新しい倉数$カりンタヌが䜜成され、条件に応じお倀が割り圓おられ、その結果が䞋に衚瀺されたす



および/たたは



および/たたはの仕事の論理は、私にずっおはやや珍しいこずが刀明したした。

䟋



 {{if and (eq .Start 1) (ne .BlockId 1) (gt .UserId 0)}}
      
      





.Start == 1および.BlockId= 1および.UserId> 0の堎合



 {{if or (eq .Start 1) (ne .BlockId 1) (gt .UserId 0)}}
      
      





.Start == 1たたは.BlockId= 1たたは.UserId> 0の堎合



JSコヌド



別の問題にはかなり時間がかかりたした。 コントロヌラで䜕らかの皮類のjs-codeを生成する必芁がある堎合、たずえば



 var x="1";
      
      





次に、{{。SomeJSCode}}を介しおテンプレヌトに出力するず、次のようになりたす



 "var x=\"1\";"
      
      





解決策1



noescapeはここでは圹に立ちたせん。 新しいカスタム関数を远加する必芁がありたす。



 "js": func(s string) template.JS { return template.JS(s) },
      
      





そしお、テンプレヌトで{{js .SomeJSCode}}を䜿甚したす



決定2



コントロヌラヌで、template.JSタむプを䜿甚したす。 以前に倉数文字列を倉換した堎合template.JSSomeJsStringVariable。 この堎合、テンプレヌト自䜓で{{.SomeJSCode}}を衚瀺する必芁がありたす



Katyaに぀いお
圌は戻り、ワむンを飲んだ。 圌はマッサヌゞオむルをもらいたした。 箄1時間マッサヌゞを行いたした先日、私はこのビデオをここで特別に勉匷したした 。 マッサヌゞはスムヌズにより芪密なものに倉わり、その結果、圌女ぱンドルフィンの急激な攟出を経隓し、その盎埌に圌女は眠りたいず蚀った。 「それは䞀䜓䜕だ」私は思った。 䞀般的に、寝たした。

次の郚分に続きたす。



おわりに



次の蚘事では、デヌタベヌス、シグナルを介したアプリケヌションのスムヌズな完了、ブロックチェヌンからのブロックの凊理、GOでの暗号化ずJSでの埩号化、gomobileの倉曎方法、通知の远加、iOSおよびAndroidアプリケヌションのバックグラりンドでの䜜業に぀いお説明したす。



All Articles