Go言語学習の6日目です。
今回は並列処理の勉強のために、チャットアプリを作成しました。
ポインタを引数とする関数
// 値を変更する関数
func modifyValue(p *int) {
*p = 20 // ポインタを使って、元の変数の値を変更
}
func main() {
a := 10
fmt.Println("Before:", a) // 出力: Before: 10
modifyValue(&a) // aのアドレスを渡す
fmt.Println("After:", a) // 出力: After: 20
}
状右記のようなコードを例として、modifyValueの引数のpの型の役割をきちんと理解しました。modifyValueは*int型のポインタを引数にしています。ポインタを引数として使用することで、関数内で変数の値を直接操作することができ、効率的なメモリ使用とデータの可変性を実現できる。
*の使いどころとして、(1)変数に付けてポインタを表現する,(2)intやstringなどの型に付けて型のポインタを表現する。
この二つが混在していましたが、今日で上手く整理出来ました。
構造体のエクスポート
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
上記のようなPerson構造体があったとき、フィールド名が大文字か小文字かで挙動が変わります。大文字の時はエクスポートされたフィールドで、小文字の時はエクスポートされていないフィールドです。エクスポートされたフィールドはパッケージ外からアクセスすることが出来ます。JSON操作を行うとき`encoding/json'パッケージを使いましたが、これはパッケージ外からのアクセスです。Person構造体のフィールドを大文字で始めないといけません(自分はこれで詰まりました)