基本信息
源码名称:Go语言程序设计
源码大小:3.87M
文件格式:.zip
开发语言:Go
更新时间:2019-03-24
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
go语言程序设计,经典书箱,入门的好资料!本书由《C程序设计语言》的作者Kernighan和谷歌公司Go团队主管Alan Donovan联袂撰写,是学习Go语言程序设计的指南。本书共13章,主要内容包括:Go的基础知识、基本结构、基本数据类型、复合数据类型、函数、方法、接口、goroutine、通道、共享变量的并发性、包、go工具、测试、反射等。
Contents Preface................................................................................................................................ xix PART 1—WHY LEARN GO—GETTING STARTED Chapter 1—Origins, Context and Popularity of Go..............................................................1 1.1 Origins and evolution ...............................................................................................1 1.2 Main characteristics, context and reasons for developing a new language...................4 1.2.1 Languages that influenced Go........................................................................4 1.2.2 Why a new language?.....................................................................................5 1.2.3 Targets of the language...................................................................................5 1.2.4 Guiding design principles ..............................................................................7 1.2.5 Characteristics of the language.......................................................................7 1.2.6 Uses of the language.......................................................................................8 1.2.7 Missing features?............................................................................................9 1.2.8 Programming in Go.....................................................................................10 1.2.9 Summary .....................................................................................................10 Chapter 2—Installation and Runtime Environment ...........................................................11 2.1 Platforms and architectures ....................................................................................11 (1) The gc Go-compilers: .................................................................................11 (2) The gccgo-compiler:...................................................................................13 (3) File extensions and packages: ......................................................................14 2.2 Go Environment variables.......................................................................................14 2.3 Installing Go on a Linux system..............................................................................16 2.4 Installing Go on an OS X system ............................................................................21 2.5 Installing Go on a Windows system.........................................................................21 2.6 What is installed on your machine? ........................................................................26 2.7 The Go runtime......................................................................................................27 2.8 A Go interpreter .....................................................................................................27 Chapter 3—Editors, IDE’s and Other tools.........................................................................28 3.1 Basic requirements for a decent Go development environment................................28 3.2 Editors and Integrated Development Environments................................................29 3.2.1. Golang LiteIDE .........................................................................................32 3.2.2. GoClipse.....................................................................................................33 3.3 Debuggers...............................................................................................................34 3.4 Building and running go-programs with command- and Makefiles.........................35 3.5 Formatting code: go fmt or gofmt ...........................................................................39 3.6 Documenting code: go doc or godoc.......................................................................40 3.7 Other tools..............................................................................................................41 3.8 Go’s performance ....................................................................................................41 3.9 Interaction with other languages..............................................................................43 3.9.1. Interacting with C ......................................................................................43 3.9.2. Interacting with C ...................................................................................45 PART 2—CORE CONSTRUCTS AND TECHNIQUES OF THE LANGUAGE Chapter 4—Basic constructs and elementary data types ......................................................49 4.1. Filenames—Keywords—Identifiers.........................................................................49 4.2. Basic structure and components of a Go-program ..................................................50 4.2.1 Packages, import and visibility .....................................................................51 4.2.3 Comments...................................................................................................56 4.2.4 Types............................................................................................................57 4.2.5 General structure of a Go-program ..............................................................58 4.2.6 Conversions.................................................................................................60 4.2.7 About naming things in Go .........................................................................60 4.3. Constants...............................................................................................................60 4.4. Variables.................................................................................................................63 4.4.1 Introduction ................................................................................................63 4.4.2 Value types and reference types ....................................................................66 4.4.3 Printing........................................................................................................68 4.4.4 Short form with the := assignment operator.................................................69 4.4.5 Init-functions...............................................................................................70 4.5. Elementary types and operators..............................................................................73 4.5.1. Boolean type bool .......................................................................................73 4.5.2. Numerical types..........................................................................................75 4.5.2.1 ints and floats............................................................................................75 4.5.2.2 Complex numbers ....................................................................................79 4.5.2.3 Bit operators .............................................................................................79 4.5.2.4 Logical operators.......................................................................................81 4.5.2.5 Arithmetic operators ................................................................................82 4.5.2.6 Random numbers .....................................................................................82 4.5.3. Operators and precedence...........................................................................84 4.5.4. Aliasing types..............................................................................................84 4.5.5. Character type ............................................................................................85 4.6. Strings....................................................................................................................86 4.7. The strings and strconv package.............................................................................88 4.7.1—Prefixes and suffixes:..................................................................................88 4.7.2—Testing whether a string contains a substring:............................................89 4.7.3—Indicating at which position (index) a substring or character occurs in a string: ..................................................................................................89 4.7.4—Replacing a substring: ...............................................................................90 4.7.5—Counting occurrences of a substring:.........................................................90 4.7.6—Repeating a string:.....................................................................................90 4.7.7—Changing the case of a string:....................................................................91 4.7.8—Trimming a string: ....................................................................................92 4.7.9—Splitting a string:.......................................................................................92 4.7.10—Joining over a slice: .................................................................................92 4.7.11—Reading from a string:.............................................................................93 4.8. Times and dates......................................................................................................95 4.9. Pointers..................................................................................................................96 Chapter 5—Control structures..........................................................................................101 5.1—The if else construct ...........................................................................................101 5.2—Testing for errors on functions with multiple return values.................................106 5.3—The switch keyword ...........................................................................................110 5.4—The for construct ...............................................................................................114 5.4.1 Counter-controlled iteration ......................................................................114 Character on position 2 is: ..........................................................................................116 5.4.2 Condition-controlled iteration ..................................................................117 5.4.3 Infinite loops ............................................................................................118 5.4.4 The for range construct..............................................................................119 5.5—Break / continue.................................................................................................121 5.6—Use of labels with break and continue—goto......................................................123 Chapter 6—Functions.......................................................................................................126 6.1 Introduction..........................................................................................................126 6.2 Parameters and return values .................................................................................129 6.2.1 Call by value / Call by reference.................................................................129 6.2.2 Named return variables..............................................................................131 6.2.3 Blank identifier..........................................................................................133 6.2.4 Changing an outside variable.....................................................................134 6.3 Passing a variable number of parameters................................................................135 6.4 Defer and tracing ..................................................................................................137 6.5 Built-in functions..................................................................................................142 6.6 Recursive functions ...............................................................................................143 6.8 Closures (function literals) ....................................................................................147 6.9 Applying closures: a function returning another function .....................................150 6.10 Debugging with closures .....................................................................................153 6.11 Timing a function ..............................................................................................154 6.12 Using memoization for performance...................................................................154 Chapter 7—Arrays and Slices............................................................................................157 7.1 Declaration and initialization ................................................................................157 7.1.1 Concept.....................................................................................................157 7.1.2 Array literals...............................................................................................161 7.1.3 Multidimensional arrays.............................................................................162 7.1.4 Passing an array to a function.....................................................................163 7.2 Slices.....................................................................................................................164 7.2.1 Concept.....................................................................................................164 7.2.2 Passing a slice to a function........................................................................168 7.2.3 Creating a slice with make().......................................................................168 7.2.4 Difference between new() and make()........................................................170 7.2.5 Multidimensional slices..............................................................................171 7.2.6 The bytes package......................................................................................171 7.3 For range construct ...............................................................................................172 7.4 Reslicing................................................................................................................175 7.5 Copying and appending slices ...............................................................................176 7.6 Applying strings, arrays and slices..........................................................................178 7.6.1 Making a slice of bytes from a string ..........................................................178 7.6.2 Making a substring of a string....................................................................179 7.6.3 Memory representation of a string and a slice.............................................179 7.6.4 Changing a character in a string.................................................................180 7.6.5 Comparison function for byte arrays..........................................................180 7.6.6 Searching and sorting slices and arrays ......................................................181 7.6.7 Simulating operations with append............................................................182 7.6.8 Slices and garbage collection ......................................................................182 Chapter 8—Maps .............................................................................................................185 8.1 Declaration, initialization and make......................................................................185 8.1.1 Concept.....................................................................................................185 8.1.2 Map capacity .............................................................................................188 8.1.3 Slices as map values....................................................................................188 8.2 Testing if a key-value item exists in a map—Deleting an element ..........................188 8.3 The for range construct .........................................................................................190 8.4 A slice of maps .....................................................................................................191 8.5 Sorting a map........................................................................................................192 8.6 Inverting a map.....................................................................................................194 Chapter 9—Packages ........................................................................................................196 A The standard library.................................................................................................196 9.1 Overview of the standard library............................................................................196 9.2 The regexp package. ..............................................................................................199 9.3 Locking and the sync package. ..............................................................................200 9.4 Accurate computations and the big package. .........................................................202 B Custom and external packages: use, build, test, document, install ............................203 9.5 Custom packages and visibility..............................................................................203 9.6 Using godoc for your custom packages..................................................................208 9.7 Using go install for installing custom packages. .....................................................210 9.8 Custom packages: map structure, go install and go test .........................................212 9.8.1 Map-structure for custom packages............................................................212 9.8.2 Locally installing the package.....................................................................215 9.8.3 OS dependent code....................................................................................216 9.9 Using git for distribution and installation..............................................................216 9.9.1 Installing to github ....................................................................................216 9.9.2 Installing from github ................................................................................217 9.10 Go external packages and projects. .....................................................................218 9.11 Using an external library in a Go program...........................................................219 Chapter 10—Structs and Methods....................................................................................224 10.1 Definition of a struct...........................................................................................224 10.2 Creating a struct variable with a Factory method.................................................232 10.2.1 A factory for structs..................................................................................232 10.2.2 new() and make() revisited for maps and structs:......................................234 10.3 Custom package using structs..............................................................................235 10.4 Structs with tags..................................................................................................236 10.5 Anonymous fields and embedded structs.............................................................237 10.5.1 Definition................................................................................................237 10.5.2 Embedded structs ....................................................................................238 10.5.3 Conflicting names....................................................................................239 10.6 Methods..............................................................................................................240 10.6.1 What is a method? ...................................................................................240 10.6.2 Difference between a function and a method ...........................................244 10.6.3 Pointer or value as receiver.......................................................................245 10.6.4 Methods and not-exported fields.............................................................247 10.6.5 Methods on embedded types and inheritance...........................................248 10.6.6 How to embed functionality in a type......................................................251 10.6.7 Multiple inheritance.................................................................................253 10.6.8 Universal methods and method naming...................................................256 10.6.9 Comparison between Go types and methods and other object-oriented languages..........................................................................256 10.7 The String()-method and format specifiers for a type...........................................258 10.8 Garbage collection and SetFinalizer.....................................................................261 Chapter 11—Interfaces and reflection...............................................................................263 11.1 What is an interface? ...........................................................................................263 11.2 Interface embedding interface(s)..........................................................................270 11.3 How to detect and convert the type of an interface variable: type assertions ........270 11.4 The type switch...................................................................................................273 11.5 Testing if a value implements an interface............................................................274 11.6 Using method sets with interfaces........................................................................275 11.7 1st example: sorting with the Sorter interface.......................................................277 11.8 2nd example: Reading and Writing .....................................................................282 11.9 Empty Interface...................................................................................................284 11.9.1 Concept...................................................................................................284 11.9.2 Constructing an array of a general type or with variables of different types...........................................................................................286 11.9.3 Copying a data-slice in a slice of interface{}..............................................287 11.9.4 Node structures of general or different types ............................................288 11.9.5 Interface to interface................................................................................289 11.10 The reflect package............................................................................................290 11.10.1 Methods and types in reflect ..................................................................290 11.10.2 Modifying (setting) a value through reflection........................................293 11.10.3 Reflection on structs ..............................................................................294 11.11 Printf and reflection. .........................................................................................296 11.12 Interfaces and dynamic typing...........................................................................298 11.12.1 Dynamic typing in Go...........................................................................298 11.12.2 Dynamic method invocation..................................................................300 11.12.3 Extraction of an interface.......................................................................301 11.12.4 Explicitly indicating that a type implements an interface........................303 11.12.5 Empty interface and function overloading..............................................304 11.12.6 Inheritance of interfaces.........................................................................304 11.13 Summary: the object-orientedness of Go...........................................................306 11.14 Structs, collections and higher order functions ..................................................306 PART 3—ADVANCED GO Chapter 12—Reading and writing ....................................................................................313 12.1 Reading input from the user................................................................................313 12.2 Reading from and writing to a file.......................................................................317 12.2.1 Reading from a file...................................................................................317 12.2.2 The package compress: reading from a zipped file....................................321 12.2.3 Writing to a file........................................................................................322 12.3 Copying files.......................................................................................................324 12.4 Reading arguments from the command-line........................................................325 12.4.1 With the os-package.................................................................................325 12.4.2 With the flag-package..............................................................................326 12.5 Reading files with a buffer...................................................................................328 12.6 Reading and writing files with slices....................................................................330 12.7 Using defer to close a file....................................................................................332 12.8 A practical example of the use of interfaces: fmt.Fprintf .....................................332 12.9 The json dataformat ............................................................................................334 12.10 The xml dataformat...........................................................................................340 12.11 Datatransport through gob................................................................................342 12.12 Cryptography with go .......................................................................................345 Chapter 13—Error-handling and Testing..........................................................................348 13.1 Error-handling ....................................................................................................349 13.1.1 Defining errors.........................................................................................349 13.1.2 Making an error-object with fmt.............................................................353 13.2 Run-time exceptions and panic ...........................................................................353 13.4 Error-handling and panicking in a custom package.............................................357 13.5 An error-handling scheme with closures ..............................................................360 13.6 Starting an external command or program ..........................................................363 13.7 Testing and benchmarking in Go ........................................................................364 13.8 Testing: a concrete example.................................................................................367 13.9 Using table-driven tests. ......................................................................................369 13.10 Investigating performance: tuning and profiling Go programs...........................371 13.10.1 Time and memory consumption............................................................371 13.10.2 Tuning with go test ................................................................................371 13.10.3 Tuning with pprof..................................................................................371 Chapter 14—Goroutines and Channels ............................................................................375 14.1 Concurrency, parallelism and goroutines.............................................................375 14.1.1 What are goroutines? ...............................................................................375 14.1.2 The difference between concurrency and parallelism................................377 14.1.3 Using GOMAXPROCS...........................................................................378 14.1.4 How to specify the number of cores to be used on the command-line?.....379 14.1.5 Goroutines and coroutines.......................................................................381 14.2 Channels for communication between goroutines...............................................381 14.2.1 Concept...................................................................................................381 14.2.2 Communication operator <- ....................................................................383 14.2.3 Blocking of channels................................................................................385 14.2.4 Goroutines synchronize through the exchange of data on one (or more) channel(s).......................................................................................387 14.2.5 Asynchronous channels—making a channel with a buffer........................387 14.2.6 Goroutine using a channel for outputting result(s)...................................388 14.2.7 Semaphore pattern...................................................................................389 14.2.8 Implementing a parallel for-loop..............................................................391 14.2.9 Implementing a semaphore using a buffered channel ...............................391 14.2.10 For—range applied to channels..............................................................394 14.2.11 Channel directionality............................................................................396 14.3 Synchronization of goroutines: closing a channel—testing for blocked channels .400 14.4 Switching between goroutines with select............................................................403 14.5 Channels, Timeouts and Tickers..........................................................................408 14.6 Using recover with goroutines .............................................................................412 14.7 Comparing the old and the new model: Tasks and Worker processes...................413 14.8 Implementing a lazy generator.............................................................................416 14.9 Implementing Futures.........................................................................................420 14.10 Multiplexing .....................................................................................................421 14.10.1 A typical client-server pattern.................................................................421 14.10.2 Teardown: shutdown the server by signaling a channel...........................424 14.11 Limiting the number of requests processed concurrently ...................................427 14.12 Chaining goroutines..........................................................................................428 14.13 Parallelizing a computation over a number of cores ...........................................429 14.14 Parallelizing a computation over a large amount of data ....................................430 14.15 The leaky bucket algorithm...............................................................................431 14.16 Benchmarking goroutines..................................................................................433 14.17 Concurrent acces to objects by using a channel. ................................................434 Chapter 15—Networking, templating and web-applications.............................................436 15.1 A tcp-server ........................................................................................................436 15.2 A simple webserver..............................................................................................445 15.3 Polling websites and reading in a web page..........................................................448 15.4 Writing a simple web application ........................................................................452 15.5 Making a web application robust.........................................................................454 15.6 Writing a web application with templates............................................................456 15.7 Exploring the template package...........................................................................461 15.7.1. Field substitution: {{.FieldName}}...........................................................462 15.7.2. Validation of the templates......................................................................463 15.7.3 If-else.......................................................................................................464 15.7.4 Dot and with-end ....................................................................................465 15.7.5 Template variables $.................................................................................466 15.7.6 Range-end................................................................................................467 15.7.7 Predefined template functions..................................................................467 15.8 An elaborated webserver with different functions ................................................468 (works only on Unix because calls /bin/date).......................................................474 15.9 Remote procedure calls with rpc..........................................................................474 15.10 Channels over a network with netchan..............................................................477 15.11 Communication with websocket.......................................................................478 15.12 Sending mails with smtp ...................................................................................480 PART 4—APPLYING GO Chapter 16—Common Go Pitfalls or Mistakes.................................................................485 16.1 Hiding (shadowing) a variable by misusing short declaration...............................486 16.2 Misusing strings. .................................................................................................486 16.3 Using defer for closing a file in the wrong scope..................................................487 16.4 Confusing new() and make()...............................................................................488 16.5 No need to pass a pointer to a slice to a function.................................................488 16.6 Using pointers to interface types..........................................................................488 16.7 Misusing pointers with value types......................................................................489 16.8 Misusing goroutines and channels.......................................................................489 16.9 Using closures with goroutines ............................................................................490 16.10 Bad error handling ............................................................................................491 16.10.1 Don’t use booleans: ................................................................................491 16.10.2 Don’t clutter your code with error-checking:..........................................492 Chapter 17—Go Language Patterns..................................................................................494 17.1 The comma, ok pattern.......................................................................................494 17.2 The defer pattern.................................................................................................495 17.3 The visibility pattern ...........................................................................................497 17.4 The operator pattern and interface......................................................................497 17.4.1 Implement the operators as functions.......................................................497 17.4.2 Implement the operators as methods........................................................498 17.4.3 Using an interface....................................................................................499 Chapter 18—Useful Code Snippets—Performance Advice................................................500 18.1 Strings.................................................................................................................500 18.2 Arrays and slices ..................................................................................................501 18.3 Maps...................................................................................................................502 18.4 Structs.................................................................................................................502 18.5 Interfaces.............................................................................................................503 18.6 Functions............................................................................................................503 18.7 Files.....................................................................................................................504 18.8 Goroutines and channels.....................................................................................505 18.9 Networking and web applications........................................................................507 18.9.1. Templating: .....................................................................................................507 18.10 General .............................................................................................................508 18.11 Performance best practices and advice ...............................................................508 Chapter 19—Building a complete application...................................................................509 19.1 Introduction........................................................................................................509 19.2 Introducing Project UrlShortener........................................................................509 19.3 Data structure.....................................................................................................510 19.4 Our user interface: a web server frontend ............................................................515 19.5 Persistent storage: gob .........................................................................................519 19.6 Using goroutines for performance.......................................................................524 19.7 Using json for storage..........................................................................................527 19.8 Multiprocessing on many machines.....................................................................528 19.9 Using a ProxyStore..............................................................................................532 19.10 Summary and enhancements.............................................................................536 Chapter 20—Go in Google App Engine...........................................................................538 20.1 What is Google App Engine ?..............................................................................538 20.2 Go in the cloud ..................................................................................................540 20.3 Installation of the Go App Engine SDK: the development environment for Go ..540 20.3.1. Installation..............................................................................................540 20.3.2. Checking and testing ..............................................................................542 20.4 Building your own Hello world app ...................................................................543 20.4.1 Map structure—Creating a simple http-handler.......................................543 20.4.2 Creating the configuration file app.yaml ..................................................544 20.4.3 Iterative development...............................................................................548 20.4.4. Integrating with the GoClipse IDE.........................................................548 20.5 Using the Users service and exploring its API ......................................................549 20.6 Handling forms...................................................................................................551 20.7 Using the datastore..............................................................................................552 20.8 Uploading to the cloud ......................................................................................556 Chapter 21—Real World Uses of Go ................................................................................559 21.1 Heroku—a highly available consistent data store in Go. .....................................559 21.2 MROffice—a VOIP system for call centers in Go. ..............................................561 21.3 Atlassian—a virtual machine cluster management system....................................562 21.4 Camlistore—a content addressable storage system...............................................563 21.5 Other usages of the Go language. ........................................................................563 APPENDICES..................................................................................................................567 (A) CODE REFERENCE ..........................................................................................567 (B)CUTE GO QUOTES............................................................................................571 GO QUOTES: TRUE BUT NOT SO CUTE...................................................572 (C) LIST OF CODE EXAMPLES (Listings)..............................................................572 (E) References in the text to Go—packages.................................................................583 (F) References in the text to Go—tools .......................................................................586 (G) Answers to Questions ...........................................................................................586 (H) ANSWERS TO EXERCISES...............................................................................590 (I) BIBLIOGRAPHY (Resources and References).......................................................593 Index.............................................................................................................................597