備忘録

備忘録

Linuxに最新版のGoをインストールする方法

Ⅰ. はじめに

タイトルの通り「Ubuntuに最新版のGoをインストールする方法」です。

Ⅱ. やり方(Ubuntu

1. 以下のコマンドを実行する
add-apt-repository ppa:longsleep/golang-backports
apt-get update
apt-get install golang-go
2. 環境変数を設定する

~/.bash_profile

export GOPATH=~/go  
export PATH=$GOPATH/bin:$PATH
source ~/.bash_profile
3. Go を実行する
$ go version
go version go1.12.8 linux/amd64

Ⅲ. やり方(CentOS

1. 以下のコマンドを実行する

※非公式リポジトリです

rpm --import https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-REPO
curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee /etc/yum.repos.d/go-repo.repo
yum install golang
2. 環境変数を設定する

~/.bash_profile

export GOPATH=~/go  
export PATH=$GOPATH/bin:$PATH
source ~/.bash_profile
3. Go を実行する
$ go version
go version go1.12.9 linux/amd64

GoでJSONをシリアライズ、デシリアライズする方法

Ⅰ. はじめに

タイトルの通り「GoでJSONシリアライズ、デシリアライズする方法」です。

Ⅱ. シリアライズ(型あり)

サンプルプログラム
package main

import (
  "encoding/json"
  "fmt"
)

type Book struct {
  Id         int      `json:"id"`
  Title      string   `json:"name"`
  Categories []string `json:"categories"`
}

func main() {
  book := new(Book)

  book.Id = 1
  book.Title = "title001"
  book.Categories = []string{"category001", "category002", "category003"}

  // jsonBytes, _ := json.Marshal(book)
  jsonBytes, _ := json.MarshalIndent(book, "", "  ")
  jsonStr := string(jsonBytes)

  fmt.Println(jsonStr)
}
実行結果
{
  "id": 1,
  "name": "title001",
  "categories": [
    "category001",
    "category002",
    "category003"
  ]
}

Ⅲ. シリアライズ(型なし)

package main

import (
  "encoding/json"
  "fmt"
)

func main() {
  book := map[string]interface{}{
    "id":         1,
    "title":      "title001",
    "categories": []string{"category001", "category002", "category003"},
  }

  // jsonBytes, _ := json.Marshal(book)
  jsonBytes, _ := json.MarshalIndent(book, "", "  ")
  jsonStr := string(jsonBytes)

  fmt.Println(jsonStr)
}
実行結果
省略

Ⅳ. デシリアライズ(型あり)

サンプルプログラム
package main

import (
  "encoding/json"
  "fmt"
)

type Book struct {
  Id         int      `json:"id"`
  Title      string   `json:"name"`
  Categories []string `json:"categories"`
}

func main() {
  str := "{\"id\":1,\"name\":\"title001\",\"categories\":[\"category001\",\"category002\",\"category003\"]}"

  data := Book{}
  json.Unmarshal([]byte(str), &data)
  fmt.Printf("%+v", data)
}
実行結果
{Id:1 Title:title001 Categories:[category001 category002 category003]}

Ⅴ. デシリアライズ(型なし)

サンプルプログラム
package main

import (
  "encoding/json"
  "fmt"
)

func main() {
  str := "{\"id\":1,\"name\":\"title001\",\"categories\":[\"category001\",\"category002\",\"category003\"]}"

  var data map[string]interface{}

  json.Unmarshal([]byte(str), &data)

  fmt.Println(data["id"])
  fmt.Println(data["categories"])
  fmt.Println(data["categories"].([]interface{})[0])
}
実行結果
1
[category001 category002 category003]
category001

Goでexeファイルビルド時に自動的にアイコンを設定する方法

Ⅰ. はじめに

タイトルの通り「Goでexeファイルビルド時に自動的にアイコンを設定する方法」です。

Ⅱ. やり方

1. rsrc をダウンロードする

https://github.com/akavel/rsrc/releases

2. rsrc を利用して syso ファイルを作成する
rsrc -ico icon.ico -o resource.syso
3. ビルドする
go build -o out.exe

実行結果

f:id:kagasu:20190828152929p:plain

GoでHelloWorldする方法

Ⅰ. はじめに

タイトルの通り「GoでHelloWorldする方法」です。

Ⅱ. やり方

1. Go をダウンロードする

https://golang.org/

2. 初期化する
go mod init main
3. サンプルプログラムを書く

main.go

package main

import "fmt"

func main() {
  fmt.Println("Hello world!")
}
4. 実行する
go run main.go

実行結果

Hello world!

RustでHelloWorldする方法

Ⅰ. はじめに

タイトルの通り「RustでHelloWorldする方法」です。

Ⅱ. やり方

1. Rustをインストールする

https://www.rust-lang.org/tools/install

2. 新規パッケージを作成する
cargo new hello-rust
3. サンプルプログラムを書く

src/main.rs

fn main() {
  println!("Hello world!");
}
4. ビルドする

cargo runを実行すると自動でビルドされる為、手動ビルドは必須ではない。

cargo bulid
// cargo build --release
5. 実行する
cargo run
// cargo run --release

実行結果

Hello world!