I am thoroughly frustrated. I have a file named main.html that references a 
css and a js file.

Here's the relevant portion.
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="css/main.css">
    <script type="text/javascript" src="js/file.js" ></script>
</head>

This is in a subdirectory of my GOPATH/src, named learn/webpages, and the 
css and js files are in subdirectories of that, i.e., 
learn/webpages/css/main.css and learn/webpages/js/file.js 

When I open the file main.html in my Chrome browser, it behaves just as I'd 
expect it to.

When I try to serve it up via a go program, main.go in the learn directory 
(i.e., learn/main.go) I can't for the life of me figure out what magic 
configuration of http.HandleFunc, http.FileServer, http.Handle, 
http.StripPrefix, and http.Dir to use to get these files to load. I don't 
want to use absolute paths, since the location of the base directory will 
change over time.

Here's the directory structure of the project. I've put a version of 
file.js and main.css into three different places (with slightly different 
contents, so I can tell which one loads, if any does). The ones I want are 
in the appropriate subdirectories of the webpages directory.

[learn]
[js]
file.js
[webpages]
[css]
main.css
[js]
file.js
main.css
main.html
file.js
main.css
main.exe
main.go

Key: [xxx] is a directory and its contents are indented below it.

The following does not work, but it's the direction I've been trying. The 
func handleRoot loads the web page, but I can't figure out how to access 
the css and js files. And when the documentation refers to the "current 
directory" is that going to be learn, where main.exe is running, or 
learn/webpages where main.html lives?


// main.go
package main

import (
"fmt"
"net/http"
)

func handleRoot(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "webpages/main.html")
}

func main() {
http.HandleFunc("/", handleRoot)

fs := http.FileServer(http.Dir("webpages"))
http.Handle("/webpages/", http.StripPrefix("/webpages/", fs))

fmt.Println("listening on port 8899")
http.ListenAndServe(":8899", nil)
}


I've looked at lots of webpages that purport to explain how to do this, but 
haven't yet figured any of them out. Any help will be greatly appreciated.


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to