- 1. 【Go】構造体サンプルメモ
- 2. 良さげなクロスプラットフォーム開発言語《v》のメモ(Go,Nim,Rustと少し比較)
- 3. 【Go】マップサンプルメモ
- 4. Go + Fyne で GUI アプリケーション
- 5. python初心者がIT企業にインターンしてみた[3日目 雲行きが・・・]
- 6. [geth改造]トランザクションが送られてきた時だけブロックを生成する
- 7. Goroutineを雑多にまとめる
- 8. seek難しい
- 9. package main
- 10. Go(golang)/ginのAPIでnullableなjsonを返す
- 11. iPhoneやiPadのアプリで無料で広告ブロックする方法
- 12. GoとMongoDBとProtocol Buffersでの小数の扱い
- 13. Golang vs. Python – Is Golang Better Than Python?
- 14. 【Hyperledger Fabric v2.0】PrivateDataを使ってみよう
- 15. Go言語でnewとmakeを使ってみた
- 16. アプリ実装者のためのGo1.13からのエラーとの付き合い方
- 17. 【Go】配列のサンプルメモ
- 18. 【Go】スライスのサンプルメモ
- 19. Go + echo + Docker + VSCode + Remote Containers で開発環境の構築 (ホットリロードとステップ実行対応)
- 20. Mac環境でgodocをインストールできなかった時にしたこと
【Go】構造体サンプルメモ
## サンプル
“`go
package mainimport (
“fmt”
“encoding/json”
)func main() {
type location struct {
Name string
Lat float64
Long float64
}// JSON 変換するためにキーを大文字にしておく必要がある
locations := []location {
{Name: “Brandbury Landing”, Lat: -4.5895, Long: 137.4417},
{Name: “Columbia Memorial Station”, Lat: -14.56684, Long: 175.472636},
{Name: “Challenger Memorial Station”, Lat: -1.9462, Long: 354.4734},
}// [{Brandbury Landing -4.5895 137.4417} {Columbia Memorial Station -14.56684 17
良さげなクロスプラットフォーム開発言語《v》のメモ(Go,Nim,Rustと少し比較)
# 序
GoとNimは趣味でそれなりに触って、Rustは仕事にならない限り触らないことにしている自分が、v言語をチラ見してみたのでメモを残しておく。 バージョン0.1台とまだまだ若い言語なので参考程度に。
v言語:
https://vlang.io/cf.なるほど。
[Rustを業務で1年使ってみてわかったこと](https://qiita.com/AtsukiTak/items/0ecba19f3518c23d2bf3)# v言語を三行で
– v言語はGoをリスペクトしてる型あり言語。もともとvはGoで書かれていた。
– Nimと同様にC言語をバックエンドとしてバイナリ化する。vは、Nim並みにコンパイルは早くバイナリサイズは小さく。
– Rustとは異なり言語仕様はシンプルに。モダンなところはRustにも学ぶ(関数定義はfuncではなくfnだし…)。# v言語の使い所、思ったところを三行で
– 公式サイトとしては、v言語をクロスプラットフォームなクライアント側のアプリ作りに使って欲しい模様。出自からも当座はクライアント側一択か。
– 実用するには、C/C++(/ob
【Go】マップサンプルメモ
## サンプル
“`go
package mainimport (
“fmt”
)func main() {
mapTest := make(map[string]int)mapTest[“a”] = 1
mapTest[“b”] = 2fmt.Println(mapTest[“a”]) // 1
fmt.Println(mapTest) // map[a:1 b:2]
fmt.Println(mapTest[“c”]) // 0 — > 存在しないキーのときは値の型のゼロ値が返るfor k, v := range mapTest {
fmt.Println(k, v) // a 1
}// 存在チェック
// マップ内に指定のキーに対する値が存在しているかは、戻り値を2つ受けて、2番目の戻り値で判断することができる
// https://blog.y-yuki.net/entry/2017/04/26/000000
_, ok := mapTest[“a”]
fmt.Println(ok) // true_, ok
Go + Fyne で GUI アプリケーション
Go の GUI ライブラリである Fyne について雑多にあれこれ紹介します.
# Fyne とは
Fyne は Go で GUI アプリケーションを作るためのライブラリです.
シンプルでわかりやすい, 簡単に綺麗なデザインが作れる, モバイル等も含めたクロスプラットフォームといった点を売りとしています.– 公式サイト
– https://fyne.io/
– GitHub リポジトリ
– https://github.com/fyne-io/fyne## 基本
インストール 〜 Hello world までは他の方が書いたいくつかの記事があるのでそちらを参照してください.
https://qiita.com/KanikoroRerere/items/e2dcc44e625849526015
https
python初心者がIT企業にインターンしてみた[3日目 雲行きが・・・]
昨日疲れすぎて投稿できんやったから今日投稿する
#衝撃の事実
今日も元気よく出勤。今日の昼飯は俺の好きなカレーパンだ。なんて呟いているおじさんを横目に、コーヒーを購入(俺かと思ったか)。
それはさておき、いつも通り朝の打ち合わせがあったが、そこでまさかの事実を聞かされる。「来週までに企画提案書を提出してね。あとその企画をクライアントにプレゼンしてもらうからよろしく。」
What a fork!!!(good placeより引用)##AIをつかったチャットボット 開発?
打ち合わせで企画をプレゼンすることになったのだが、その内容はAIを使ったチャットボット。それを聞かされて一日が始まったわけだが、何もわからないためまずチャットボットサービスの比較表を作った。会社にデータがあるため載せられないけど、軽く紹介しよう。###チャットボットとは?
チャットボットは人間が入力するテキストや音声に対して、自動的に回答を行うことで、これまで人間が対応していた「お問い合わせ対応」「注文対応」などの作業を代行することができる。(まるまるコピー)
https://ferret-plus.com/8
[geth改造]トランザクションが送られてきた時だけブロックを生成する
# 記事の内容
自分で勉強している時に空ブロックが大量に作られるのが煩わしかったので、トランザクションが送られてきた時だけブロックを生成するように改造しました。# 環境
geth:v1.9.8-stable
golang:1.13.3# gethのclone
今回使用したgethをcloneしてきます。
※当記事執筆時点ではmasterからダウンロードすると「unstable」のバージョンが落ちてきたので、安定版を指定して落としています。“`
git clone -b v1.9.8 https://github.com/ethereum/go-ethereum.git
“`# コードの修正(miner/worker.go)
該当のコードを修正します。
修正ソースは「miner/worker.go」の547行目から始まる「resultLoop」関数です。
まずは修正前のコードです。“` miner/worker.go
// resultLoop is a standalone goroutine to handle sealing result submitti
Goroutineを雑多にまとめる
Goroutineの文法を自分用メモとしてまとめる。
# sync.WaitGroup
複数のスレッドで並列処理を行う際、その全ての完了を確認するために使用できる。WaitGroupのカウンタを用いる。(Javaのjava.util.concurrent.CountDownLatchによく似ているらしい)
“`
// WaitGroupの値を作る
wg := &sync.WaitGroup{}// wgのカウントをインクリメント
wg.Add(1)
go func(wg *sync.WaitGroup) {
// wgのカウントをデクリメント
defer wg.Done()
処理
}
// カウントが0なら次に進める
wg.Wait()
処理
“`[注意] `Addされるカウントの合計 = Done()の合計個数`である必要あり
# チャネル
* 中身の個数が決まってるのが`bufferred channel`、決まっていないのが`unbufferred channel`。“`
// チャネルの作成
ch = make(chan in
seek難しい
こんなコードを書くとzipファイルがおかしいとなったのでメモ
“`
target, err := ioutil.TempFile(“”, “zip”)
if err != nil {
sentry.CaptureException(err)
log.Fatalln(err)
}
w := zip.NewWriter(target)
defer w.Close()
for _, client := range clients {
xlsx, err := run(client.ClientID)
if err != nil {
continue
}
defer xlsx.Close()
f, err := w.Create(fmt.Sprintf(“%d_item_error.xlsx”, client.ClientID))
if err != nil {
sentry.CaptureException(err)
log.Fatalln(err)
}
if _, err :=
package main
func main() {
http.HandleFunc(“/”, func(w http.ResponseWriter, r *http.Request) {
w.Write(“森っている”)
})log.Faltal(http.ListenAnd(“:8080”, nil))
}
Go(golang)/ginのAPIでnullableなjsonを返す
#状況
– 当たり前の機能だと思うかもしれないが少しハマった。
– [golangの仕様で変数にnullを代入できない。例えば`int`型であれば初期化した時点で0の値が初期値として設定される。](https://qiita.com/tenntenn/items/c55095585af64ca28ab5)“`
var n int
println(n)// 実行結果
0
“`
– これでどういう問題が発生するかというと構造体でも初期化した時点で勝手に0が入ってしまいnull値を表現できない。
– すると`gin`の`context`を使ってjson化した際にも、もちろんnull値が入らない。
– ***jsonでnullが返せない!***“`
package mainimport (
“time”“github.com/gin-gonic/gin”
)func main() {
r := gin.Default()
r.GET(“/”, func(c *gin.Context
iPhoneやiPadのアプリで無料で広告ブロックする方法
#参考にした記事
iPhoneのアプリで無料で「広告」を「消す」方法 ( 広告 ブロック iPhone iPad アプリ)
広告 ブロック iPhone LINE spotify スマートニュース グノシー うざい 消し方 多い 消す ios ipad みんはや ゲーム 広告消す chrome
# ブロックにはDNScloakというアプリを用います
https://github.com/s-s/dnscloak
https://github.com/DNSCrypt/dnscrypt-proxy
DNS cloakはgo製の dnscrypt2のラッパー。(どちらもOSSです)
ローカルにDNSサーバーを立てて、フィルターにリスト化された広告サーバーのURLのリクエストを返さないことで広告を遮断します。
アプリで流れる動画広告などは完全に遮断することができます。
広告のあった場所は空白になります。(空白の部分がないように整形してhtmlを返すことも技術的には可
GoとMongoDBとProtocol Buffersでの小数の扱い
MongoDB上で[`NumberDecimal()`](https://docs.mongodb.com/manual/core/shell-types/#numberdecimal)を使い`decimal`で小数を格納していたのだが、それを[“mongo-go-driver”](https://github.com/mongodb/mongo-go-driver)を介して`Decode()`する時に、`cannot decode 128-bit decimal into a float32 or float64 type`とエラーが出て困ったので、各々の小数周りの仕様を調べた。
それぞれの小数周りの仕様へのリンク集としても役立つはず。
## Go
Go上で小数に対応する型は、[Numeric typesの仕様](https://golang.org/ref/spec#Numeric_types)によると、`float32`と`float64`のよう。
## Protocol Buffers
“proto3″のLanguage Guideにある[Scalar Values T
Golang vs. Python – Is Golang Better Than Python?
In this tutorial we are going to make the comparison between Golang or Python, you will have the complete idea at the end of this tutorial which programming language between Python or Goland you should opt for your next software development project.
click here to read more
【Hyperledger Fabric v2.0】PrivateDataを使ってみよう
# はじめに
あけましておめでとうございます(ぇ
どーも、のぶこふです。## ICE BREAK
日本時間 2020/01/30(木)7:00頃 に HLF v2.0 が正式リリースされましたね。
私はGithubに張り付いていたのでリリースされた瞬間にTwitterで発信しましたが、
いかんせん私のフォロワーが少ないので、拡散するには力が及びませんでした。とまぁ、そんなことは置いておいて、
HLF v2.0 の目玉機能といえば
「Private Data」ですね(たぶん
※どんな変更点があるか等は、他の方がまとめてくださっているので、
そちらをご参考願います。ワタシ エイゴ シャベレマセーン
▼コチラとか
https://gakumura.hatenablog.com/entry/2020/01/30/180540「おいおい、のぶこふさんよぉ。Private Dataなら、昔からあったぜぇ?」
はい、そうです。ありました。
なんなら、使い方をまとめた記事も書きました。▼【Hyperledger Fabric】PrivateDataを使ってみよう
https
Go言語でnewとmakeを使ってみた
##はじめに
Go言語でnewとmakeを使い、違いを備忘のために記します。##環境
macOS Catalina 10.15.3
go1.13.3 darwin/amd64##1. makeを使う
以下はmakeを使用して、変数を初期化する例です。コードは一部抜粋します。“`sample.go
s := make([]int, 0)
m := make(map[string]int)
ch := make(chan int)fmt.Printf(“%T\n”, s)
fmt.Printf(“%T\n”, m)
fmt.Printf(“%T\n”, ch)
“`###[出力結果]
“`
[]int
map[string]int
chan int
“`##2. newを使う
以下はnewを使用して、変数を初期化する例です。コードは一部抜粋します。“`sample.go
var p *string = new(string)
var str = new(struct{})fmt.Printf(“%T\n”, p)
fmt.Printf(“%T\n”
アプリ実装者のためのGo1.13からのエラーとの付き合い方
# はじめに
[Go1.13から機能追加されたエラー](https://golang.org/doc/go1.13#error_wrapping)に関してキャッチアップがまだできていないアプリケーション開発者のための記事です。
# TL;DR
アプリケーション実装者は以下をすることで嬉しさを得られます。
* `fmt.Errorf(“%w”, err)` または `Unwrap() error`を実装したエラー型をカスタムエラーにする。
* `errors.Is`関数、`errors.As`関数を使いエラーハンドリングの受け口を実装する。Go1.12までのバージョンとの実装方法の比較は[Go 1.13時代のエラー実装者のお作法](https://qiita.com/shibukawa/items/e633e426a6e67ea2e830)の記事が非常に参考になります。
### 環境
“`
$ go version
go version go1.13.1 darwin/amd64
“`# ライブラリが提供するエラーとの付き合い方
## ライブラリが返すエラー値
【Go】配列のサンプルメモ
“`go
package mainimport (
“fmt”
)func main() {
// 配列の型
// [長さ] 要素型
// [長さ] 要素型 {要素の初期値..}// 配列の宣言
var arr1 [2]string
arr1[0] = “a”
arr1[1] = “b”
fmt.Println(arr1)// 配列初期化
arr2 := [2]string{“a”, “b”}
fmt.Println(arr2)// https://yttm-work.jp/lang/go/go_0005.html#head_line_03
var arr3 [2]string = [2]string{“a”, “b”}
fmt.Println(arr3)// 初期値で指定した要素の数が自動的に長さとなる
arr4 := […]string{“a”, “b”}
fmt.Println(arr4)
}
“`
【Go】スライスのサンプルメモ
“`go
package mainimport “fmt”
func main() {
// 配列
arr := [3]string{“a”, “b”, “c”}// スライス型の変数を宣言
var s1 []string
// スライス
s1 = arr[:]
fmt.Println(s1) // [a b c]// var を使わないVersion
s2 := arr[:]
fmt.Println(s2) // [a b c]// インデックスを指定
s3 := arr[1:2]
fmt.Println(s3) // [b c]s4 := arr[1:3]
fmt.Println(s4) // [b c]// append
s5 := append(s4, “d”, “e”)
fmt.Println(s4) // [b c]
fmt.Println(s5) // [b c d e]// 配列とスライスを同時に宣言
s6 := []string{“A”, “B”, “C”}
fmt.Println(s6)
Go + echo + Docker + VSCode + Remote Containers で開発環境の構築 (ホットリロードとステップ実行対応)
## 背景
– Go + echo で api サーバーを実装するにあたり開発環境を構築した際のメモ。
– Docker で動かしたい。
– VSCode の Remote Containers を試したい。
– ホットリロード欲しい。
– ステップ実行したい。## 成果物
– https://github.com/f-sugar/golang-docker## ホスト
– Docker 19.03.1
– docker-compose 1.24.1
– VSCode 1.42.0
– ms-vscode-remote.remote-containers 0.101.0## コンテナ内
– go 1.13.7
– realize 2.1
– delve 1.4.0
– echo 4.1.14## Dockerfile + docker-compose.yml 作成
“`Dockerfile:Dockerfile
FROM golang:1.13.7WORKDIR /go/src/app
ENV GO111MODULE=on
ENV GOPATH /go
Mac環境でgodocをインストールできなかった時にしたこと
以下コマンドでgodocをインストールしようとしたら
“`go
go get golang.org/x/tools/cmd/godoc
“``operation not permitted`が表示され、インストールできない。。。
[stackoverflowに似た現象](https://stackoverflow.com/questions/48617574/go-install-command-results-in-open-bin-palindrome-operation-not-permitted-in-m)に遭遇した人が。
以下手順で解決した。
“`
brew install go
mkdir Go
cd Go && mkdir bin pkg src
“`