質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

3679閲覧

構造体のintフィールドを未定義で初期化する方法

Palo_Punte

総合スコア21

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/08/08 08:14

aaa.goに構造体を定義し後から値を代入するため一旦値を未定義にしておきたい場合、何を入れておけば良いのでしょうか?
文字列の場合はnilにしておけばできたのですがint型の所にnilを入れると
cannot use nil as type int in field value
とエラーが出てしまいました

(aaa.goファイル) package hoge import ( ) type Person struct { Name string Age int Comment string } var Huga = [] *Person{ &Person{nil,nil,nil}, }

go1.13

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Goでは値はゼロ値で初期化されます。例えばint型であれば0、stringであれば""です。ポインタ型はnilをゼロ値としてとります。

以下のように、構造体の値を生成する際に、値を指定しなければゼロ値で初期化されます。

go

1package hoge 2 3import ( 4) 5 6type Person struct { 7 Name string 8 Age int 9 Comment string 10} 11 12var Huga = [] *Person{ 13 &Person{}, 14}

あるいは構造体の型をポインタ型にするか、です。

go

1type Person struct { 2 Name *string 3 Age *int 4 Comment *string 5} 6 7var Huga = [] *Person{ 8 &Person{}, 9}

投稿2020/08/08 08:22

d_tutuz

総合スコア730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Palo_Punte

2020/08/08 09:06

ありがとうございます var Huga = [] *Person{ &Person{"taro",,"hello"}, &Person{"jiro",,"good"}, } のようにageのみ後から代入するため未定義にしたい場合はどのようにすれば良いのでしょうか? ゼロ値の0を入れておく他ないのでしょうか?
maisumakun

2020/08/08 09:13

なにか適当な値が入っていたら困るのでしょうか?
d_tutuz

2020/08/08 09:33 編集

Goの変数は必ずゼロ値で初期化され、未定義という状態は取りえません。アプリケーション側でintのゼロ値(0)と有意の0を区別したい、のであるとするとアプリケーション側で初期化時に-1などとして、未定義の場合は-1、とみなすか、sql.NullInt64(https://golang.org/pkg/database/sql/#NullInt64)のような構造体(フィールドに Int64 int64 と Valid bool を保持)を用いて、フィールドの値が未定義の場合はValidがfalseというようにするのがよいのではないでしょうか。
Palo_Punte

2020/08/08 09:33

中身をブラウザ表示にさせたく、後から代入をした値はその値を表示、未定義のままなら何も表示しないようにしたかったです 例えばageですと後から0を代入したら0を表示、何も代入しない場合はブラウザに何も表示しないようにしたいので0を入れておくと0が代入されたか何も代入がないかがわからないのが困りました プログラムで代入があったかの場合分けをすれば良いのですが構造体で空を入れれるのであればもっとシンプルに書けるのではないかなと思い質問させていただきました
Palo_Punte

2020/08/08 09:37

>d_tutuz すいません 同時の投稿となってしまいました 未定義というのはできない仕様だったのですね それでしたらおっしゃられておりますような使わない数字を入れておくかsql.NullInt64を使うか考えてみようと思います ご回答ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問