Go Path Linux<->Windows
Goを初めてばかりでlinuxのファイル操作アプリを作成したときにwindowsで試した時はエラーが出たのでlinuxとwindowsで自由にパス変換ができればいいなと思い、関数を作成してみました。
func ToValidPath(path string) (string, error) { fullPath, err := filepath.Abs(path) if err != nil { return "", err } list := strings.Split(fullPath, "/") if runtime.GOOS == "windows" { validPath := filepath.Join(list...) return validPath, nil } else { validPath := "/" + filepath.Join(list...) return validPath, nil } }
Go json<->map
今回はGoでJSONとmapの相互変換をやっていきます。
JSON -> map
func JsonToMap(jsonstr string) (map[string]interface{}, error) { mapping := make(map[string]interface{}) err := json.Unmarshal([]byte(jsonstr), &mapping) if err != nil { return mapping, err } return mapping, nil }
json.Unmarshal([]byte(jsonstr), &mapping)でstringをbyteにし、メソッド内で作成したmapの中に代入しています。
map -> JSON
func MapToJson(m map[string]interface{}) (string, error) { bytes, err := json.Marshal(m) if err != nil { return "", err } return string(bytes), nil }
bytes, err := json.Marshal(m)でmapをbyte型に代入しています。
使ってみる
func main() { // json文字列を定義 s := `{ "Name": "mike", "Age": 2 }` m, _ := JsonToMap(s) fmt.Println(m) json, _ := MapToJson(m) fmt.Println(json) }
結果
map[Age:2 Name:mike] {"Age":2,"Name":"mike"}
Go int型
今回はint型全般を紹介していきます。 int型には8種類の型が存在します。コメントに代入できる最小、最大を書いてます。
var ( i8 int8 = 11 // -128 127 i16 int16 = 22 // -32768 32767 i32 int32 = 33 // -2147483648 2147483647 i64 int64 = 44 // -9223372036854775808 9223372036854775807 ui8 uint8 = 55 // 0 255 別名byte型 ui16 uint16 = 66 // 0 65535 ui32 uint32 = 77 // 0 4294967295 ui64 uint64 = 88 // 0 18446744073709551615 ) fmt.Println("i8: ", i8) fmt.Println("i16: ", i16) fmt.Println("i32: ", i32) fmt.Println("i64: ", i64) fmt.Println("ui8: ", ui8) fmt.Println("ui16: ", ui16) fmt.Println("ui32: ", ui32) fmt.Println("ui64: ", ui64) n := 11 fmt.Printf("type=%T value=%v", n, n)
結果
i8: 11 i16: 22 i32: 33 i64: 44 ui8: 55 ui16: 66 ui32: 77 ui64: 88 type=int value=11
:= を使用して定義して場合はint型になります。:=は整数リテラルといいます。 uint8はbyte型ともいい、バイト処理をする場合なんかに使用します。
html 基本パーツ
今回はhtmlを初めて触ったので基本パーツとかを簡単にまとめて行こうかなと思います。 参考資料はudemyのThe Web Developer Bootcampコースです。
簡単パーツ
h タグ
<h1>h1 tag</h1> <h2>h2 tag</h2> <h3>h3 tag</h3> <h4>h4 tag</h4> <h5>h5 tag</h5> <h6>h6 tag</h6>
p タグ
<p>p tag</p>
a タグ
<a href="URL">リンク先へ</a>
img タグ
<img src="画像のURLまたはパス">
ol タグ
<ol> <li>HTTP Requests</li> <li>IP Address</li> <li>Servers</li> </ol>
ul タグ
<ul> <li>list 1</li> <li>list 2</li> <li>list 3</li> </ul>
table タグ
<table border="1"> <thead> <th>Name</th> <th>Age</th> <th>Breed</th> </thead> <tbody> <tr> <td>Rusty</td> <td>2</td> <td>Mutt</td> </tr> <tr> <td>Wyatt</td> <td>13</td> <td>Golden</td> </tr> </tbody> </table>
form タグ編
formタグはログイン画面などで入力した文字などをリクエスト先に送信する際に使用する。 タグにはたくさんの属性があり、属性はkeyとvalueで指定することができる。入力したテキストなどをリクエストで送信する際に属性を指定することでリクエストの内容を変更することができる。
textarea タグ
<form> <textarea name="paragraph" rows="8" cols="80"></textarea> <button type="submit">go!</button> </form>
リクエスト内容:paragraph=abc rowsとcolsでテキストエリアの大きさを調整できる
select タグ
<form> <select name="color"> <option value="red">RED</option> <option value="yellow">YELLOW</option> <option value="BLUE">blue</option> </select> <button type="submit">go!</button> </form>
リクエスト内容:color=red
radio button タグ
<form> <label for="dogs">Dogs:</label> <input name="petChoice"id="dogs" type="radio" value="DOGS"> <label for="cats">Cats:</label> <input name="petChoice"id="cats" type="radio" value="CATS"> <button type="submit">go!</button> </form>
リクエスト内容:petChoice=CATS
input タグ
<form> <label for="username">Email:</label> <input id="username"type="email" name="username" placeholder="email" required> <label for="password">password:</label> <input id="password"type="password" name="password" placeholder="password" required> <button type="submit">go!</button> </form>
リクエスト内容:username=test%40gmal.com&password=pass required: 入力しないとフォームでリクエストできない type="email": emailの書式じゃないと認識されない placeholder="email": テキストフィールドに薄く文字が出る : 今はあまり関係ないがあとあと使用する。id="password"とfor="password"で結びつけている。
Go interface 変数編
interfaceとは
interfaceとはなんでも入れられる変数の型です。他にも用途はありますが今回はなんでも入れられる変数として使用する時にどんな感じに使うかまとめて行きます!
定義、代入
package main import "fmt" func main() { var i interface{} // interface型を定義 i = 1 // int fmt.Println("int: ", i) i = 1.1 // float64 fmt.Println("float64: ", i) i = "文字" // string fmt.Println("string: ", i) i = 0x01 // byte fmt.Println("byte: ", i) }
結果
int: 1 float64: 1.1 string: 文字 byte: 1
型変換
interfaceは全ての型と互換性があるため、全ての型に変換することができます。それを型アサーションといいます。やってみましょう!
package main import "fmt" func main() { var i interface{} = "english" str, ok := i.(string) fmt.Println("str: ", str, ok) float, ok := i.(float64) fmt.Println("float: ", float, ok) intger, ok := i.(int) fmt.Println("int: ", intger, ok) }
結果
str: english true float: 0 false int: 0 false
型判定
interfaceの型判定はswitch文を使用します。
package main import "fmt" func main() { var i interface{} = "english" switch v := i.(type) { case string: fmt.Println("string: ", v) case int: fmt.Println("int: ", v) case float64: fmt.Println("float64: ", v) default: fmt.Println("default: ", v) } }
結果
string: english
今日はここまでとします!
Go クラス 基本
最近go言語を使い始めて、なんとなく書けるようになったのでそろそろクラスみたいな書き方をやっていこうと思い、ここに記しておきます!
とりあえず書いてあとで細かく説明していきます。
クラス定義
クラスに紐ずくメソッドは上記のように定義します。
func (変数名 クラス名) 関数名 リターンする値 {
処理
}
となります。goは関数の中でプロパティの値を変更させる場合にはクラス名の横にを付けます。これはインスタンス変数のアドレスを指しています。アドレス変数の中身を変更することで実際の値を変更することができます。対してプロパティの中身を変更しない場合はは使用しなくて良いです。
インスタンス作成
インスタンス作成は
変数名 := クラス名{プロパティ名: 値, .....}
となります。
今回はとりあえずここまでにします。