These two deal with different aspects of http request/response lifecycle.
http.TimeoutHandler is used to limit execution time of the http.Handler. it will return
503 status code to the client, if
http.Handler doesn't finish in stipulated time.
WriteTimeout deals with network I/O timeout, i.e time required to read/write request/response body to your client respectively.
http.TimeoutHandler handles the case where your handler (code block that handles http request) need to be complete in set amount of time, by wrapping your original handler. while
http.ReadTimeout is used when you dont want to wait for network read/write of request/response indefinitely.