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

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

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

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

Q&A

解決済

1回答

360閲覧

Goの構造体で(*animal)(nil)などがわからない

退会済みユーザー

退会済みユーザー

総合スコア0

Go

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

0グッド

0クリップ

投稿2019/11/09 16:12

以下のようなサンプルコードがあります。

go

1package animal 2 3type Animal interface { 4 Name() string 5} 6 7type syncer struct { 8} 9 10var _ Animal = (*animal)(nil) 11 12func (a *animal) Name()string { 13... 14}

このとき、なぜ

var _ Animal = (*animal)(nil)と、わざわざ構造体の小文字(他のパッケージには使えないように)しているのでしょうか。

これはstatic classをGoで実装しているようなものなのでしょうか?

このパターンについて、詳しくおしえてください。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

構造体を小文字で宣言すると他のパッケージから見えないというものです。
この例ではAnimalインターフェースのみ公開している様ですね。

var _ Animal = (*animal)(nil)

この行は実行時に意味はありません。
何のためかというとコンパイル時に代入によってanimal構造体がAnimalインターフェースと互角が取れている事を確認するためのものです。
編集により、互換が崩れてしまったりするとコンパイル時にエラーが出て教えてくれます。

投稿2019/11/10 02:03

nobonobo

総合スコア3367

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問