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

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

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

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

Q&A

解決済

2回答

3221閲覧

Go言語において、html上で画像が出力されません

marny12345

総合スコア17

Go

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

0グッド

0クリップ

投稿2020/04/24 14:00

ディレクトリ構造 dev/templetes/index.html /test.jpg /main.go

go

1//main.go 2package main 3 4import ( 5 "flag" 6 "fmt" 7 "html/template" 8 "log" 9 "net/http" 10 "path/filepath" 11 "sync" 12 "time" 13) 14 15type templateHandler struct { 16 once sync.Once //一回だけコンパイル? 17 filename string 18 templ *template.Template 19} 20 21func (t *templateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { 22 t.once.Do(func() { 23 t.templ = 24 template.Must(template.ParseFiles(filepath.Join("templates", t.filename))) //htmlのあるフォルダ指定 25 }) 26 t.templ.Execute(w, nil) 27 28 // logの代わり 29 fmt.Print(time.Now()) 30 fmt.Printf(" path: " + r.URL.Path + "\n") 31} 32 33func main() { 34 var addr = flag.String("addr", ":8080", "アプリケーションのアドレス") 35 http.Handle("/", &templateHandler{filename: "index.html"}) 36 log.Println("Webサーバを開始します。ポート:", *addr) 37 if err := http.ListenAndServe(*addr, nil); err != nil { //ListenAndServeメソッドでポート8080を使いWebサーバを開始する 38 log.Fatal("ListenAndServe:", err) 39 } 40}

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <title>テスト</title> 5 </head> 6 <body> 7 <img src="test.jpg" width="100" height="100" alt="テスト"> 8 </body> 9</html>

このソースコードでlocalhost:8080にアクセスしたら、画像が出力されません。
imageパッケージ等色々調べましたがいまいち理解ができません

ソースコードのミス、使わないといけないパッケージ等教えてもらえると幸いです

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

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

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

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

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

guest

回答2

0

自己解決

ginをつかってソースコードを全体的に変更しました。router.Staticを使って静的ファイルを通しました

go

1package main 2 3import ( 4 "net/http" 5 6 "github.com/gin-gonic/gin" 7) 8 9func main() { 10 router := gin.Default() 11 router.LoadHTMLGlob("templates/*.html") 12 router.Static("assets", "./assets") 13 14 router.GET("/", func(ctx *gin.Context) { 15 ctx.HTML(http.StatusOK, "index.html", gin.H{}) 16 }) 17 dbInit() 18 router.Run(":8080") 19} 20

assetsにpngなりcssを入れて、html側で、localhost:8080/assets/~~.pngと指定します

投稿2020/04/26 08:41

編集2020/04/26 08:56
marny12345

総合スコア17

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

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

m.ts10806

2020/04/26 08:50 編集

という内容では誰にもどう解決したか伝わらないですよ。 >https://teratail.com/help#resolve-myself >また後から読む人のためにも、具体的な解決手順を記載してください。
guest

0

こういう記事とか読んでいると、静的ファイルの置き場所は「resources」配下なんじゃないかなと思うんですが、どうなのでしょうか。
試してみてください。

あ、いやもっと読んでいくべきでした。
同じ記事内で反映されるコードがあって、

go

1http.Handle("/resources/", http.StripPrefix("/resources/", http.FileServer(http.Dir("resources/"))))

が入ってるから、単にルールを自分で決めるだけですね。
ちゃんとサーバー側で「ここで静的ファイルが保管されている」ことを教えてないといけません。

投稿2020/04/24 15:06

編集2020/04/24 15:09
m.ts10806

総合スコア80875

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

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

marny12345

2020/04/26 08:41

自己解決しました。すみません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問