diff options
| author | Russ Cox <rsc@golang.org> | 2023-12-07 13:07:31 -0500 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-12-08 03:23:52 +0000 |
| commit | 0a7f3785817805ba0861a5d107ffb23bd2c1ebea (patch) | |
| tree | edf3e75a7ab5972b0454e840c5cf5420e850e023 /_content | |
| parent | f74533cb3d222cb0987af4771426c45b6a8874d6 (diff) | |
| download | go-x-website-0a7f3785817805ba0861a5d107ffb23bd2c1ebea.tar.xz | |
cmd/golangorg: check for invalid or broken links in served HTML
Test that links are to /foo not https://go.dev/foo
and also check that the links actually point at real pages.
Manually fix problems that the test found.
For golang/go#37047.
Change-Id: I825eec3c2cadb9d259caff51cd893f3023ab533a
Reviewed-on: https://go-review.googlesource.com/c/website/+/548059
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Russ Cox <rsc@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to '_content')
59 files changed, 214 insertions, 220 deletions
diff --git a/_content/blog/1year.md b/_content/blog/1year.md index dcf08e24..7b08af67 100644 --- a/_content/blog/1year.md +++ b/_content/blog/1year.md @@ -54,7 +54,7 @@ a new package management tool, allows users to install and update external packages with a single command. [Gofmt](/cmd/gofmt/), the Go pretty-printer, now makes syntactic simplifications where possible. -[Goplay](/misc/goplay/), +Goplay, a web-based “compile-as-you-type” tool, is a convenient way to experiment with Go for those times when you don’t have access to the [Go Playground](/doc/play/). @@ -73,7 +73,7 @@ The debugging story has gotten better, too. Recent improvements to the DWARF output of the gc compilers make the GNU debugger, GDB, useful for Go binaries, and we’re actively working on making that debugging information more complete. -(See the [ recent blog post](/blog/2010/11/debugging-go-code-status-report.html) for details.) +(See the [recent blog post](/blog/debugging-go-code-status-report) for details.) It’s now easier than ever to link against existing libraries written in languages other than Go. @@ -95,7 +95,7 @@ and hundreds more on [Google Code](http://code.google.com/hosting/search?q=label and [GitHub](https://github.com/search?q=language:Go). On our mailing list and IRC channel you can find coders from around the world who use Go for their programming projects. -(See our [guest blog post](/blog/2010/10/real-go-projects-smarttwitter-and-webgo.html) +(See our [guest blog post](/blog/real-go-projects-smarttwitter-and-webgo) from last month for a real-world example.) Internally at Google there are several teams that choose Go for building production software, and we have received reports from other companies that are developing sizable systems in Go. @@ -117,7 +117,7 @@ many of which were driven by feedback from the community. [spec](/doc/go_spec.html#Slices) - The new built-in function `recover` complements `panic` and `defer` as an error handling mechanism. - [blog](/blog/2010/08/defer-panic-and-recover.html), + [blog](/blog/defer-panic-and-recover), [spec](/doc/go_spec.html#Handling_panics) - The new complex number types (`complex`, `complex64`, and `complex128`) simplify certain mathematical operations. diff --git a/_content/blog/2years.md b/_content/blog/2years.md index a7d5fb2e..f2fad728 100644 --- a/_content/blog/2years.md +++ b/_content/blog/2years.md @@ -22,7 +22,7 @@ and were gradually joined by dozens - and then hundreds - of programmers from the open source community. The Go Authors went on to produce lots of libraries, new tools, and reams of [documentation](/doc/docs.html). -They celebrated a successful year in the public eye with a [blog post](/blog/2010/11/go-one-year-ago-today.html) +They celebrated a successful year in the public eye with a [blog post](/blog/go-one-year-ago-today) last November that concluded "Go is certainly ready for production use, but there is still room for improvement. Our focus for the immediate future is making Go programs faster and more @@ -32,8 +32,8 @@ Today is the second anniversary of Go's release, and Go is faster and more stable than ever. Careful tuning of Go's code generators, concurrency primitives, garbage collector, and core libraries have increased the performance of Go programs, -and native support for [profiling](/blog/2011/06/profiling-go-programs.html) -and [debugging](http://blog.golang.org/2011/10/debugging-go-programs-with-gnu-debugger.html) +and native support for [profiling](/blog/profiling-go-programs) +and [debugging](/blog/debugging-go-programs-with-gnu-debugger) makes it easier to detect and remove performance issues in user code. Go is also now easier to learn with [A Tour of Go](/tour/), an interactive tutorial you can take from the comfort of your web browser. @@ -57,7 +57,7 @@ This year we issued several "[release](/doc/devel/release.html)" versions of Go that were more reliable and better supported than weekly snapshots. We also introduced [gofix](/cmd/gofix/) to take the pain out of migrating to newer releases. -Furthermore, last month we announced a [plan for Go version 1](/blog/2011/10/preview-of-go-version-1.html) - +Furthermore, last month we announced a [plan for Go version 1](/blog/preview-of-go-version-1) - a release that will be supported for years to come. Work toward Go 1 is already underway and you can observe our progress by the latest weekly snapshot at [weekly.golang.org](http://weekly.golang.org/pkg/). diff --git a/_content/blog/3years.md b/_content/blog/3years.md index ac077ee6..7a912d32 100644 --- a/_content/blog/3years.md +++ b/_content/blog/3years.md @@ -28,13 +28,13 @@ We added a package management system which eventually became the [go command](/cmd/go/). We also added -[support for Go on App Engine](/blog/2011/07/go-for-app-engine-is-now-generally.html). +[support for Go on App Engine](/blog/go-for-app-engine-is-now-generally). Over the past year we've also given [many talks](/doc/#talks), created an [interactive introductory tour](/tour/) and recently we added support for [executable examples in package documentation](/pkg/strings/#pkg-examples). Perhaps the most important development in the past year was the launch of the first stable version, -[Go 1](/blog/2012/03/go-version-1-is-released.html). +[Go 1](/blog/go1). People who write Go 1 programs can now be confident that their programs will continue to compile and run without change, in many environments, on a time scale of years. @@ -59,7 +59,7 @@ and of course running the [Go home page](/) on [App Engine](https://developers.google.com/appengine/docs/go/overview). Last year's -[Thanksgiving Doodle](/blog/2011/12/from-zero-to-go-launching-on-google.html) +[Thanksgiving Doodle](/blog/from-zero-to-go-launching-on-google) and the recent [Jam with Chrome](http://www.jamwithchrome.com/technology) site are also served by Go programs. @@ -68,11 +68,11 @@ Other companies and projects are using Go too, including [BBC Worldwide](http://www.quora.com/Go-programming-language/Is-Google-Go-ready-for-production-use/answer/Kunal-Anand), [Canonical](http://dave.cheney.net/wp-content/uploads/2012/08/august-go-meetup.pdf), [CloudFlare](http://blog.cloudflare.com/go-at-cloudflare), -[Heroku](/blog/2011/04/go-at-heroku.html), +[Heroku](/blog/go-at-heroku), [Novartis](https://plus.google.com/114945221884326152379/posts/d1SVaqkRyTL), [SoundCloud](http://backstage.soundcloud.com/2012/07/go-at-soundcloud/), [SmugMug](http://sorcery.smugmug.com/2012/04/06/deriving-json-types-in-go/), -[StatHat](/blog/2011/12/building-stathat-with-go.html), +[StatHat](/blog/building-stathat-with-go), [Tinkercad](https://tinkercad.com/about/jobs), and [many others](/wiki/GoUsers). diff --git a/_content/blog/appengine-scalable.md b/_content/blog/appengine-scalable.md index 16c42031..44b7c782 100644 --- a/_content/blog/appengine-scalable.md +++ b/_content/blog/appengine-scalable.md @@ -10,7 +10,7 @@ summary: How to build scalable web applications using Go with Google App Engine. --- -Back in May, we [announced](/blog/2011/05/go-and-google-app-engine.html) +Back in May, we [announced](/blog/go-and-google-app-engine) the Go runtime for App Engine. Since then, we've opened it up for everyone to use, added many new APIs, and improved performance. diff --git a/_content/blog/debug-gdb.md b/_content/blog/debug-gdb.md index a98e5fef..b635d515 100644 --- a/_content/blog/debug-gdb.md +++ b/_content/blog/debug-gdb.md @@ -11,7 +11,7 @@ summary: Announcing a new article about debugging Go programs with GDB. --- -Last year we [reported](/blog/2010/11/debugging-go-code-status-report.html) +Last year we [reported](/blog/debugging-go-code-status-report) that Go's [gc](/cmd/gc/)/[ld](/cmd/6l/) toolchain produces DWARFv3 debugging information that can be read by the GNU Debugger (GDB). Since then, work has continued steadily on improving support for debugging Go code with GDB. diff --git a/_content/blog/generics-next-step.md b/_content/blog/generics-next-step.md index d6ee2685..d82043e4 100644 --- a/_content/blog/generics-next-step.md +++ b/_content/blog/generics-next-step.md @@ -114,7 +114,7 @@ specific topics. If you find bugs in the generics type checker or the translation tool, they should be filed in the standard Go issue tracker at -[https://golang.org/issue](/issue). +[go.dev/issue](/issue). Please start the issue title with `cmd/go2go:`. Note that the issue tracker is not the best place to discuss changes to the language, because it does not provide threading and it is not diff --git a/_content/blog/gif-decoder.md b/_content/blog/gif-decoder.md index 038423dc..e82a1130 100644 --- a/_content/blog/gif-decoder.md +++ b/_content/blog/gif-decoder.md @@ -161,7 +161,7 @@ It's a nice technique in Go programming to couple a slice (`b.slice`) to an arra In this case, it means `blockReader` type's `Read` method never does any allocations. It also means we don't need to keep a count around (it's implicit in the slice length), and the built-in `copy` function guarantees we never copy more than we should. -(For more about slices, see [this post from the Go Blog](/blog/2011/01/go-slices-usage-and-internals.html).) +(For more about slices, see [this post from the Go Blog](/blog/go-slices-usage-and-internals).) Given the `blockReader` type, we can unblock the image data stream just by wrapping the input reader, diff --git a/_content/blog/go1.18beta2.md b/_content/blog/go1.18beta2.md index e81448cb..d9c14024 100644 --- a/_content/blog/go1.18beta2.md +++ b/_content/blog/go1.18beta2.md @@ -28,7 +28,7 @@ The easiest way to install it alongside your existing Go toolchain is to run: go1.18beta2 download After that, you can run `go1.18beta2` as a drop-in replacement for `go`. -For more download options, visit https://go.dev/dl/#go1.18beta2. +For more download options, visit [go.dev/dl/#go1.18beta2](/dl/#go1.18beta2). Because we are taking the time to issue a second beta, we now expect that the Go 1.18 release candidate will be issued in February, diff --git a/_content/blog/go1.7.md b/_content/blog/go1.7.md index 29c8f610..5cfbb525 100644 --- a/_content/blog/go1.7.md +++ b/_content/blog/go1.7.md @@ -21,7 +21,7 @@ This new back end generates more compact, more efficient code that includes optimizations like [bounds check elimination](https://en.wikipedia.org/wiki/Bounds-checking_elimination) and [common subexpression elimination](https://en.wikipedia.org/wiki/Common_subexpression_elimination). -We observed a 5–35% speedup across our [benchmarks](/test/bench/go1/). +We observed a 5–35% speedup across our benchmarks. For now, the new backend is only available for the 64-bit x86 platform ("amd64"), but we’re planning to convert more architecture backends to SSA in future releases. diff --git a/_content/blog/go12.md b/_content/blog/go12.md index bac9c8d5..04faae48 100644 --- a/_content/blog/go12.md +++ b/_content/blog/go12.md @@ -64,7 +64,7 @@ the new [`encoding` package](/doc/go1.2#encoding), [indexed arguments](/doc/go1.2#fmt_indexed_arguments) in `Printf` format strings, and some [convenient additions](/doc/go1.2#text_template) to the template packages. -As part of the release, the [Go Playground](http://play.golang.org/) has been +As part of the release, the [Go Playground](/play/) has been updated to Go 1.2. This also affects services that use the Playground, such as [the Go Tour](/tour/) and this blog. The update also adds the ability to use threads and the `os`, `net`, and diff --git a/_content/blog/gob.md b/_content/blog/gob.md index 0df4bfad..374d417e 100644 --- a/_content/blog/gob.md +++ b/_content/blog/gob.md @@ -294,7 +294,7 @@ and it does all the work. fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y) } -You can compile and run this example code in the [Go Playground](http://play.golang.org/p/_-OJV-rwMq). +You can compile and run this example code in the [Go Playground](/play/p/_-OJV-rwMq). The [rpc package](/pkg/net/rpc/) builds on gobs to turn this encode/decode automation into transport for method calls across the network. diff --git a/_content/blog/hello-china.md b/_content/blog/hello-china.md index ce88c878..2b7a1b9b 100644 --- a/_content/blog/hello-china.md +++ b/_content/blog/hello-china.md @@ -11,7 +11,7 @@ summary: "The Go home page and binary downloads is now available in China, at ht We are thrilled to announce that the content on -[golang.org](https://golang.org) is now available in mainland China through +[golang.org](/) is now available in mainland China through the name [https://golang.google.cn](https://golang.google.cn). The growing Go developer community in China can now directly access official documentation, technical articles, and binaries. diff --git a/_content/blog/heroku.md b/_content/blog/heroku.md index 86e9abbd..964b4cde 100644 --- a/_content/blog/heroku.md +++ b/_content/blog/heroku.md @@ -38,7 +38,7 @@ concurrent processes that communicate via passing messages. In Doozer, these processes are implemented as goroutines, and their communications as channel operations. In the same way that garbage collectors improve upon malloc and free, -we found that [goroutines and channels](/blog/2010/07/share-memory-by-communicating.html) +we found that [goroutines and channels](/blog/share-memory-by-communicating) improve upon the lock-based approach to concurrency. These tools let us avoid complex bookkeeping and stay focused on the problem at hand. We are still amazed at how few lines of code it took to achieve something diff --git a/_content/blog/introducing-gofix.md b/_content/blog/introducing-gofix.md index 6b2a77f4..a86e85e0 100644 --- a/_content/blog/introducing-gofix.md +++ b/_content/blog/introducing-gofix.md @@ -16,7 +16,7 @@ Code that [implements an HTTP server handler](http://codereview.appspot.com/4239 [calls `os.Open`](http://codereview.appspot.com/4357052), or [uses the reflect package](http://codereview.appspot.com/4281055) will not build unless it is updated to use the new APIs. -Now that our releases are [more stable and less frequent](/blog/2011/03/go-becomes-more-stable.html), +Now that our releases are [more stable and less frequent](/blog/go-becomes-more-stable), this will be a common situation. Each of these API changes happened in a different weekly snapshot and might have been manageable on its own; diff --git a/_content/blog/io2011.md b/_content/blog/io2011.md index ddc5c176..0b6d7114 100644 --- a/_content/blog/io2011.md +++ b/_content/blog/io2011.md @@ -22,13 +22,13 @@ you can now watch videos of our two Go presentations on YouTube. ## Writing Web Apps in Go In “[Writing Web Apps in Go](http://www.youtube.com/watch?v=-i0hat7pdpk)” -we announce the [Go runtime for Google App Engine](/blog/2011/05/go-and-google-app-engine.html) +we announce the [Go runtime for Google App Engine](/blog/go-and-google-app-engine) and walk through the development and deployment of [Moustachio](http://moustach-io.appspot.com/), the first Go App Engine app. {{video "https://www.youtube.com/embed/-i0hat7pdpk"}} -(See the [presentation slides](/doc/talks/io2011/Writing_Web_Apps_in_Go.pdf).) +(See the [presentation slides](/talks/2011/Writing_Web_Apps_in_Go.pdf).) The [source code](https://code.google.com/p/appengine-go/source/browse/example/moustachio) for Moustachio is available as part of [the SDK](http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go) @@ -57,6 +57,6 @@ gives a brief introduction to Go and four case studies of its use in solving rea {{video "https://www.youtube.com/embed/7QDVRowyUQA"}} -(See the [presentation slides](/doc/talks/io2011/Real_World_Go.pdf).) +(See the [presentation slides](/talks/2011/Real_World_Go.pdf).) Thanks to everyone who attended our talks and workshops. We look forward to seeing you again soon! diff --git a/_content/blog/io2013-talk-concurrency.md b/_content/blog/io2013-talk-concurrency.md index 38b6ac57..66d4c211 100644 --- a/_content/blog/io2013-talk-concurrency.md +++ b/_content/blog/io2013-talk-concurrency.md @@ -14,7 +14,7 @@ summary: Watch Sameer Ajmani's talk, “Advanced Go Concurrency Patterns,” fro At Google I/O a year ago Rob Pike presented [_Go Concurrency Patterns_](/talks/2012/concurrency.slide), an introduction to Go's concurrency model. Last week, at I/O 2013, Go team member Sameer Ajmani continued the story -with [_Advanced Go Concurrency Patterns_](http://go.dev/talks/2013/advconc.slide), +with [_Advanced Go Concurrency Patterns_](/talks/2013/advconc.slide), an in-depth look at a real concurrent programming problem. The talk shows how to detect and avoid deadlocks and race conditions, and demonstrates the implementation of deadlines, @@ -26,6 +26,6 @@ For those who want to take their Go programming to the next level, this is a mus The slides are [available here](/talks/2013/advconc.slide) (use the left and right arrows to navigate). -The slides were produced with [the present tool](https://godoc.org/golang.org/x/tools/present), -and the runnable code snippets are powered by the [Go Playground](http://play.golang.org/). +The slides were produced with [the present tool](https://pkg.go.dev/golang.org/x/tools/present), +and the runnable code snippets are powered by the [Go Playground](/play/). The source code for this talk is in [the go.talks sub-repository](https://github.com/golang/talks/tree/master/content/2013/advconc). diff --git a/_content/blog/new-talk-and-tutorials.md b/_content/blog/new-talk-and-tutorials.md index 792a0044..9f1de1e1 100644 --- a/_content/blog/new-talk-and-tutorials.md +++ b/_content/blog/new-talk-and-tutorials.md @@ -14,7 +14,7 @@ and how Go addresses those problems. You can view [a video stream of the talk](https://www.youtube.com/watch?v=7VcArS4Wpqk), and [download the slides](http://www.stanford.edu/class/ee380/Abstracts/100428-pike-stanford.pdf). -Last week's release included a code lab, [Writing Web Applications](/doc/codelab/wiki/), +Last week's release included a code lab, [Writing Web Applications](/doc/articles/wiki/), that details the construction of a simple wiki program. It is a practical introduction to some fundamental Go concepts, and the first of a series of Go code labs. diff --git a/_content/blog/pandemic.md b/_content/blog/pandemic.md index f72b8e87..8371a6a0 100644 --- a/_content/blog/pandemic.md +++ b/_content/blog/pandemic.md @@ -71,7 +71,7 @@ the [Gophers slack](https://gophers.slack.com) ## Online Training The Go trainers you meet at conferences also travel the globe doing -[in-person training](https://learn.go.dev/) +[in-person training](/learn/) for companies that want help adopting Go. That in-person teaching is crucial to bringing new gophers into the community; diff --git a/_content/blog/pgo-preview.md b/_content/blog/pgo-preview.md index 561d2347..1e927068 100644 --- a/_content/blog/pgo-preview.md +++ b/_content/blog/pgo-preview.md @@ -215,4 +215,5 @@ For much more information on using PGO, best practices and caveats to be aware o Please send us your feedback! PGO is still in preview and we'd love to hear about anything that is difficult to use, doesn't work correctly, etc. -Please file issues at https://go.dev/issue/new. +Please file issues at [go.dev/issue/new](/issue/new). + diff --git a/_content/blog/race-detector.md b/_content/blog/race-detector.md index d7d7065a..ca8ecae9 100644 --- a/_content/blog/race-detector.md +++ b/_content/blog/race-detector.md @@ -155,7 +155,7 @@ Here the main goroutine is wholly responsible for setting and resetting the a thread-safe way. A simpler but less efficient approach is to -[avoid reusing timers](http://play.golang.org/p/kuWTrY0pS4). +[avoid reusing timers](/play/p/kuWTrY0pS4). ### Example 2: ioutil.Discard diff --git a/_content/blog/survey2023-h2-results.md b/_content/blog/survey2023-h2-results.md index 27b8aed0..ae30e510 100644 --- a/_content/blog/survey2023-h2-results.md +++ b/_content/blog/survey2023-h2-results.md @@ -117,7 +117,7 @@ external research like [Stack Overflow's Developer Survey](https://survey.stackoverflow.co/2023/#most-popular-technologies-language-prof) (which found 14% of professional developers worked with Go during the past year, a roughly 15% year-over-year increase), as well as analytics for -[go.dev](https://go.dev) (which show an 8% rise in visitors year-over-year). +[go.dev](/) (which show an 8% rise in visitors year-over-year). Combining this growth with a high satisfaction score is evidence that Go continues to appeal to developers, and suggests that many developers who choose to learn the language feel good about their decision long afterwards. diff --git a/_content/blog/turkey-doodle.md b/_content/blog/turkey-doodle.md index c9550654..8d167b75 100644 --- a/_content/blog/turkey-doodle.md +++ b/_content/blog/turkey-doodle.md @@ -181,7 +181,7 @@ Here's the code for the request handler with explanatory comments: {{raw ` <pre> func handler(w http.ResponseWriter, r *http.Request) { - // <a href="https://blog.golang.org/2010/08/defer-panic-and-recover.html">Defer</a> a function to recover from any panics. + // <a href="/blog/defer-panic-and-recover.html">Defer</a> a function to recover from any panics. // When recovering from a panic, log the error condition to // the App Engine dashboard and send the default image to the user. defer func() { @@ -273,7 +273,7 @@ making it easier to learn good style and conventions. In writing this application I used just three resources: App Engine's [Hello World Go example](http://code.google.com/appengine/docs/go/gettingstarted/helloworld.html), [the Go packages documentation](/pkg/), -and [a blog post showcasing the Draw package](/blog/2011/09/go-imagedraw-package.html). +and [a blog post showcasing the Draw package](/blog/go-imagedraw-package). Thanks to the rapid iteration made possible by the development server and the language itself, I was able to pick up the language and build a super fast, diff --git a/_content/blog/two-recent-go-articles.md b/_content/blog/two-recent-go-articles.md index b19507f7..032e718b 100644 --- a/_content/blog/two-recent-go-articles.md +++ b/_content/blog/two-recent-go-articles.md @@ -19,7 +19,7 @@ In today's blog post I'd like to highlight a couple of recent articles about Go. In October last year, Rob Pike presented a keynote at the ACM [SPLASH](http://splashcon.org/2012/) conference in Tucson. The talk, titled [Go at Google](/talks/2012/splash.slide), was a comprehensive discussion of the motivations behind Go. -Rob later expanded on his talk to produce an essay titled [Go at Google: Language Design in the Service of Software Engineering](http://go.dev/talks/2012/splash.article). +Rob later expanded on his talk to produce an essay titled [Go at Google: Language Design in the Service of Software Engineering](/talks/2012/splash.article). Here is the abstract: The Go programming language was conceived in late 2007 as an diff --git a/_content/blog/vuln.md b/_content/blog/vuln.md index 6f4829c7..5c54d617 100644 --- a/_content/blog/vuln.md +++ b/_content/blog/vuln.md @@ -39,7 +39,7 @@ We encourage package maintainers to [contribute](/s/vulndb-report-new) information about public vulnerabilities in their own projects and [update](/s/vulndb-report-feedback) existing information about vulnerabilities in their Go packages. We aim to make reporting a low friction process, -so please [send us your suggestions](https://golang.org/s/vuln-feedback) for +so please [send us your suggestions](/s/vuln-feedback) for any improvements. The Go vulnerability database can be viewed in your browser at [pkg.go.dev/vuln](https://pkg.go.dev/vuln). @@ -93,12 +93,12 @@ You should expect some bugs and [limitations](https://pkg.go.dev/golang.org/x/vu We would love for you to contribute and help us make improvements in the following ways: -- [Contribute new](https://golang.org/s/vulndb-report-new) and +- [Contribute new](/s/vulndb-report-new) and [update existing](/s/vulndb-report-feedback) information about public vulnerabilities for Go packages that you maintain -- [Take this survey](https://golang.org/s/govulncheck-feedback) to share your +- [Take this survey](/s/govulncheck-feedback) to share your experience using govulncheck -- [Send us feedback](https://golang.org/s/vuln-feedback) about issues and +- [Send us feedback](/s/vuln-feedback) about issues and feature requests We are excited to work with you to build a better and more secure Go ecosystem. diff --git a/_content/doc/articles/race_detector.html b/_content/doc/articles/race_detector.html index 55523736..80f186c8 100644 --- a/_content/doc/articles/race_detector.html +++ b/_content/doc/articles/race_detector.html @@ -200,7 +200,7 @@ Here are some typical data races. All of them can be detected with the race det func main() { var wg sync.WaitGroup wg.Add(5) - for i := 0; i < 5; i++ { + for i := 0; i < 5; i++ { go func() { fmt.Println(i) // Not the 'i' you are looking for. wg.Done() @@ -221,7 +221,7 @@ The program can be fixed by making a copy of the variable: func main() { var wg sync.WaitGroup wg.Add(5) - for i := 0; i < 5; i++ { + for i := 0; i < 5; i++ { go func(j int) { fmt.Println(j) // Good. Read local copy of the loop counter. wg.Done() @@ -336,7 +336,7 @@ func (w *Watchdog) Start() { for { time.Sleep(time.Second) // Second conflicting access. - if w.last < time.Now().Add(-10*time.Second).UnixNano() { + if w.last < time.Now().Add(-10*time.Second).UnixNano() { fmt.Println("No keepalives for 10 seconds. Dying.") os.Exit(1) } @@ -369,7 +369,7 @@ func (w *Watchdog) Start() { go func() { for { time.Sleep(time.Second) - if atomic.LoadInt64(&w.last) < time.Now().Add(-10*time.Second).UnixNano() { + if atomic.LoadInt64(&w.last) < time.Now().Add(-10*time.Second).UnixNano() { fmt.Println("No keepalives for 10 seconds. Dying.") os.Exit(1) } @@ -391,7 +391,7 @@ c := make(chan struct{}) // or buffered channel // The race detector cannot derive the happens before relation // for the following send and close operations. These two operations // are unsynchronized and happen concurrently. -go func() { c <- struct{}{} }() +go func() { c <- struct{}{} }() close(c) </pre> @@ -405,8 +405,8 @@ the send is done before the close: <pre> c := make(chan struct{}) // or buffered channel -go func() { c <- struct{}{} }() -<-c +go func() { c <- struct{}{} }() +<-c close(c) </pre> diff --git a/_content/doc/articles/wiki/index.html b/_content/doc/articles/wiki/index.html index 4a447eab..b2536f63 100644 --- a/_content/doc/articles/wiki/index.html +++ b/_content/doc/articles/wiki/index.html @@ -412,7 +412,7 @@ the same as a call to <code>fmt.Printf</code>. The <code>html/template</code> package helps guarantee that only safe and correct-looking HTML is generated by template actions. For instance, it automatically escapes any greater than sign (<code>></code>), replacing it -with <code>&gt;</code>, to make sure user data does not corrupt the form +with <code>&gt;</code>, to make sure user data does not corrupt the form HTML. </p> diff --git a/_content/doc/build-cover.md b/_content/doc/build-cover.md index 15a971bd..00f68b94 100644 --- a/_content/doc/build-cover.md +++ b/_content/doc/build-cover.md @@ -34,7 +34,7 @@ The resulting binary can then be run using an environment variable setting to ca During a given "`go build -cover`" invocation, the Go command will select packages in the main module for coverage profiling; other packages that feed into the build (dependencies listed in go.mod, or packages that are part of the Go standard library) will not be included by default. -For example, here is a toy program containing a main package, a local main-module package `greetings` and a set of packages imported from outside the module, including (among others) `rsc.io/quote` and `fmt` ([link to full program](https://go.dev/play/p/VSQJN8xkkf-?v=gotip)). +For example, here is a toy program containing a main package, a local main-module package `greetings` and a set of packages imported from outside the module, including (among others) `rsc.io/quote` and `fmt` ([link to full program](/play/p/VSQJN8xkkf-?v=gotip)). ``` $ cat go.mod @@ -246,7 +246,7 @@ for coverage, but will not instrument imports outside the main module One way to request instrumentation for all non-stdlib dependencies is to feed the output of `go list` into `-coverpkg`. Here is an example, again using -the [example program](https://go.dev/play/p/VSQJN8xkkf-?v=gotip) cited above: +the [example program](/play/p/VSQJN8xkkf-?v=gotip) cited above: ``` $ go list -f '{{"{{if not .Standard}}{{.ImportPath}}{{end}}"}}' -deps . | paste -sd "," > pkgs.txt @@ -279,7 +279,7 @@ profile data from statements executed during the run will be lost. #### Will `-coverpkg=main` select my main package for profiling? {#mainpkg} -The `-coverpkg` flag accepts a list of import paths, not a list of package names. If you want to select your `main` package for coverage instrumention, please identify it by import path, not by name. Example (using [this example program](https://go.dev/play/p/VSQJN8xkkf-?v=gotip)): +The `-coverpkg` flag accepts a list of import paths, not a list of package names. If you want to select your `main` package for coverage instrumention, please identify it by import path, not by name. Example (using [this example program](/play/p/VSQJN8xkkf-?v=gotip)): ``` $ go list -m @@ -299,13 +299,13 @@ $ - **Blog post introducing unit test coverage in Go 1.2**: - Coverage profiling for unit tests was introduced as part of the - Go 1.2 release; see [this blog post](https://go.dev/blog/cover) for details. + Go 1.2 release; see [this blog post](/blog/cover) for details. - **Documentation**: - The [`cmd/go`](https://pkg.go.dev/cmd/go) package docs describe the build and test flags associated with coverage. - **Technical details**: - - [Design draft](https://go.googlesource.com/proposal/+/master/design/51430-revamp-code-coverage.md) - - [Proposal](https://golang.org/issue/51430) + - [Design draft](/design/51430-revamp-code-coverage) + - [Proposal](/issue/51430) ## Glossary {#glossary} diff --git a/_content/doc/devel/pre_go1.html b/_content/doc/devel/pre_go1.html index 43bd1e8a..ca1aceb1 100644 --- a/_content/doc/devel/pre_go1.html +++ b/_content/doc/devel/pre_go1.html @@ -316,7 +316,7 @@ future changes to the libraries. Gofix can’t handle all situations perfectly, so read and test the changes it makes before committing them. -See <a href="/blog/2011/04/introducing-gofix.html">the gofix blog post</a> for more +See <a href="/blog/introducing-gofix">the gofix blog post</a> for more information.</p> <h3 id="r57.lang">Language</h3> diff --git a/_content/doc/devel/weekly.html b/_content/doc/devel/weekly.html index 7ff43d4a..f1b7cd11 100644 --- a/_content/doc/devel/weekly.html +++ b/_content/doc/devel/weekly.html @@ -378,7 +378,7 @@ Other changes: make https DumpRequestOut less racy. * net/http: add overlooked 418 status code, per RFC 2324, fix ProxyFromEnvironment bug, docs, add tests, - make a test more paranoid & reliable on Windows. + make a test more paranoid & reliable on Windows. * net/rpc: silence read error on closing connection. * net: add stubs for NetBSD (thanks Benny Siegert), make -external flag for tests default to true (thanks Mikio Hara), @@ -615,7 +615,7 @@ Other changes: fix client goroutine leak with persistent connections, fix reference to URL.RawPath in docs (thanks Bjorn Tipling), panic on duplicate registrations, - use mtime < t+1s to check for unmodified (thanks Hong Ruiqi). + use mtime < t+1s to check for unmodified (thanks Hong Ruiqi). * net: avoid Shutdown during Close, avoid TCP self-connect, disable TestDialTimeout on Windows, @@ -708,7 +708,7 @@ Other changes: diagnose \ in import path, disallow switch _ := v.(type), don't print implicit type on struct literal in export, - fix codegen reordering for expressions involving && and ||, + fix codegen reordering for expressions involving && and ||, use octal escapes in mkopnames (thanks Anthony Martin). use original constant expression in error messages (thanks Rémy Oudompheng). * cmd/go: add support for release tags via git branches (thanks Gustavo Niemeyer), @@ -885,7 +885,7 @@ Other changes: * 6c, 8c: make floating point code NaN-safe. * 6l, 8l: remove unused macro definition (thanks Shenghou Ma). * archive/tar: fix race in TestNonSeekable. -* archive/zip: add functions to convert between os.FileInfo & FileHeader. +* archive/zip: add functions to convert between os.FileInfo & FileHeader. * build: do not build all C compilers (thanks Shenghou Ma), remove code now in subrepositories. * bytes: remove dead code, complete documentation, @@ -1603,7 +1603,7 @@ Other changes: * runtime: make sure stack is 16-byte aligned on syscall (thanks Alex Brainman). * spec, gc: allow direct conversion between string and named []byte, []rune. * sql: add Tx.Stmt to use an existing prepared stmt in a transaction, - more driver docs & tests; no functional changes. + more driver docs & tests; no functional changes. * strings: add ContainsAny and ContainsRune (thanks Scott Lawrence). * syscall: add SUSv3 RLIMIT/RUSAGE constants (thanks Sébastien Paolacci), fix openbsd sysctl hostname/domainname workaround, @@ -2343,7 +2343,7 @@ Other changes: adjustments to filter function. fix ast.MergePackageFiles to collect infos about imports. (thanks Sebastien Binet) generalize ast.FilterFile. -* go/build: add test support & use in gotest. +* go/build: add test support & use in gotest. separate test imports out when scanning. (thanks Gustavo Niemeyer) * go/parser: fix type switch scoping. fix type switch scoping. @@ -2692,7 +2692,7 @@ Other changes: * json: add omitempty struct tag option, allow using '$' and '-' as the struct field's tag (thanks Mikio Hara), encode \r and \n in strings as e.g. "\n", not "\u000A" (thanks Evan Martin), - escape < and > in any JSON string for XSS prevention. + escape < and > in any JSON string for XSS prevention. * ld: allow seek within write buffer< add a PT_LOAD PHDR entry for the PHDR (thanks David Anderson). * net: windows/amd64 port (thanks Wei Guangjing). diff --git a/_content/doc/effective_go.html b/_content/doc/effective_go.html index 2e6509f2..60895897 100644 --- a/_content/doc/effective_go.html +++ b/_content/doc/effective_go.html @@ -62,7 +62,7 @@ only as the core library but also as examples of how to use the language. Moreover, many of the packages contain working, self-contained executable examples you can run directly from the -<a href="https://golang.org">golang.org</a> web site, such as +<a href="/">go.dev</a> web site, such as <a href="/pkg/strings/#example-Map">this one</a> (if necessary, click on the word "Example" to open it up). If you have a question about how to approach a problem or how something @@ -3098,7 +3098,7 @@ Although the concurrency features of Go can make some problems easy to structure as parallel computations, Go is a concurrent language, not a parallel one, and not all parallelization problems fit Go's model. For a discussion of the distinction, see the talk cited in -<a href="/blog/2013/01/concurrency-is-not-parallelism.html">this +<a href="/blog/concurrency-is-not-parallelism">this blog post</a>. <h3 id="leaky_buffer">A leaky buffer</h3> diff --git a/_content/doc/faq.html b/_content/doc/faq.html index 136b325e..11388ad7 100644 --- a/_content/doc/faq.html +++ b/_content/doc/faq.html @@ -230,15 +230,7 @@ Is Google using Go internally?</h3> <p> Yes. Go is used widely in production inside Google. -One easy example is the server behind -<a href="https://golang.org">golang.org</a>. -It's just the <a href="/cmd/godoc"><code>godoc</code></a> -document server running in a production configuration on -<a href="https://developers.google.com/appengine/">Google App Engine</a>. -</p> - -<p> -A more significant instance is Google's download server, <code>dl.google.com</code>, +One example is Google's download server, <code>dl.google.com</code>, which delivers Chrome binaries and other large installables such as <code>apt-get</code> packages. </p> @@ -1626,7 +1618,7 @@ Do not communicate by sharing memory. Instead, share memory by communicating. <p> See the <a href="/doc/codewalk/sharemem/">Share Memory By Communicating</a> code walk -and its <a href="/blog/2010/07/share-memory-by-communicating.html"> +and its <a href="/blog/share-memory-by-communicating"> associated article</a> for a detailed discussion of this concept. </p> @@ -1665,7 +1657,7 @@ to speed it up. <p> For more detail on this topic see the talk entitled -<a href="/blog/2013/01/concurrency-is-not-parallelism.html">Concurrency +<a href="/blog/concurrency-is-not-parallelism">Concurrency is not Parallelism</a>. <h3 id="number_cpus"> @@ -2506,7 +2498,7 @@ In any case, Go can often be very competitive. There has been significant improvement in the performance of many programs as the language and tools have developed. See the blog post about -<a href="/blog/2011/06/profiling-go-programs.html">profiling +<a href="/blog/profiling-go-programs">profiling Go programs</a> for an informative example. <h2 id="change_from_c">Changes from C</h2> @@ -2695,7 +2687,7 @@ considerable control over memory layout and allocation, much more than is typical in garbage-collected languages. A careful programmer can reduce the garbage collection overhead dramatically by using the language well; see the article about -<a href="/blog/2011/06/profiling-go-programs.html">profiling +<a href="/blog/profiling-go-programs">profiling Go programs</a> for a worked example, including a demonstration of Go's profiling tools. </p> diff --git a/_content/doc/go1.18.md b/_content/doc/go1.18.md index 5d745cb1..55c8f8e5 100644 --- a/_content/doc/go1.18.md +++ b/_content/doc/go1.18.md @@ -157,7 +157,7 @@ up with these language changes. The Go 1.18 compiler now correctly reports `declared but not used` errors for variables that are set inside a function literal but are never used. Before Go 1.18, the compiler did not report an error in such cases. This fixes long-outstanding compiler -issue [#8560](https://golang.org/issue/8560). As a result of this change, +issue [#8560](/issue/8560). As a result of this change, (possibly incorrect) programs may not compile anymore. The necessary fix is straightforward: fix the program if it was in fact incorrect, or use the offending variable, for instance by assigning it to the blank identifier `_`. @@ -185,7 +185,7 @@ a minimum target version of the AMD64 architecture. Allowed values are `v1`, `v2`, `v3`, or `v4`. Each higher level requires, and takes advantage of, additional processor features. A detailed description can be found -[here](https://golang.org/wiki/MinimumRequirements#amd64). +[here](/wiki/MinimumRequirements#amd64). The `GOAMD64` environment variable defaults to `v1`. @@ -227,7 +227,7 @@ FreeBSD 13.0+ will require a kernel with the COMPAT\_FREEBSD12 option set (this ### Fuzzing {#fuzzing} Go 1.18 includes an implementation of fuzzing as described by -[the fuzzing proposal](https://golang.org/issue/44551). +[the fuzzing proposal](/issue/44551). See the [fuzzing landing page](/security/fuzz) to get started. @@ -250,8 +250,8 @@ adjusting dependencies in `go.mod`. Effectively, the `-d` flag is always enabled. To install the latest version of an executable outside the context of the current module, use [`go` -`install` `example.com/cmd@latest`](https://golang.org/ref/mod#go-install). Any -[version query](https://golang.org/ref/mod#version-queries) +`install` `example.com/cmd@latest`](/ref/mod#go-install). Any +[version query](/ref/mod#version-queries) may be used instead of `latest`. This form of `go` `install` was added in Go 1.16, so projects supporting older versions may need to provide install instructions for both `go` @@ -397,7 +397,7 @@ In Go 1.18, `go` `fix` now removes the now-obsolete `//` `+build` lines in modules declaring `go` `1.18` or later in their `go.mod` files. -For more information, see <https://go.dev/design/draft-gobuild>. +For more information, see [go.dev/design/draft-gobuild](/design/draft-gobuild). ### Gofmt {#gofmt} @@ -415,7 +415,7 @@ The `vet` tool is updated to support generic code. In most cases, it reports an error in generic code whenever it would report an error in the equivalent non-generic code after substituting for type parameters with a type from their -[type set](https://golang.org/ref/spec#Interface_types). +[type set](/ref/spec#Interface_types). For example, `vet` reports a format error in func Print[T ~int|~string](t T) { diff --git a/_content/doc/go1.2.md b/_content/doc/go1.2.md index 05c8593d..6667c2bf 100644 --- a/_content/doc/go1.2.md +++ b/_content/doc/go1.2.md @@ -162,7 +162,7 @@ _Updating_: Since godoc and vet are not part of the library, no client Go code depends on their source and no updating is required. -The binary distributions available from [golang.org](https://golang.org) +The binary distributions available from [golang.org](/) include these binaries, so users of these distributions are unaffected. When building from source, users must use "go get" to install godoc and vet. diff --git a/_content/doc/go1.20.md b/_content/doc/go1.20.md index a9873af3..a7601849 100644 --- a/_content/doc/go1.20.md +++ b/_content/doc/go1.20.md @@ -230,7 +230,7 @@ to an output directory for coverage profiles. See the ['coverage for integration tests' landing page](/testing/coverage) for more on how to get started. For details on the design and implementation, see the -[proposal](https://golang.org/issue/51430). +[proposal](/issue/51430). ### Vet {#vet} diff --git a/_content/doc/go1.7.md b/_content/doc/go1.7.md index 5f01bbcf..7f4d652a 100644 --- a/_content/doc/go1.7.md +++ b/_content/doc/go1.7.md @@ -124,7 +124,7 @@ generates more compact, more efficient code and provides a better platform for optimizations such as bounds check elimination. The new back end reduces the CPU time required by -[our benchmark programs](/test/bench/go1/) by 5-35%. +our benchmark programs by 5-35%. For this release, the new back end can be disabled by passing `-ssa=0` to the compiler. diff --git a/_content/doc/go1.8.md b/_content/doc/go1.8.md index 1f2fc6b3..ecf70252 100644 --- a/_content/doc/go1.8.md +++ b/_content/doc/go1.8.md @@ -260,7 +260,7 @@ generates more compact, more efficient code and provides a better platform for optimizations such as bounds check elimination. The new back end reduces the CPU time required by -[our benchmark programs](/test/bench/go1/) by 20-30% +our benchmark programs by 20-30% on 32-bit ARM systems. For 64-bit x86 systems, which already used the SSA back end in Go 1.7, the gains are a more modest 0-10%. Other architectures will likely see improvements closer to the 32-bit ARM numbers. @@ -627,7 +627,7 @@ The [`ClientHelloInfo`](/pkg/crypto/tls/#ClientHelloInfo) struct now has new fields `Conn`, `SignatureSchemes` (using the new -type [`SignatureScheme`](/kg/crypto/tls/#SignatureScheme)), +type [`SignatureScheme`](/pkg/crypto/tls/#SignatureScheme)), `SupportedProtos`, and `SupportedVersions`. <!-- CL 32115 --> diff --git a/_content/doc/gopher/README b/_content/doc/gopher/README index d4ca8a1c..15726465 100644 --- a/_content/doc/gopher/README +++ b/_content/doc/gopher/README @@ -1,3 +1,3 @@ The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) The design is licensed under the Creative Commons 3.0 Attributions license. -Read this article for more details: https://blog.golang.org/gopher +Read this article for more details: https://go.dev/blog/gopher diff --git a/_content/doc/install.html b/_content/doc/install.html index 6ea21ec2..8f93e53d 100644 --- a/_content/doc/install.html +++ b/_content/doc/install.html @@ -84,7 +84,7 @@ (if it exists), then extract the archive you just downloaded into /usr/local, creating a fresh Go tree in /usr/local/go: <pre class="CopyPaste"> - <span>$ rm -rf /usr/local/go && tar -C /usr/local -xzf <span id="linux-filename">go1.14.3.linux-amd64.tar.gz</span></span> + <span>$ rm -rf /usr/local/go && tar -C /usr/local -xzf <span id="linux-filename">go1.14.3.linux-amd64.tar.gz</span></span> <button aria-label="Copy and paste the code."> <img class="CopyPaste-icon" src="/images/icons/copy-paste.svg" /> <img class="CopyPaste-icon CopyPaste-icon-dark" src="/images/icons/copy-paste-dark.svg" /> diff --git a/_content/doc/pgo.md b/_content/doc/pgo.md index 5e56946a..36a3f678 100644 --- a/_content/doc/pgo.md +++ b/_content/doc/pgo.md @@ -134,7 +134,7 @@ _Iterative stability_ is the prevention of cycles of variable performance in suc We use CPU profiles to identify hot functions to target with optimizations. In theory, a hot function could be sped up so much by PGO that it no longer appears hot in the next profile and does not get optimized, making it slow again. The Go compiler takes a conservative approach to PGO optimizations, which we believe prevents significant variance. -If you do observe this kind of instability, please file an issue at https://go.dev/issue/new. +If you do observe this kind of instability, please file an issue at [go.dev/issue/new](/issue/new). Together, source and iterative stability eliminate the requirement for two-stage builds where a first, unoptimized build is profiled as a canary, and then rebuilt with PGO for production (unless absolutely peak performance is required). @@ -190,7 +190,7 @@ This means that the unique way your application uses a dependency impacts the op It should not. While a profile that is not representative of production behavior will result in optimizations in cold parts of the application, it should not make hot parts of the application slower. -If you encounter a program where PGO results in worse performance than disabling PGO, please file an issue at https://go.dev/issue/new. +If you encounter a program where PGO results in worse performance than disabling PGO, please file an issue at [go.dev/issue/new](/issue/new). ## Can I use the same profile for different GOOS/GOARCH builds? @@ -229,11 +229,11 @@ Enabling PGO builds will likely cause measurable increases in package build time The most noticeable component of this is that PGO profiles apply to all packages in a binary, meaning that the first use of a profile requires a rebuild of every package in the dependency graph. These builds are cached like any other, so subsequent incremental builds using the same profile do not require complete rebuilds. -If you experience extreme increases in build time, please file an issue at https://go.dev/issue/new. +If you experience extreme increases in build time, please file an issue at [go.dev/issue/new](/issue/new). _Note: Parsing of the profile by the compiler can also add significant overhead, particularly for large profiles. Using large profiles with a large dependency graph can significantly increase build times. -This is tracked by https://go.dev/issue/58102 and will be addressed in a future release._ +This is tracked by [go.dev/issue/58102](/issue/58102) and will be addressed in a future release._ ## How does PGO affect binary size? diff --git a/_content/doc/security/fuzz/index.md b/_content/doc/security/fuzz/index.md index 1c501b13..591426f5 100644 --- a/_content/doc/security/fuzz/index.md +++ b/_content/doc/security/fuzz/index.md @@ -261,8 +261,8 @@ $ file2fuzz -h - The [`cmd/go`](https://pkg.go.dev/cmd/go) package docs describe the flags associated with fuzzing. - **Technical details**: - - [Design draft](https://golang.org/s/draft-fuzzing-design) - - [Proposal](https://golang.org/issue/44551) + - [Design draft](/s/draft-fuzzing-design) + - [Proposal](/issue/44551) ## Glossary {#glossary} diff --git a/_content/doc/security/vuln/editor.md b/_content/doc/security/vuln/editor.md index cfd9e98e..f7d00bd8 100644 --- a/_content/doc/security/vuln/editor.md +++ b/_content/doc/security/vuln/editor.md @@ -1,5 +1,5 @@ --- -title: Vulnerability Scanning in IDE +title: Vulnerability Scanning in IDEs layout: article --- @@ -18,7 +18,7 @@ There are two modes for detecting vulnerabilities in dependencies. Both are back href="https://user-images.githubusercontent.com/4999471/206977512-a821107d-9ffb-4456-9b27-6a6a4f900ba6.mp4">(vulncheck.mp4)</a> </div> -These features are available in `gopls` v0.11.0 or newer. Please share your feedback at https://go.dev/s/vsc-vulncheck-feedback. +These features are available in `gopls` v0.11.0 or newer. Please share your feedback at [go.dev/s/vsc-vulncheck-feedback](/s/vsc-vulncheck-feedback). ## Editor-specific Instructions diff --git a/_content/doc/security/vuln/index.md b/_content/doc/security/vuln/index.md index 8de5ec00..3f836e19 100644 --- a/_content/doc/security/vuln/index.md +++ b/_content/doc/security/vuln/index.md @@ -66,7 +66,7 @@ the database in your browser. We encourage package maintainers to [contribute](#feedback) information about public vulnerabilities in their own projects and -[send us suggestions](https://golang.org/s/vuln-feedback) on how to reduce +[send us suggestions](/s/vuln-feedback) on how to reduce friction. ### Vulnerability Detection for Go @@ -96,12 +96,12 @@ See [go.dev/security/vuln/cna](/security/vuln/cna) for more information. We would love for you to contribute and help us make improvements in the following ways: -- [Contribute new](https://golang.org/s/vulndb-report-new) and +- [Contribute new](/s/vulndb-report-new) and [update existing](/s/vulndb-report-feedback) information about public vulnerabilities for Go packages that you maintain -- [Take this survey](https://golang.org/s/govulncheck-feedback) to share your +- [Take this survey](/s/govulncheck-feedback) to share your experience using govulncheck -- [Send us feedback](https://golang.org/s/vuln-feedback) about issues and +- [Send us feedback](/s/vuln-feedback) about issues and feature requests ## FAQs diff --git a/_content/doc/tutorial/generics.md b/_content/doc/tutorial/generics.md index 51dd45d5..0d61fe90 100644 --- a/_content/doc/tutorial/generics.md +++ b/_content/doc/tutorial/generics.md @@ -429,7 +429,7 @@ Nicely done! You've just introduced yourself to generics in Go. Suggested next topics: -* The [Go Tour](https://tour.golang.org/welcome/1) is a great step-by-step +* The [Go Tour](/tour/) is a great step-by-step introduction to Go fundamentals. * You'll find useful Go best practices described in [Effective Go](/doc/effective_go) and diff --git a/_content/doc/tutorial/govulncheck.md b/_content/doc/tutorial/govulncheck.md index e329c6ae..8da65060 100644 --- a/_content/doc/tutorial/govulncheck.md +++ b/_content/doc/tutorial/govulncheck.md @@ -37,7 +37,7 @@ The tutorial will take you through the following steps: ## Create a sample Go module with a vulnerable dependency **Step 1.** To begin, create a new folder called `vuln-tutorial` and initialize a Go module. -(If you are new to Go modules, check out https://go.dev/doc/tutorial/create-module). +(If you are new to Go modules, check out [go.dev/doc/tutorial/create-module](/doc/tutorial/create-module). For example, from your home directory, run the following: diff --git a/_content/help.md b/_content/help.md index 709b7194..590540a6 100644 --- a/_content/help.md +++ b/_content/help.md @@ -51,7 +51,7 @@ Subscribe to for important announcements, such as the availability of new Go releases. </p> -<h3 id="blog"><a href="https://blog.golang.org" aria-describedby="help-description">Go Blog</a></h3> +<h3 id="blog"><a href="/blog/" aria-describedby="help-description">Go Blog</a></h3> <p>The Go project's official blog.</p> <h3 id="twitter"><a href="https://twitter.com/golang" aria-describedby="help-description">@golang at Twitter</a></h3> diff --git a/_content/ref/mod.md b/_content/ref/mod.md index 0d586e2d..9119c241 100644 --- a/_content/ref/mod.md +++ b/_content/ref/mod.md @@ -2861,7 +2861,7 @@ versions, but this is no longer true since Go 1.13. A module proxy must always serve the same content for successful responses for `$base/$module/$version.mod` and `$base/$module/$version.zip` queries. This content is [cryptographically authenticated](#authenticating) -using [`go.sum` files](go-sum-files) and, by default, the +using [`go.sum` files](#go-sum-files) and, by default, the [checksum database](#checksum-database). The `go` command caches most content it downloads from module proxies in its @@ -3903,7 +3903,7 @@ conflicts on case-insensitive file systems. order, compression, alignment, and metadata don't affect the hash. When using a module, the <code>go</code> command verifies this hash matches the corresponding line in - <a href="go-sum-files"><code>go.sum</code></a>. The + <a href="#go-sum-files"><code>go.sum</code></a>. The <a href="#go-mod-verify"><code>go mod verify</code></a> command checks that the hashes of module <code>.zip</code> files and extracted directories match these files. @@ -3946,7 +3946,7 @@ not affected by file order, compression, alignment, and other metadata. See for hash implementation details. The `go` command compares each hash with the corresponding line in the main -module's [`go.sum` file](go-sum-files). If the hash is different from the hash +module's [`go.sum` file](#go-sum-files). If the hash is different from the hash in `go.sum`, the `go` command reports a security error and deletes the downloaded file without adding it into the module cache. diff --git a/_content/solutions/cloud.md b/_content/solutions/cloud.md index 842aecdb..531d15a1 100644 --- a/_content/solutions/cloud.md +++ b/_content/solutions/cloud.md @@ -97,7 +97,7 @@ The major Cloud providers ([GCP](https://cloud.google.com/go/home), [AWS](https: desc: MercadoLibre uses Go to scale its eCommerce platform. Go produces efficient code that readily scales as MercadoLibre’s online commerce grows. Go improves their productivity while streamlining and expanding MercadoLibre services. ctas: - text: MercadoLibre & Go - url: http://go.dev/solutions/mercadolibre + url: /solutions/mercadolibre - company: The New York Times url: https://www.nytimes.com/ logoSrc: the-new-york-times-icon.svg diff --git a/_content/talks/2010/go_talk-20100112.html b/_content/talks/2010/go_talk-20100112.html index 6351c735..4d67ddeb 100644 --- a/_content/talks/2010/go_talk-20100112.html +++ b/_content/talks/2010/go_talk-20100112.html @@ -65,7 +65,7 @@ func main() { <div class="slide"> <h1>History</h1> - + <h2>Design started in late 2007.</h2> <h2>Implementation starting to work mid-2008.</h2> <h2>Released as an open source project in November 2009.</h2> @@ -75,17 +75,17 @@ func main() { <div class="slide"> <h1>Why?</h1> - + <h2>Go fast!</h2> <h2>Make programming fun again.</h2> </div> <div class="slide"> <h1>Why isn't programming fun?</h1> - + <div class="incremental"> <h2>Compiled, statically-typed languages (C, C++, Java) require too much typing and too much typing:</h2> - + <ul> <li>verbose, lots of repetition</li> <li>too much focus on type hierarchy</li> @@ -93,31 +93,31 @@ func main() { <li>compiles take far too long</li> </ul> </div> - + <div class="incremental"> <h2>Dynamic languages (Python, JavaScript) fix these problems (no more types, no more compiler) but introduce others:</h2> - + <ul> <li>errors at run time that should be caught statically</li> <li>no compilation means slow code</li> </ul> </div> - + <h2 class="incremental">Can we combine the best of both?</h2> </div> <div class="slide"> <h1>Go</h1> - + <h2>Make the language fast.</h2> <h2>Make the tools fast.</h2> </div> <div class="slide"> <h1>Go Approach: Static Types</h1> - + <h2>Static types, but declarations can infer type from expression:</h2> - + <pre> var one, hi = 1, "hello" @@ -130,7 +130,7 @@ var double = func(x int) int { return x*2 } <div class="slide"> <h1>Go Approach: Methods</h1> - + <h2>Methods can be defined on any type.</h2> <pre> @@ -146,7 +146,7 @@ func (p Point) Abs() float64 { <div class="slide"> <h1>Go Approach: Methods</h1> - + <h2>Methods can be defined on any type.</h2> <pre> @@ -154,7 +154,7 @@ type MyFloat float64 func (f MyFloat) Abs() float64 { v := float64(f) - if v < 0 { + if v < 0 { v = -v } return v @@ -164,7 +164,7 @@ func (f MyFloat) Abs() float64 { <div class="slide"> <h1>Go Approach: Abstract Types</h1> - + <h2>An interface type lists a set of methods. Any value with those methods satisfies the interface.</h2> <pre> @@ -212,9 +212,9 @@ var p draw.Point <div class="slide"> <h1>Go Approach: Visibility</h1> - + <h2>Inside a package, all locally defined names are visible in all source files.</h2> - + <h2>When imported, only the upper case names are visible.</h2> <pre> @@ -235,9 +235,9 @@ type cache map[Point] float64 <div class="slide"> <h1>Go Approach: Concurrency</h1> - + <h2>Cheap to create a new flow of control (goroutine):</h2> - + <pre> func main() { go expensiveComputation(x, y, z) @@ -250,19 +250,19 @@ func main() { <div class="slide"> <h1>Go Approach: Synchronization</h1> - + <h2>Use explicit messages to communicate and synchronize.</h2> - + <pre> func computeAndSend(ch chan int, x, y, z int) { - ch <- expensiveComputation(x, y, z) + ch <- expensiveComputation(x, y, z) } func main() { ch := make(chan int) go computeAndSend(ch, x, y, z) v2 := anotherExpensiveComputation(a, b, c) - v1 := <-ch + v1 := <-ch fmt.Println(v1, v2) } </pre> @@ -271,21 +271,21 @@ func main() { <div class="slide"> <h1>Go Fast: Language</h1> - + <h2 class="incremental">Static types: enough to compile well, but inferred much of the time.</h2> - + <h2 class="incremental">Methods: on any type, orthogonal to type system.</h2> - + <h2 class="incremental">Abstract types: interface values, relations inferred statically.</h2> - + <h2 class="incremental">Visibility: inferred from case of name.</h2> - + <h2 class="incremental">Concurrency: lightweight way to start new thread of control.</h2> - + <h2 class="incremental">Synchronization: explicit, easy message passing.</h2> <br/> - + <h2 class="incremental">Lightweight feel of a scripting language but compiled.</h2> </div> @@ -298,25 +298,25 @@ func main() { <h2>In C: <code>a.c</code> includes <code>b.h</code>, which includes <code>c.h</code>, which includes <code>d.h</code>. </h2> - + <h2>Except that it's more often a tree instead of a chain.</h2> - + <h2>On my Mac (OS X 10.5.8, gcc 4.0.1):</h2> <ul> <li>C: <code>#include <stdio.h></code> reads 360 lines from 9 files. <li>C++: <code>#include <iostream></code> reads 25,326 lines from 131 files. <li>Objective C: <code>#include <Carbon/Carbon.h></code> reads 124,730 lines from 689 files. </ul> - + <h2>And we haven't done any real work yet!</h2> - + <h2>Same story in Java, Python, but reading binaries instead of source files.</h2> </div> </div> <div class="slide"> <h1>Implementation: Summarize Dependencies</h1> - + <pre> package gui @@ -348,7 +348,7 @@ type gui.Mouse struct { </pre> <h2>A file that imports <code>gui</code> compiles without consulting <code>draw</code> or its dependencies.</h2> - + <h2>In Go: <code>import "fmt"</code> reads <i>one</i> file: 184 lines summarizing types from 7 packages.</h2> <h2>Tiny effect in this program but can be exponential in large programs.</h2> @@ -356,13 +356,13 @@ type gui.Mouse struct { <div class="slide"> <h1>Compilation Demo</h1> - + <h2>Build all standard Go packages: ~120,000 lines of code.</h2> </div> <div class="slide"> <h1>Go Status</h1> - + <div class="incremental"> <div> <h2>Open source:</h2> @@ -373,7 +373,7 @@ type gui.Mouse struct { <li>outside contributions welcome </ul> </div> - + <div> <h2>Portable:</h2> <ul> @@ -381,7 +381,7 @@ type gui.Mouse struct { <li>(in progress) Linux arm, Native Client x86, Windows x86. </ul> </div> - + <div> <h2>Still in progress, experimental. Yet to come:</h2> <ul> diff --git a/_content/talks/2010/go_talk-20100121.html b/_content/talks/2010/go_talk-20100121.html index c426a66a..035e2a28 100644 --- a/_content/talks/2010/go_talk-20100121.html +++ b/_content/talks/2010/go_talk-20100121.html @@ -69,7 +69,7 @@ func main() { <div class="slide"> <h1>History</h1> - + <h2>Design started in late 2007.</h2> <h2>Implementation starting to work mid-2008.</h2> <h2>Released as an open source project in November 2009.</h2> @@ -79,7 +79,7 @@ func main() { <div class="slide"> <h1>Goals and Motivation</h1> - + <h2>Go fast!</h2> <h2>Make programming fun again.</h2> <h2>Targeted at systems software, broadly.</h2> @@ -87,10 +87,10 @@ func main() { <div class="slide"> <h1>Why isn't programming fun?</h1> - + <div class="incremental"> <h2>Compiled, statically-typed languages (C, C++, Java) require too much typing and too much typing:</h2> - + <ul> <li>verbose, lots of repetition</li> <li>too much focus on type hierarchy</li> @@ -98,22 +98,22 @@ func main() { <li>compiles take far too long</li> </ul> </div> - + <div class="incremental"> <h2>Dynamic languages (Python, JavaScript) fix these problems (no more types, no more compiler) but introduce others:</h2> - + <ul> <li>errors at run time that should be caught statically</li> <li>no compilation means slow code</li> </ul> </div> - + <h2 class="incremental">Can we combine the best of both?</h2> </div> <div class="slide"> <h1>Why a new language?</h1> - + <div class="incremental"> <h2>No new systems language in 10+ years.</h2> <h2>Current languages designed before ...</h2> @@ -121,47 +121,47 @@ func main() { <h3>... rise of Internet-scale distributed development (many libraries)</h3> </div> </div> - + <div class="slide"> <h1>Go</h1> - + <h2>Make the language fast.</h2> <h2>Make the tools fast.</h2> </div> <div class="slide"> <h1>Compilation Demo</h1> - + <h2>Build all standard Go packages: ~120,000 lines of code.</h2> </div> <div class="slide"> <h1>Go in one slide</h1> - + <h2 class="incremental">Lightweight syntax.</h2> - + <h2 class="incremental">Static types: enough to compile well, but inferred much of the time.</h2> - + <h2 class="incremental">Methods: on any type, orthogonal to type system.</h2> - + <h2 class="incremental">Abstract types: interface values, relations inferred statically.</h2> - + <h2 class="incremental">Visibility: inferred from case of name.</h2> <h2 class="incremental">First-class functions.</h2> - + <h2 class="incremental">Garbage collection.</h2> <br/> - + <h2 class="incremental">Lightweight feel of a scripting language but compiled.</h2> </div> <div class="slide"> <h1>Go, concurrently</h1> - + <h2>Cheap to create a new flow of control (goroutine):</h2> - + <pre> func main() { go expensiveComputation(x, y, z) @@ -174,9 +174,9 @@ func main() { <div class="slide"> <h1>Go, concurrently</h1> - + <h2>Cheap to create a new flow of control (goroutine):</h2> - + <pre> for { rw := l.Accept() @@ -195,19 +195,19 @@ func main() { <div class="slide"> <h1>Go, synchronized</h1> - + <h2>Use explicit messages to communicate and synchronize.</h2> - + <pre> func computeAndSend(ch chan int, x, y, z int) { - ch <- expensiveComputation(x, y, z) + ch <- expensiveComputation(x, y, z) } func main() { ch := make(chan int) go computeAndSend(ch, x, y, z) v2 := anotherExpensiveComputation(a, b, c) - v1 := <-ch + v1 := <-ch fmt.Println(v1, v2) } </pre> @@ -216,25 +216,25 @@ func main() { <div class="slide"> <h1>Go, synchronized</h1> - + <h2>RPC client</h2> <pre> func (client *Client) Call(method string, args, reply interface{}) os.Error { // Send RPC message. call := client.Go(method, args, reply, nil) - + // Read reply from Done channel. - <-call.Done + <-call.Done return call.Error } -</pre> +</pre> </div> <div class="slide"> <h1>Go, synchronized</h1> - + <h2>RPC client demux</h2> <pre> @@ -249,7 +249,7 @@ func (client *Client) input() { c.Error = os.ErrorString(resp.error) } resp.Decode(c.Reply) - c.Done <- c + c.Done <- c } } </pre> @@ -257,7 +257,7 @@ func (client *Client) input() { <div class="slide"> <h1>Go, synchronized</h1> - + <h2>RPC client demux</h2> <pre> @@ -272,7 +272,7 @@ func (client *Client) input() { c.Error = os.ErrorString(resp.error) } resp.Decode(c.Reply) - c.Done <- c + c.Done <- c } } </pre> @@ -281,7 +281,7 @@ func (client *Client) input() { <div class="slide"> <h1>Go, synchronized</h1> - + <h2>RPC client demux</h2> <pre> @@ -296,7 +296,7 @@ func (client *Client) input() { c.Error = os.ErrorString(resp.error) } resp.Decode(c.Reply) - c.Done <- c + c.Done <- c } } </pre> @@ -305,7 +305,7 @@ func (client *Client) input() { <div class="slide"> <h1>Go, synchronized</h1> - + <h2>RPC client demux</h2> <pre> @@ -320,7 +320,7 @@ func (client *Client) input() { c.Error = os.ErrorString(resp.error) } resp.Decode(c.Reply)</font> - c.Done <- c + c.Done <- c } } </pre> @@ -329,7 +329,7 @@ func (client *Client) input() { <div class="slide"> <h1>Go, synchronized</h1> - + <h2>RPC client demux</h2> <pre> @@ -344,7 +344,7 @@ func (client *Client) input() { c.Error = os.ErrorString(resp.error) } resp.Decode(c.Reply) - <font style="color: black;">c.Done <- c</font> + <font style="color: black;">c.Done <- c</font> } } </pre> @@ -353,7 +353,7 @@ func (client *Client) input() { <div class="slide"> <h1>Go, synchronized</h1> - + <h2>RPC client demux</h2> <pre> @@ -368,7 +368,7 @@ func (client *Client) input() { c.Error = os.ErrorString(resp.error) } resp.Decode(c.Reply) - c.Done <- c + c.Done <- c } } </pre> @@ -381,16 +381,16 @@ and distinguish which finished by inspecting value sent on channel. <div class="slide"> <h1>Goroutine demo</h1> - + <h2>Chain together 100,000 goroutines connected by 100,001 channels.</h2> - + <h2>Send a value to one end of the chain.</h2> - + <h2>Each passes it along, increments.</h2> - + <h2>Receive value out the other end of the chain.</h2> </div> - + <div class="slide"> <h1>Go Status</h1> @@ -398,7 +398,7 @@ and distinguish which finished by inspecting value sent on channel. <div class="slide"> <h1>Go Status</h1> - + <h2>Open source:</h2> <ul> <li>released on November 10, 2009 @@ -412,7 +412,7 @@ and distinguish which finished by inspecting value sent on channel. <div class="slide"> <h1>Go Status</h1> - + <h2>Open source</h2> <h2>Portable:</h2> @@ -424,7 +424,7 @@ and distinguish which finished by inspecting value sent on channel. <div class="slide"> <h1>Go Status</h1> - + <h2>Open source</h2> <h2>Portable</h2> diff --git a/_content/talks/2012/go-docs.slide b/_content/talks/2012/go-docs.slide index b7f7f042..e072a73a 100644 --- a/_content/talks/2012/go-docs.slide +++ b/_content/talks/2012/go-docs.slide @@ -130,7 +130,7 @@ Want to edit and play. * Can run code from the browser -.link http://play.golang.org +.link /play/ go.dev/play * The tour diff --git a/_content/talks/2014/go1.3.slide b/_content/talks/2014/go1.3.slide index 952e07c3..3175dd17 100644 --- a/_content/talks/2014/go1.3.slide +++ b/_content/talks/2014/go1.3.slide @@ -104,7 +104,7 @@ Many Go libraries include custom thread-safe free lists, like this: default: } } - + p := obj() // use p objPut(p) @@ -121,7 +121,7 @@ It allows the runtime to reclaim entries when appropriate return NewObject() }, } - + p := objPool.Get().(*Object) // use p objPool.Put(p) @@ -141,7 +141,7 @@ NaCl also provides a tool for executing command-line binaries Go 1.3 targets that command-line tool for 32-bit and 64-bit x86 architectures. (NaCl supports 32-bit ARM, but we have no plans to support it.) -The [[http://play.golang.org][Go Playground]] uses the NaCl tool chain to safely execute untrusted programs. +The [[/play/][Go Playground]] uses the NaCl tool chain to safely execute untrusted programs. The NaCl tool chain includes the fake time, network, and file system capabilities of the playground. diff --git a/_content/talks/2014/playground.slide b/_content/talks/2014/playground.slide index c9e06fb6..ae3c5e9a 100644 --- a/_content/talks/2014/playground.slide +++ b/_content/talks/2014/playground.slide @@ -19,12 +19,12 @@ http://campoy.cat * The Go playground .image playground/img/play.png 500 _ -.caption [[http://play.golang.org][play.golang.org]] +.caption [[/play/][go.dev/play]] * De facto pastebin of the Go community .image playground/img/share.png 500 _ -.caption [[http://play.golang.org/p/bJYnajZ6Kp]] +.caption [[/play/p/bJYnajZ6Kp][go.dev/play/p/bJYnajZ6Kp]] * The Go tour @@ -288,20 +288,20 @@ Returns directly * So the bug was fixed .image playground/img/andrew.png _ 1000 -.caption [[http://play.golang.org/p/3fv0L3-z0s]] +.caption [[/play/p/3fv0L3-z0s][go.dev/play/p/3fv0L3-z0s]] * And people were happy .image playground/img/brad.png _ 1000 -.caption [[http://play.golang.org/p/rX_3WcpUOZ]] +.caption [[/play/p/rX_3WcpUOZ][go.dev/play/p/rX_3WcpUOZ]] * Very happy .image playground/img/jan.png _ 1000 -.caption [[http://play.golang.org/p/P-Dk0NH_vf]] +.caption [[/play/p/P-Dk0NH_vf][go.dev/play/p/P-Dk0NH_vf]] .image playground/img/mattn.png _ 1000 -.caption [[http://play.golang.org/p/NOycgN2i6b]] +.caption [[/play/p/NOycgN2i6b][go.dev/play/p/NOycgN2i6b]] * References diff --git a/_content/talks/2014/taste.slide b/_content/talks/2014/taste.slide index 331eea86..cb6f5a0d 100644 --- a/_content/talks/2014/taste.slide +++ b/_content/talks/2014/taste.slide @@ -468,7 +468,8 @@ Reducer: - Powerful tools -.link http://play.golang.org/p/Au02fFpYdf +.link /play/p/Au02fFpYdf go.dev/play/p/Au02fFpYdf + # playground, gofmt - Multi-platform support diff --git a/_content/talks/2015/go-for-java-programmers.slide b/_content/talks/2015/go-for-java-programmers.slide index de315ce6..88e4d979 100644 --- a/_content/talks/2015/go-for-java-programmers.slide +++ b/_content/talks/2015/go-for-java-programmers.slide @@ -404,7 +404,7 @@ Goimports updates import statements based on your workspace. Most people run these tools on save. -.link http://play.golang.org/p/GPqra77cBK +.link /play/p/GPqra77cBK go.dev/play/p/GPqra77cBK * The go tool diff --git a/_content/talks/2015/gotham-grpc.slide b/_content/talks/2015/gotham-grpc.slide index c341de68..08b34ba6 100644 --- a/_content/talks/2015/gotham-grpc.slide +++ b/_content/talks/2015/gotham-grpc.slide @@ -87,7 +87,7 @@ Transport: *HTTP2* * Generated code -.code gotham-grpc/search/README.md /protoc/ +.code gotham-grpc/search/README /protoc/ .code gotham-grpc/search-only/search-only.pb.go /type GoogleClient/,/^}/ .code gotham-grpc/search-only/search-only.pb.go /type GoogleServer/,/^}/ .code gotham-grpc/search-only/search-only.pb.go /type Request/,/^}/ @@ -237,5 +237,5 @@ It is an excellent fit for building parallel, distributed, and streaming systems Sameer Ajmani Tech Lead Manager, Go team, Google -[[twitter.com/Sajma][@Sajma]] +[[https://twitter.com/Sajma][@Sajma]] [[mailto:sameer@golang.org][sameer@golang.org]] diff --git a/_content/talks/2016/applicative.slide b/_content/talks/2016/applicative.slide index 149d30b2..d65e8fb5 100644 --- a/_content/talks/2016/applicative.slide +++ b/_content/talks/2016/applicative.slide @@ -442,7 +442,7 @@ while helping your organization discover the benefits. Go tools meet you where you are. There's no one "Go IDE". - IDE & editor integration: Eclipse, IntelliJ, VisualStudio, SublimeText, emacs, vim, ... -- [[http://play.golang.org][play.golang.org]]: online playground +- [[/play/][go.dev/play]]: online playground - `gofmt`: automatic formatting - `goimports`: automatic updates of package imports - `gocode`: automatic completion diff --git a/_content/talks/2017/state-of-go-may.slide b/_content/talks/2017/state-of-go-may.slide index 4783eabb..456f591c 100644 --- a/_content/talks/2017/state-of-go-may.slide +++ b/_content/talks/2017/state-of-go-may.slide @@ -162,7 +162,7 @@ A new type has been added to the `sync` package with proposal [[/issue/18177][#1 * html/template panic on predefined escaper -What do you expect [[https://play.golang.org/p/-z5rZilH1F][this code]] to print? +What do you expect [[/play/p/-z5rZilH1F][this code]] to print? .play state-of-go-may/html/main.go /Foo/, diff --git a/_content/talks/2019/playground-v3/playground-v3.slide b/_content/talks/2019/playground-v3/playground-v3.slide index 35d632a3..0213cd16 100644 --- a/_content/talks/2019/playground-v3/playground-v3.slide +++ b/_content/talks/2019/playground-v3/playground-v3.slide @@ -35,7 +35,7 @@ bradfitz@golang.org * Fun: clear screen with \f -.link https://play.golang.org/p/lrSX-aXEOMe animation example +.link /play/p/lrSX-aXEOMe animation example func main() { const x = `.oOo` @@ -47,7 +47,7 @@ bradfitz@golang.org * Fun: images -.link https://play.golang.org/p/t9ECgoq0XSD image example +.link /play/p/t9ECgoq0XSD image example .image pic.png _ 600 diff --git a/_content/tour/basics.article b/_content/tour/basics.article index 6c880059..9fe0d22a 100644 --- a/_content/tour/basics.article +++ b/_content/tour/basics.article @@ -54,7 +54,7 @@ In this example, `add` takes two parameters of type `int`. Notice that the type comes _after_ the variable name. -(For more about why types look the way they do, see the [[https://blog.golang.org/gos-declaration-syntax][article on Go's declaration syntax]].) +(For more about why types look the way they do, see the [[/blog/gos-declaration-syntax][article on Go's declaration syntax]].) .play basics/functions.go |
