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

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

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

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

Q&A

解決済

2回答

1593閲覧

goのサンプルコードのエラー

oyatsu8

総合スコア97

Go

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

0グッド

0クリップ

投稿2018/01/03 10:48

下記のページのサンプルで、
https://qiita.com/taizo/items/bf1ec35a65ad5f608d45
ターミナルからコードを実行しましたが、下記のようなエラーが出てしまいました。

server.go:22:19: too many arguments to conversion to http.HandlerFunc: http.HandlerFunc("/", handler)

goを先ほど始めた所で、
なぜ引数が多くなりすぎるのかが分かりません。

server01.go

go

1package main 2import( 3 "fmt" 4 "net/http" 5) 6 7func handler(w http.ResponseWriter,r *http.Request){ 8 fmt.Fprintf(w,"Hello,world") 9} 10 11func main(){ 12 http.HandlerFunc("/",handler) 13 http.ListenAndServe(":8080",nil) 14} 15 16

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

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

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

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

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

guest

回答2

0

ベストアンサー

既に自己解決されておられますが、http.HandlerFunc は関数ではなく型です。引数を型で取れる様にする事で独自の引数を渡す為の方法です。

go

1http.Handle("/", h)

この場合の h は、2つ渡す方法があります。一つは

go

1func f(ResponseWriter, *Request) { 2}

という関数形式、もう一つは

go

1type myhandler struct { 2} 3 4func (h *myhandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { 5}

の様なメソッドを持ったレシーバです。これをキャストする目的で使います。

http.Handle("/", http.HandlerFunc(f))

投稿2018/01/03 23:58

mattn

総合スコア5030

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

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

oyatsu8

2018/01/04 02:13

ありがとうございます。 引数を型で取るという意味がよくわからず、 引数に型がついているということでしょうか? 多分基本的な事が分かっていないような気がして来たのですが、 この本(Go言語によるWebアプリケーション開発 https://www.oreilly.co.jp/books/9784873117522/ )を読む前にしておいた方がいいことはあるでしょうか、、
mattn

2018/01/04 03:57

Go は duck typing という型システムを採用しているので、例えばインタフェースAが持つ関数と、別の型Bが同じシグネチャの関数を実装していれば「BはAを実装している」と見なす事が出来ます。直接的な継承関係は必要ありません。その際に型を明示する為にキャストを行いますが、その書き方が T(v) なので関数呼び出しに見えてしまいます。 ひとまずは Go Tour をやって見られるのが良いと思います。 https://tour.golang.org/welcome/1
oyatsu8

2018/01/04 05:58

どうもありがとうございます! Go Tourをやってみます。
guest

0

自己解決しました。

http.HandlerFunc("/",handler)

http.HandleFunc("/",handler)

にしたら動き出しました。

https://golang.org/search?q=HandleFunc
に書いてありました、、これを見てもなぜ、http.HandlerFuncではなく、http.HandleFuncだと動くのか、
意味が分からなかったので、
少し自分には敷居が高かったかもしれません。

投稿2018/01/03 11:12

編集2018/01/03 11:13
oyatsu8

総合スコア97

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問