%%% -*-BibTeX-*- %%% ==================================================================== %%% BibTeX-file{ %%% author = "Nelson H F Beebe", %%% version = "0.10", %%% date = "17 March 2026", %%% time = "07:25:02 MDT", %%% filename = "go.bib", %%% address = "University of Utah %%% Department of Mathematics, 110 LCB %%% 155 S 1400 E RM 233 %%% Salt Lake City, UT 84112-0090 %%% USA", %%% telephone = "+1 801 581 5254", %%% URL = "https://www.math.utah.edu/~beebe", %%% checksum = "27074 4709 24319 229562", %%% email = "beebe at math.utah.edu, beebe at acm.org, %%% beebe at computer.org (Internet)", %%% codetable = "ISO/ASCII", %%% keywords = "bibliography; BibTeX; Go programming %%% language", %%% license = "public domain", %%% supported = "yes", %%% docstring = "This is a bibliography of publications about %%% the computer programming language, Go. %%% %%% At version 0.10, the year coverage looked %%% like this: %%% %%% 2012 ( 1) 2017 ( 17) 2022 ( 5) %%% 2013 ( 0) 2018 ( 12) 2023 ( 3) %%% 2014 ( 1) 2019 ( 6) 2024 ( 0) %%% 2015 ( 1) 2020 ( 3) 2025 ( 1) %%% 2016 ( 9) 2021 ( 8) 2026 ( 1) %%% %%% Article: 11 %%% Book: 52 %%% InProceedings: 5 %%% %%% Total entries: 68 %%% %%% Spelling has been verified with the UNIX %%% spell and GNU ispell programs using the %%% exception dictionary stored in the companion %%% file with extension .sok. %%% %%% BibTeX citation tags are uniformly chosen as %%% name:year:abbrev, where name is the family %%% name of the first author or editor, year is a %%% 4-digit number, and abbrev is a 3-letter %%% condensation of important title %%% words. Citation tags were automatically %%% generated by software developed for the %%% BibNet Project. %%% %%% In this bibliography, entries are sorted %%% first by ascending year, and within each %%% year, alphabetically by author or editor, and %%% then, if necessary, by the 3-letter %%% abbreviation at the end of the BibTeX %%% citation tag, using the bibsort -byyear %%% utility. Year order has been chosen to make %%% it easier to identify the most recent work. %%% %%% The checksum field above contains a CRC-16 %%% checksum as the first value, followed by the %%% equivalent of the standard UNIX wc (word %%% count) utility output of lines, words, and %%% characters. This is produced by Robert %%% Solovay's checksum utility.", %%% } %%% ==================================================================== @Preamble{ "\input bibnames.sty " # "\input path.sty " # "\def \TM {${}^{\sc TM}$} " # "\ifx \undefined \booktitle \def \booktitle #1{{{\em #1}}} \fi" # "\ifx \undefined \pkg \def \pkg #1{{{\tt #1}}} \fi" # "\hyphenation{ }" } %%% ==================================================================== %%% Acknowledgement abbreviations: @String{ack-nhfb = "Nelson H. F. Beebe, University of Utah, Department of Mathematics, 110 LCB, 155 S 1400 E RM 233, Salt Lake City, UT 84112-0090, USA, Tel: +1 801 581 5254, e-mail: \path|beebe@math.utah.edu|, \path|beebe@acm.org|, \path|beebe@computer.org| (Internet), URL: \path|https://www.math.utah.edu/~beebe/|"} %%% ==================================================================== %%% Institution abbreviations: @String{inst-UTAH-MATH = "University of Utah, Department of Mathematics"} @String{inst-UTAH-MATH:adr = "Salt Lake City, UT 84112-0090, USA"} %%% ==================================================================== %%% Journal abbreviations: @String{j-CACM = "Communications of the ACM"} @String{j-IEEE-SOFTWARE = "IEEE Software"} @String{j-IEEE-TRANS-NETWORKING = "IEEE\slash ACM Transactions on Networking"} @String{j-IEEE-TRANS-SOFTW-ENG = "IEEE Transactions on Software Engineering"} @String{j-INT-J-SOFTW-TOOLS-TECHNOL-TRANSFER = "International Journal on Software Tools for Technology Transfer (STTT)"} @String{j-J-OPEN-SOURCE-SOFT = "Journal of Open Source Software"} @String{j-J-SYST-SOFTW = "The Journal of Systems and Software"} @String{j-OPER-SYS-REV = "Operating Systems Review"} @String{j-PACMPL = "Proceedings of the ACM on Programming Languages (PACMPL)"} @String{j-SIGADA-LETTERS = "ACM SIGADA Ada Letters"} @String{j-SOFTWAREX = "SoftwareX"} @String{j-SPE = "Soft\-ware\emdash Prac\-tice and Experience"} %%% ==================================================================== %%% Publishers and their addresses: @String{pub-APRESS = "Apress"} @String{pub-APRESS:adr = "Berkeley, CA, USA"} @String{pub-AW = "Ad{\-d}i{\-s}on-Wes{\-l}ey"} @String{pub-AW:adr = "Reading, MA, USA"} @String{pub-IEEE = "IEEE Computer Society Press"} @String{pub-IEEE:adr = "1109 Spring Street, Suite 300, Silver Spring, MD 20910, USA"} @String{pub-MANNING = "Manning Publications"} @String{pub-MANNING:adr = "Greenwich, CT, USA"} @String{pub-NO-STARCH = "No Starch Press"} @String{pub-NO-STARCH:adr = "San Francisco, CA, USA"} @String{pub-ORA-MEDIA = "O'Reilly Media, Inc."} @String{pub-ORA-MEDIA:adr = "1005 Gravenstein Highway North, Sebastopol, CA 95472, USA"} @String{pub-PACKT = "Packt Publishing"} @String{pub-PACKT:adr = "Birmingham, UK"} @String{pub-SV = "Spring{\-}er-Ver{\-}lag"} @String{pub-SV:adr = "Berlin, Germany~/ Heidelberg, Germany~/ London, UK~/ etc."} %%% ==================================================================== %%% Bibliography entriesed sorted by year, and then by citation label, %%% with ``bibsort -byyear'': @Book{Anonymous:2012:GPL, author = "Anonymous", title = "The {Go} Programming Language Phrasebook", publisher = "Addison-Wesley Professional", address = "????", pages = "????", year = "2012", ISBN = "0-13-291896-X", ISBN-13 = "978-0-13-291896-1", bibdate = "Thu Apr 22 07:17:47 2021", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, } @Article{Meyerson:2014:GPL, author = "Jeff Meyerson", title = "The {Go} Programming Language", journal = j-IEEE-SOFTWARE, volume = "31", number = "5", pages = "104--104", month = sep # "\slash " # oct, year = "2014", CODEN = "IESOEG", DOI = "https://doi.org/10.1109/MS.2014.127", ISSN = "0740-7459 (print), 1937-4194 (electronic)", ISSN-L = "0740-7459", bibdate = "Thu Feb 12 15:59:37 MST 2015", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/ieeesoft.bib", URL = "http://csdl.computer.org/csdl/mags/so/2014/05/mso2014050104.html", abstract-URL = "http://csdl.computer.org/csdl/mags/so/2014/05/mso2014050104-abs.html", acknowledgement = ack-nhfb, fjournal = "IEEE Software", journal-URL = "https://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=52", journalabr = "IEEE Software", } @Book{Varghese:2015:WDG, author = "Shiju Varghese", title = "{Web} Development with {Go}: Building Scalable {Web} Apps and {RESTful} Services", publisher = pub-APRESS, address = pub-APRESS:adr, pages = "xx + 289 + 69", year = "2015", ISBN = "1-4842-1052-2", ISBN-13 = "978-1-4842-1052-9", LCCN = "????", bibdate = "Thu Apr 22 10:58:58 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Take a deep dive into web development using the Go programming language to build web apps and RESTful services to create reliable and efficient software. Web Development with Go provides Go language fundamentals and then moves on to advanced web development concepts and successful deployment of Go web apps to the cloud. Web Development with Go will teach you how to develop scalable real-world web apps, RESTful services, and backend systems with Go. The book starts off by covering Go programming language fundamentals as a prerequisite for web development. After a thorough understanding of the basics, the book delves into web development using the built-in package, net/http. With each chapter you'll be introduced to new concepts for gradually building a real-world web system. The book further shows you how to integrate Go with other technologies. For example, it provides an overview of using MongoDB as a means of persistent storage, and provides an end-to-end REST API sample as well.", acknowledgement = ack-nhfb, subject = "Computer science; Programming languages (Electronic computers); Programming Languages, Compilers, Interpreters; Computer science; Programming languages (Electronic computers)", tableofcontents = "1: Getting Started With Go \\ 2: Go Fundamentals \\ 3: User Defined Types and Concurrency \\ 4: Getting Started with Web Development \\ 5: Go Templates \\ 6: HTTP Middleware \\ 7: Authentication for Web Apps \\ 8: Persistence with MongoDB \\ 9: Building RESTful Services \\ 10: Testing Go Applications \\ 11: Building Go Web Applications on Google Cloud", } @Book{Butcher:2016:GP, author = "Matt Butcher and Matt Farina", title = "Go in practice", publisher = pub-MANNING, address = pub-MANNING:adr, pages = "xxi + 287", year = "2016", ISBN = "1-63343-007-3", ISBN-13 = "978-1-63343-007-5", LCCN = "QA76.73.G63 B87 2016", bibdate = "Thu Apr 22 10:30:10 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://proquest.tech.safaribooksonline.de/9781633430075", abstract = "Go in Practice guides you through 70 real-world techniques in key areas like package management, microservice communication, and more. Following a cookbook-style Problem/Solution/Discussion format, this practical handbook builds on the foundational concepts of the Go language and introduces specific strategies you can use in your day-to-day applications. About the Technology Go may be the perfect systems language. Built with simplicity, concurrency, and modern applications in mind, Go provides the core tool set for rapidly building web, cloud, and systems applications. If you know a language like Java or C\#, it's easy to get started with Go; the trick is finding the practical dirt-under-the-fingernails techniques that you need to build production-ready code. About the Book Go in Practice guides you through dozens of real-world techniques in key areas. Following a cookbook-style Problem/Solution/Discussion format, this practical handbook builds on the foundational concepts of the Go language and introduces specific strategies you can use in your day-to-day applications. You'll learn techniques for building web services, using Go in the cloud, testing and debugging, routing, network applications, and much more. After finishing this book, you will be ready to build sophisticated cloud-native Go applications. What's Inside Dozens of specific, practical Golang techniques Using Go for devops and cloudops Writing RESTful web services and microservices Practical web dev techniques About the Reader Written for experienced developers who have already started exploring Go and want to use it effectively in a production setting. About the Authors Matt Butcher is a software architect at Deis. Matt Farina is a Principal Engineer in the Advanced Technology Group at Hewlett Packard Enterprise. They are both authors, speakers, and regular open source contributors.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Go (Computer program language); Go (Computer program language)", tableofcontents = "Part 1. Background and fundamentals. Getting into Go \\ A solid foundation \\ Concurrency in Go \\ Part 2. Well-rounded applications. Handling errors and panic \\ Debugging and testing \\ Part 3. An interface for your applications. HTML and email template patterns \\ Serving and receiving assets and forms \\ Working with web services \\ Part 4. Taking your applications to the cloud. Using the cloud \\ Communication between cloud services \\ Reflection and code generation", } @Book{Chang:2016:GWP, author = "Sau Sheong Chang", title = "{Go} {Web} programming", publisher = pub-MANNING, address = pub-MANNING:adr, pages = "xx + 292", year = "2016", ISBN = "1-61729-256-7", ISBN-13 = "978-1-61729-256-9", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 10:28:32 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://proquest.tech.safaribooksonline.de/9781617292569", abstract = "Go Web Programming teaches you how to build scalable, high-performance web applications in Go using modern design principles. About the Technology The Go language handles the demands of scalable, high-performance web applications by providing clean and fast compiled code, garbage collection, a simple concurrency model, and a fantastic standard library. It's perfect for writing microservices or building scalable, maintainable systems. About the Book Go Web Programming teaches you how to build web applications in Go using modern design principles. You'll learn how to implement the dependency injection design pattern for writing test doubles, use concurrency in web applications, and create and consume JSON and XML in web services. Along the way, you'll discover how to minimize your dependence on external frameworks, and you'll pick up valuable productivity techniques for testing and deploying your applications. What's Inside Basics Testing and benchmarking Using concurrency Deploying to standalone servers, PaaS, and Docker Dozens of tips, tricks, and techniques About the Reader This book assumes you're familiar with Go language basics and the general concepts of web development. About the Author Sau Sheong Chang is Managing Director of Digital Technology at Singapore Power and an active contributor to the Ruby and Go communities.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Web applications; Go (Computer program language); Development; Programming; Go (Computer program language); Web applications.", } @Book{Donovan:2016:GPL, author = "Alan A. A. Donovan and Brian W. Kernighan", title = "The {Go} Programming Language", publisher = pub-AW, address = pub-AW:adr, pages = "xvii + 380", year = "2016", ISBN = "0-13-419044-0 (paperback)", ISBN-13 = "978-0-13-419044-0 (paperback)", LCCN = "QA76.73.G63 D66 2016", bibdate = "Fri Oct 11 12:07:52 MDT 2019", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/master.bib; https://www.math.utah.edu/pub/tex/bib/unix.bib; z3950.loc.gov:7090/Voyager", series = "Addison-Wesley professional computing series", URL = "https://www.pearson.com/us/higher-education/program/Donovan-Go-Programming-Language-The/PGM234922.html", abstract = "Go may be our generation's most important new programming language. It is exceptionally expressive, highly efficient in both compilation and execution, and enables the development of extremely reliable and robust programs. It shares the same spirit programmers once found in C: it helps serious professional programmers achieve maximum effect with minimum means. Now, Go shares something else with C, too. Brian Kernighan, who wrote the world's most respected and useful C primer for working programmers, has just done the same for Go. Together with Google Go insider Alan Donovan, Kernighan explains what Go does and doesn't borrow from C; the great ideas it borrows from other modern languages; and how it avoids features that lead to unnecessary complexity and unreliable code. Throughout, their short, carefully-crafted code examples demonstrate today's most effective Go idioms, so you can start using Go effectively right from the beginning, and quickly take advantage of its full power. All code has been extensively reviewed by Go's creators at Google for both completeness and accuracy.", acknowledgement = ack-nhfb, author-dates = "1976--", shorttableofcontents = "1: Tutorial \\ 2: Program structure \\ 3: Basic data types \\ 4: Composite types \\ 5: Functions \\ 6: Methods \\ 7: Interfaces \\ 8: Goroutines and channels \\ 9: Concurrency with shared variables \\ 10: Packages and the Go tool \\ 11: Testing \\ 12: Reflection \\ 13: Low-level programming", subject = "Go (Computer program language); Open source software; Programming; G (Lenguaje de programaci\'on para computadora); Programaci\'on de computadoras", tableofcontents = "Preface / xi \\ 1: Tutorial / 1 \\ 1.1 Hello, World / 1 \\ 1.2 Command-Line Arguments / 4 \\ 1.3 Finding Duplicate Lines / 8 \\ 1.4 Animated GIFs / 13 \\ 1.5 Fetching a URL / 15 \\ 1.6 Fetching URLs Concurrently / 17 \\ 1.7 A Web Server / 19 \\ 1.8 Loose Ends / 23 \\ 2: Program Structure / 27 \\ 2.1 Names / 27 \\ 2.2 Declarations / 28 \\ 2.3 Variables / 30 \\ 2.4 Assignments / 36 \\ 2.5 Type Declarations / 39 \\ 2.6 Packages and Files / 41 \\ 2.7 Scope / 45 \\ 3: Basic Data Types / 51 \\ 3.1 Integers / 51 \\ 3.2 Floating-Point Numbers / 56 \\ 3.3 Complex Numbers / 61 \\ 3.4 Booleans / 63 \\ 3.5 Strings / 64 \\ 3.6 Constants / 75 \\ 4: Composite Types / 81 \\ 4.1 Arrays / 81 \\ 4.2 Slices / 84 \\ 4.3 Maps / 93 \\ 4.4 Structs / 99 \\ 4.5 JSON / 107 \\ 4.6 Text and HTML Templates / 113 \\ 5: Functions / 119 \\ 5.1 Function Declarations / 119 \\ 5.2 Recursion / 121 \\ 5.3 Multiple Return Values / 124 \\ 5.4 Errors / 127 \\ 5.5 Function Values / 132 \\ 5.6 Anonymous Functions / 135 \\ 5.7 Variadic Functions / 142 \\ 5.8 Deferred Function Calls / 143 \\ 5.9 Panic / 148 \\ 5.10 Recover / 151 \\ 6:. Methods / 155 \\ 6.1 Method Declarations / 155 \\ 6.2 Methods with a Pointer Receiver / 158 \\ 6.3 Composing Types by Struct Embedding / 161 \\ 6.4 Method Values and Expressions / 164 \\ 6.5 Example: Bit Vector Type / 165 \\ 6.6 Encapsulation / 168 \\ 7: Interfaces / 171 \\ 7.1 Interfaces as Contracts / 171 \\ 7.2 Interface Types / 174 \\ 7.3 Interface Satisfaction / 175 \\ 7.4 Parsing Flags with flag.Value / 179 \\ 7.5 Interface Values / 181 \\ 7.6 Sorting with sort.Interface / 186 \\ 7.7 The http.Handler Interface / 191 \\ 7.8 The error Interface / 196 \\ 7.9 Example: Expression Evaluator / 197 \\ 7.10 Type Assertions / 205 \\ 7.11 Discriminating Errors with Type Assertions / 206 \\ 7.12 Querying Behaviors with Interface Type Assertions / 208 \\ 7.13 Type Switches / 210 \\ 7.14 Example: Token-Based XML Decoding / 213 \\ 7.15 A Few Words of Advice / 216 \\ 8: Goroutines and Channels / 217 \\ 8.1 Goroutines / 217 \\ 8.2 Example: Concurrent Clock Server / 219 \\ 8.3 Example: Concu rent Echo Server / 222 \\ 8.4 Channels / 225 \\ 8.5 Looping in Parallel / 234 \\ 8.6 Example: Concurrent Web Crawler / 239 \\ 8.7 Multiplexing with select / 244 \\ 8.8 Example: Concurrent Directory Traversal / 247 \\ 8.9 Cancellation / 251 \\ 8.10 Example: Chat Server / 253 \\ 9: Concurrency with Shared Variables / 257 \\ 9.1 Race Conditions / 257 \\ 9.2 Mutual Exclusion: sync.Mutex / 262 \\ 9.3 Read/Write Mutexes: sync.RWMutex / 266 \\ 9.4 Memory Synchronization / 267 \\ 9.5 Lazy Initialization: sync.Once / 268 \\ 9.6 The Race Detector / 271 \\ 9.7 Example: Concurrent Non-Blocking Cache / 272 \\ 9.8 Goroutines and Threads / 280 \\ 10: Packages and the Go Tool / 283 \\ 10.1 Introduction / 283 \\ 10.2 Import Paths / 284 \\ 10.3 The Package Declaration / 285 \\ 10.4 Import Declarations / 285 \\ 10.5 Blank Imports / 286 \\ 10.6 Packages and Naming / 289 \\ 10.7 The Go Tool / 290 \\ 11: Testing / 301 \\ 11.1 The go test Tool / 302 \\ 11.2 Test Functions / 302 \\ 11.3 Coverage / 318 \\ 11.4 Benchmark Functions / 321 \\ 11.5 Profiling / 323 \\ 11.6 Example Functions / 326 \\ 12: Reflection / 329 \\ 12.1 Why Reflection? / 329 \\ 12.2 reflect.Type and reflect.Value / 330 \\ 12.3 Display, a Recursive Value Printer / 333 \\ 12.4 Example: Encoding S-Expressions / 338 \\ 12.5 Setting Variables with reflect.Value / 341 \\ 12.6 Example: Decoding S-Expressions / 344 \\ 12.7 Accessing Struct Field Tags / 348 \\ 12.8 Displaying the Methods of a Type / 351 \\ 12.9 A Word of Caution / 352 \\ 13: Low-Level Programming / 353 \\ 13.1 unsafe.Sizeof, Alignof, and Offsetof / 354 \\ 13.2 unsafe.Pointer / 356 \\ 13.3 Example: Deep Equivalence / 358 \\ 13.4 Calling C Code with cgo / 361 \\ 13.5 Another Word of Caution / 366 \\ Index / 367", } @Book{Doxsey:2016:IGB, author = "Caleb Doxsey", title = "Introducing {Go}: Build Reliable, Scalable Programs", publisher = pub-ORA-MEDIA, address = pub-ORA-MEDIA:adr, pages = "x + 111", year = "2016", ISBN = "1-4783-5582-4, 1-4919-4195-2 (paperback)", ISBN-13 = "978-1-4783-5582-3, 978-1-4919-4195-9 (paperback)", LCCN = "QA76.73.G63 D69 2016", bibdate = "Thu Apr 22 10:07:34 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://proquest.tech.safaribooksonline.de/9781491941997", abstract = "Perfect for beginners familiar with programming basics, this hands-on guide provides an easy introduction to Go, the general-purpose programming language from Google. Author Caleb Doxsey covers the language's core features with step-by-step instructions and exercises in each chapter to help you practice what you learn.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Go (Computer program language); Go (Computer program language)", tableofcontents = "Introduction \\ 1. Getting started \\ 2. Types \\ 3. Variables \\ 4. Control structures \\ 5. Arrays, slices, and maps \\ 6. Functions \\ 7. Structs and interfaces \\ 8. Packages \\ 9. Testing \\ 10. Concurrency \\ 11. Next steps \\ A. Answers", } @InProceedings{Irawan:2016:TCG, author = "Edbert Wijaya Irawan and Bayu Hendradjaya and Wikan Danar Sunindyo", editor = "{IEEE}", booktitle = "{2016 International Conference on Data and Software Engineering (ICoDSE)}", title = "Test case generation method for {Go} language", publisher = pub-IEEE, address = pub-IEEE:adr, pages = "1--5", year = "2016", DOI = "https://doi.org/10.1109/ICODSE.2016.7936140", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, } @Book{Kennedy:2016:GA, author = "William Kennedy", title = "{Go} in action", publisher = pub-MANNING, address = pub-MANNING:adr, pages = "xix + 241", year = "2016", ISBN = "1-61729-178-1", ISBN-13 = "978-1-61729-178-4 pocket", LCCN = "????", bibdate = "Thu Apr 22 07:29:42 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Go in Action introduces the Go language, guiding you from inquisitive developer to Go guru. The book begins by introducing the unique features and concepts of Go. Then, you'll get hands-on experience writing real-world applications including websites and network servers, as well as techniques to manipulate and convert data at speeds that will make your friends jealous. -- Provided by publisher.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Open source software", tableofcontents = "Introducing Go \\ Go quick-start \\ Packaging and tooling \\ Arrays, slices, and maps \\ Go's type system \\ Concurrency \\ Concurrency patterns \\ Standard library \\ Testing and benchmarking", } @Book{Kozyra:2016:GBW, author = "Nathan Kozyra", title = "{Go}: Building {Web} Applications (1)", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "665", year = "2016", ISBN = "1-78712-349-9, 1-78712-659-5 (e-book)", ISBN-13 = "978-1-78712-659-6", LCCN = "TK5105.8885.L674", bibdate = "Thu Apr 22 10:54:49 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://www.myilibrary.com?id=952170", acknowledgement = ack-nhfb, } @Book{Ryer:2016:GPB, author = "Mat Ryer", title = "{Go} programming blueprints: build real-world, production-ready solutions in {Go} using cutting-edge technology and techniques", publisher = pub-PACKT, address = pub-PACKT:adr, edition = "Second", pages = "viii + 376", year = "2016", ISBN = "1-78646-247-8, 1-78646-894-8", ISBN-13 = "978-1-78646-247-3, 978-1-78646-894-9", LCCN = "????", bibdate = "Thu Apr 22 10:47:38 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Build real-world, production-ready solutions in Go using cutting-edge technology and techniques. About This Book Get up to date with Go and write code capable of delivering massive world-class scale performance and availability Learn to apply the nuances of the Go language, and get to know the open source community that surrounds it to implement a wide range of start-up quality projects Write interesting and clever but simple code, and learn skills and techniques that are directly transferrable to your own projects. Who This Book Is For. If you are familiar with Go and are want to put your knowledge to work, then this is the book for you. Go programming knowledge is a must. What You Will Learn Build quirky and fun projects from scratch while exploring patterns, practices, and techniques, as well as a range of different technologies Create websites and data services capable of massive scale using Go's net/http package, exploring RESTful patterns as well as low-latency WebSocket APIs Interact with a variety of remote web services to consume capabilities ranging from authentication and authorization to a fully functioning thesaurus Develop high-quality command-line tools that utilize the powerful shell capabilities and perform well using Go's in-built concurrency mechanisms Build microservices for larger organizations using the Go Kit library Implement a modern document database as well as high-throughput messaging queue technology to put together an architecture that is truly ready to scale Write concurrent programs and gracefully manage the execution of them and communication by smartly using channels Get a feel for app deployment using Docker and Google App Engine. In Detail. Go is the language of the Internet age, and the latest version of Go comes with major architectural changes. Implementation of the language, runtime, and libraries has changed significantly. The compiler and runtime are now written entirely in Go. The garbage collector is now concurrent and provides dramatically lower pause times by running in parallel with other Go routines when possible.This book will show you how to leverage all the latest features and much more. This book shows you how to build powerful systems and drops you into real-world situations. You will learn to develop high-quality command-line tools that utilize the powerful shell capabilities and perform well using Go's in-built concurrency mechanisms. Scale, performance, and high availability lie at the heart of our projects, and the lessons learned throughout this book will arm you with everything you need to build world-class solutions. You will get a feel for app deployment using Docker and Google App Engine. Each project could form the basis of a start-up, which means they are directly applicable to modern software markets.Style and approach. This book provides fun projects that involve building applications from scratch. These projects will teach you to build chat applications, a distributed system, and a recommendation system.", acknowledgement = ack-nhfb, tableofcontents = "Preface \\ 1: Chat Application with Web Sockets \\ A simple web server \\ Separating views from logic using templates \\ Doing things once \\ Using your own handlers \\ Properly building and executing Go programs \\ Modeling a chat room and clients on the server \\ Modeling the client \\ Modeling a room \\ Concurrency programming using idiomatic Go \\ Turning a room into an HTTP handler \\ Using helper functions to remove complexity \\ Creating and using rooms \\ Building an HTML and JavaScript chat client \\ Getting more out of templates \\ Tracing code to get a look under the hood \\ Writing a package using TDD \\ Interfaces \\ Unit tests \\ Red-green testing \\ Implementing the interface \\ Unexported types being returned to users \\ Using our new trace package \\ Making tracing optional \\ Clean package APIs \\ Summary \\ 2: Adding User Accounts \\ Handlers all the way down \\ Making a pretty social sign-in page \\ Endpoints with dynamic paths \\ Getting started with OAuth2 \\ Open source OAuth2 packages \\ Tell the authorization providers about your app \\ Implementing external logging in \\ Logging in \\ Handling the response from the provider \\ Presenting the user data \\ Augmenting messages with additional data \\ Summary \\ 3: Three Ways to Implement Profile Pictures \\ Avatars from the OAuth2 server \\ Getting the avatar URL \\ Transmitting the avatar URL \\ Adding the avatar to the user interface \\ Logging out \\ Making things prettier \\ Implementing Gravatar \\ Abstracting the avatar URL process \\ The auth service and the avatar's implementation \\ Using an implementation \\ The Gravatar implementation \\ Uploading an avatar picture \\ User identification \\ An upload form \\ Handling the upload \\ Serving the images \\ The Avatar implementation for local files \\ Supporting different file types \\ Refactoring and optimizing our code \\ Replacing concrete types with interfaces \\ Changing interfaces in a test-driven way \\ Fixing the existing implementations \\ Global variables versus fields \\ Implementing our new design \\ Tidying up and testing \\ Combining all three implementations \\ Summary \\ 4: Command-Line Tools to Find Domain Names \\ Pipe design for command-line tools \\ Five simple programs \\ Sprinkle \\ Domainify \\ Coolify \\ Synonyms \\ Using environment variables for configuration \\ Consuming a web API \\ Getting domain suggestions \\ Composing all five programs \\ One program to rule them all \\ Summary \\ 5: Building Distributed Systems and Working with Flexible Data \\ The system design \\ The database design \\ Installing the environment \\ Introducing NSQ \\ NSQ driver for Go \\ Introducing MongoDB \\ MongoDB driver for Go \\ Starting the environment \\ Reading votes from Twitter \\ Authorization with Twitter \\ Extracting the connection \\ Reading environment variables \\ Reading from MongoDB \\ Reading from Twitter \\ Signal channels \\ Publishing to NSQ \\ Gracefully starting and stopping programs \\ Testing", } @Book{Vivien:2016:LGPh, author = "Vladimir Vivien", title = "Learning {Go} programming: an insightful guide to learning the {Go} programming language", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "ix + 327", year = "2016", ISBN = "1-78439-233-2, 1-78439-543-9", ISBN-13 = "978-1-78439-233-8, 978-1-78439-543-8", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 10:56:46 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://proquest.tech.safaribooksonline.de/9781784395438", abstract = "An insightful guide to learning the Go programming language. About This Book: Insightful coverage of Go programming syntax, constructs, and idioms to help you understand Go code effectively. Push your Go skills, with topics such as, data types, channels, concurrency, object-oriented Go, testing, and network programming. Each chapter provides working code samples that are designed to help reader quickly understand respective topic. Who This Book Is For: If you have prior exposure to programming and are interested in learning the Go programming language, this book is designed for you. It will quickly run you through the basics of programming to let you exploit a number of features offered by Go programming language. What You Will Learn: Install and configure the Go development environment to quickly get started with your first program. Use the basic elements of the language including source code structure, variables, constants, and control flow primitives to quickly get started with Go Gain practical insight into the use of Go's type system including basic and composite types such as maps, slices, and structs. Use interface types and techniques such as embedding to create idiomatic object-oriented programs in Go. Develop effective functions that are encapsulated in well-organized package structures with support for error handling and panic recovery. Implement goroutine, channels, and other concurrency primitives to write highly-concurrent and safe Go code. Write tested and benchmarked code using Go's built test tools. Access OS resources by calling C libraries and interact with program environment at runtime. In Detail: The Go programming language has firmly established itself as a favorite for building complex and scalable system applications. Go offers a direct and practical approach to programming that let programmers write correct and predictable code using concurrency idioms and a full-featured standard library. This is a step-by-step, practical guide full of real world examples to help you get started with Go in no time at all. We start off by understanding the fundamentals of Go, followed by a detailed description of the Go data types, program structures and Maps. After this, you learn how to use Go concurrency idioms to avoid pitfalls and create programs that are exact in expected behavior. Next, you will be familiarized with the tools and libraries that are available in Go for writing and exercising tests, benchmarking, and code coverage. Finally, you will be able to utilize some of the most important features of GO such as, Network Programming and OS integration to build efficient applications. All the concepts are explained in a crisp and concise manner and by the end of this book, you will be able to create highly efficient programs that you can deploy over cloud. Style and approach: The book is written to serve as a reader-friendly step-by-step guide to learning the Go programming language. Each topic is sequentially introduced to build on previous materials covered. Every concept is introduced with easy-to-follow code examples that focus on maximizing the understanding of the topic at hand.", acknowledgement = ack-nhfb, subject = "Computer programming; Go (Computer program language)", tableofcontents = "A first step in Go \\ Go language essentials \\ Go control flow \\ Data types \\ Functions in Go \\ Go packages and programs \\ Composite types \\ Methods, interfaces, objects \\ Concurrency \\ Data IO in Go \\ Writing networked services \\ Code testing", } @Book{Andrawos:2017:CNP, author = "Mina Andrawos and Martin Helmich", title = "Cloud native programming with {Golang}: develop microservice-based high performance web apps for the cloud with {Go}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "vi + 385", year = "2017", ISBN = "1-78712-598-X (print), 1-78712-796-6 (e-book)", ISBN-13 = "978-1-78712-598-8 (print), 978-1-78712-796-8 (e-book)", LCCN = "QA76.76.D47; QA76.73.G63 .A537 2017", bibdate = "Thu Apr 22 09:54:38 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://proquestcombo.safaribooksonline.com/9781787125988", abstract = "Discover practical techniques to build cloud-native apps that are scalable, reliable, and always available. About This Book Build well-designed and secure microservices. Enrich your microservices with continuous integration and monitoring. Containerize your application with Docker Deploy your application to AWS. Learn how to utilize the powerful AWS services from within your application Who This Book Is For This book is for developers who want to begin building secure, resilient, robust, and scalable Go applications that are cloud native. Some knowledge of the Go programming language should be sufficient. To build the front-end application, you will also need some knowledge of JavaScript programming. What You Will Learn Understand modern software applications architectures Build secure microservices that can effectively communicate with other services Get to know about event-driven architectures by diving into message queues such as Kafka, Rabbitmq, and AWS SQS. Understand key modern database technologies such as MongoDB, and Amazon's DynamoDB Leverage the power of containers Explore Amazon cloud services fundamentals Know how to utilize the power of the Go language to access key services in the Amazon cloud such as S3, SQS, DynamoDB and more. Build front-end applications using ReactJS with Go Implement CD for modern applications In Detail Awarded as one of the best books of all time by BookAuthority, Cloud Native Programming with Golang will take you on a journey into the world of microservices and cloud computing with the help of Go. Cloud computing and microservices are two very important concepts in modern software architecture. They represent key skills that ambitious software engineers need to acquire in order to design and build software applications capable of performing and scaling. Go is a modern cross-platform programming language that is very powerful yet simple; it is an excellent choice for microservices and cloud applications. Go is gaining more and more popularity, and becoming a very attractive skill. This book starts by covering the software architectural patterns of cloud applications, as well as practical concepts regarding how to scale, distribute, and deploy those applications. You will also learn how to build a JavaScript-based front-end for your application, using TypeScript and React. From there, we dive into commercial cloud offerings by covering AWS. Finally, we conclude our book by providing some overviews of other \ldots{}", acknowledgement = ack-nhfb, subject = "Application software; Development; Cloud computing; Development; Cloud computing.", tableofcontents = "Preface \\ 1: Modern Microservice Architectures \\ Why Go? \\ Basic design goals \\ Cloud service models \\ Cloud application architecture patterns \\ The twelve-factor app \\ What are microservices? \\ Deploying microservices \\ REST web services and asynchronous messaging \\ The MyEvents platform \\ Summary \\ 2: Building Microservices Using Rest APIs \\ The background \\ So, what are microservices? \\ Microservices internals \\ RESTful Web APIs \\ Gorilla web toolkit \\ Implementing a Restful API \\ Persistence layer \\ MongoDB \\ MongoDB and the Go language \\ Implementing our RESTful APIs handler functions \\ Summary \\ 3: Securing Microservices \\ HTTPS \\ Symmetric cryptography \\ Symmetric-key algorithms in HTTPS \\ Asymmetric cryptography \\ Asymmetrical cryptography in HTTPS \\ Secure web services in Go \\ Obtaining a certificate \\ OpenSSL \\ generate\_cert.go \\ Building an HTTPS server in Go \\ Summary \\ 4: Asynchronous Microservice Architectures Using Message Queues \\ The publish/subscribe pattern \\ Introducing the booking service \\ Event collaboration \\ Implementing publish/subscribe with RabbitMQ \\ The Advanced Message Queueing Protocol \\ RabbitMQ quickstart with Docker \\ Advanced RabbitMQ setups \\ Connecting RabbitMQ with Go \\ Publishing and subscribing to AMQP messages \\ Building an event emitter \\ Building an event subscriber \\ Building the booking service \\ Event sourcing \\ Implementing publish/subscribe and event sourcing with Apache Kafka \\ Kafka quickstart with Docker \\ Basic principles of Apache Kafka \\ Connecting to Kafka with Go \\ Publishing messages with Kafka \\ Consuming messages from Kafka \\ Summary \\ 5: Building a Frontend with React \\ Getting started with React \\ Setting up Node.js and TypeScript \\ Initializing the React project \\ Basic React principles \\ Kick-starting the MyEvents frontend \\ Implementing the event list \\ Bringing your own client \\ Building the event list components \\ Enabling CORS in the backend services \\ Testing the event list \\ Adding routing and navigation \\ Implementing the booking process \\ Summary \\ 6: Deploying Your Application in Containers \\ What are containers? \\ Introduction to Docker \\ Running simple containers \\ Building your own images \\ Networking containers \\ Working with volumes \\ Building containers \\ Building containers for the backend services \\ Using static compilation for smaller images \\ Building containers for the frontend \\ Deploying your application with Docker Compose \\ Publishing your images \\ Deploying your application to the cloud \\ Introduction to Kubernetes \\ Setting up a local Kubernetes with Minikube \\ Core concepts of Kubernetes \\ Services \\ Persistent volumes \\ Deploying MyEvents to Kubernetes \\ Creating the RabbitMQ broker \\ Creating the MongoDB containers \\ Making images available to Kubernetes \\ Deploying the MyEvents components \\ Configuring HTTP Ingress \\ Summary \\ 7: AWS I \\ Fundamentals, AWS SDK for Go, and EC2 \\ AWS fundamentals \\ The AWS console \\ AWS command-line interface (CLI) \\ AWS regions and zones \\ AWS tags \\ AWS Elastic Beanstalk \\ AWS services \\ AWS SDK for Go \\ Configuring the AWS region \\ Configuring AWS SDK authentication \\ Creating IAM Users \\ Creating IAM Roles \\ The fundamentals of the AWS SDK for Go \\ Sessions \\ Service clients \\ Native datatypes \\ Shared configuration \\ Pagination methods \\ Waiters \\ Handling Errors \\ Elastic Compute Cloud (EC2) \\ Creating EC2 instances \\ Accessing EC2 instances \\ Accessing EC2 instances from a Linux or macOS machine \\ Accessing EC2 from Windows \\ Security groups \\ Summary \\ 8: AWS II \\ S3, SQS, API Gateway, and DynamoDB \\ Simple Storage Service (S3) \\ Configuring S3 \\ Simple Queue Service (SQS) \\ AWS API gateway \\ DynamoDB \\ DynamoDB components \\ Attribute value data types \\ Primary keys \\ Secondary indexes \\ Creating tables \\ The Go language and DynamoDB \\ Summary \\ 9: Continuous Delivery \\ Setting up your project \\ Setting up version control \\ Vendoring your dependencies \\ Using Travis CI \\ Deploying to Kubernetes \\ Using GitLab \\ Setting up GitLab \\ Setting up GitLab CI \\ Summary \\ 10: Monitoring Your Application \\ Setting up Prometheus and Grafana \\ Prometheus's basics \\ Creating an initial Prometheus configuration file \\ Running Prometheus on Docker \\ Running Grafana on Docker \\ Exporting metrics \\ Using the Prometheus client in your Go application \\ Configuring Prometheus scrape targets \\ Exporting custom metrics \\ Running Prometheus on Kubernetes \\ Summary \\ 11: Migration \\ What is a monolithic application? \\ What are microservices? \\ Migrating from monolithic applications to microservices \\ Humans and technology \\ Cutting a monolithic application to pieces \\ How do we break the code? \\ Glue code \\ Microservices design patterns \\ Sacrificial architecture \\ A four-tier engagement platform \\ Bounded contexts in domain-driven designs \\ Data consistency \\ Event-driven architecture for data consistency \\ Events sourcing \\ CQRS \\ Summary \\ 12: Where to Go from Here? \\ Microservices communications \\ Protocol buffers \\ GRPC \\ More on AWS \\ DynamoDB streams \\ Autoscaling on AWS \\ Amazon Relational Database Service \\ Other cloud providers \\ Microsoft Azure \\ Google Cloud PlatformOpenStack \\ Running containers in the cloud \\ Serverless architectures \\ Summary \\ Index", } @Book{Andrawos:2017:MGP, author = "Mina Andrawos", title = "Mastering Go Programming", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "1 streaming video file, approximately 20 hr., 13 min.", year = "2017", ISBN = "1-78646-823-9", ISBN-13 = "978-1-78646-823-9", LCCN = "????", bibdate = "Thu Apr 22 10:04:32 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Master programming with Go by learning how to write idiomatic, effective code About This Video Program like a seasoned expert with one of the great new programming languages Write idiomatic Go the right way, and understand the fundamental mechanics of the language in depth Understand how to develop powerful performant applications and services with Go In Detail Go has moved from the state of tentative to mass adoption. Its C-like speed, simplicity, and power for a growing number of systems level programming domains make it an attractive option for programmers working with older cumbersome, statically typed languages. Golang has entered the space as an entirely viable language for accomplishing a huge array of low level programming and service infrastructure tasks. This video course not only gives you a deep insight into the fundamental mechanics behind the language, but also covers extensive practical topics on Go for modern software architectures. It shows you how to write Go in an intelligent, idiomatic way. After a brief re-acquaintance with the key building blocks of Go, we will also explore how we can build upon the unique capabilities of the language to write effective, powerful code you can employ to develop software. We look at packages, object-oriented programming, concurrency and reflection among other things. Moreover, you will learn about Go's awesome built-in testing support feature. Along the way, build your skills in File handling techniques, Go packages for databases, data serialization approaches, message communications between Go services, and Go web applications. Get your hands on with a plenty of illustrative code samples, exercises and real-world scenarios that will help you build your own application. By the end of this course, you will be taught how to put this enhanced knowledge to build a real-world Spaceship application all by yourself with amazing features.", acknowledgement = ack-nhfb, subject = "Internet videos; Streaming video; Internet videos; Streaming video.", } @Book{Andrawos:2017:MGPA, author = "Mina Andrawos", title = "Modern {Golang} Programming", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "1 streaming video file (14 hours, 37 minutes)", year = "2017", ISBN = "1-78712-525-4", ISBN-13 = "978-1-78712-525-4", LCCN = "????", bibdate = "Thu Apr 22 09:59:38 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Learn how to use the Go language open source third party ecosystem to build sophisticated production applications About This Video Get practical overview of the Go language Explore popular SQL databases such as MySQL, PostgreSQL and SQLite Learn about the GORM ORM layer Build Go applications that can work with Mongodb Learn the concepts of time series databases with InfluxDB Learn protocol buffers version 2 and 3 Explore gRPC support in Go Dive into the Gorilla web toolkit, REST APIs, Gorilla websockets, and Gorilla cookies Understand the Hero templating engine In Detail Go is the language of the Internet age, because it was built from the ground up to support modern distributed web software. Go is also cross-platform as it compiles to numerous operating systems and CPU architectures via simple commands. It compiles to native binaries, it doesn't use a VM, and is garbage-collected, which makes it a breeze to deploy in production environments. Throughout the course, we will use modern open source third party packages in Go to build a distributed application that will support several databases, establish efficient serial communications techniques, and construct an advanced web layer with templates, cookies, and websockets support. We will start with a refresher on Go's primary building blocks. From there, we will explore numerous open source packages that allow working with a variety of databases in a production environment as well as an ORM layer. We will then explore building reliable and robust microservices that communicate efficiently with each other via fast serialization and RPC techniques. Finally, we will develop knowledge on powerful third party templating engines and web toolkits, to construct a modern web layer with a RESTful API.", acknowledgement = ack-nhfb, subject = "Internet videos; Streaming video; Internet videos; Streaming video.", } @Book{Balasubramanian:2017:IG, author = "Kamesh Balasubramanian", title = "Isomorphic {Go}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "505 (est.)", year = "2017", ISBN = "1-78839-418-6 (print)", ISBN-13 = "978-1-78839-418-5 (print), 978-1-78839-880-0", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 11:01:12 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Learning about isomorphic development in Go leads to a unified view of web and back-end development: It extends the remit of a server-side programming language to the browser. About This Book Learn how to build Isomorphic Go web applications Neatly organize your isomorphic codebase to enhance the maintainability of your application Leverage the same Go code across the web server and the web browser Who This Book Is For This book addresses web developers, who are comfortable with JavaScript and the full web development cycle. You may or may not be experienced in isomorphic development, but should have a basic understanding of Go's syntax. What You Will Learn Create Go programs inside the web browser using GopherJS Render isomorphic templates on both the client side and the server side Perform end-to-end application routing for greater search engine discoverability and an enhanced user experience Implement isomorphic handoff to seamlessly transition state between the web server and the web browser Build real-time web application functionality with websockets Create reusable components (cogs) that are rendered using the virtual DOM Deploy an Isomorphic Go application for production use In Detail Isomorphic Go is the methodology to create isomorphic web applications using the Go programming language. Isomorphic web applications have the capability to reuse code across environments, increasing the synergy between the web server and the web browser. This book is a hands-on guide that will show you how to build and deploy an Isomorphic Go web application. Isomorphic Go begins with an in-depth exploration of the benefits provided by the isomorphic web application architecture. You'll be introduced to the Isomorphic Go toolchain, and how it can help you write Go code that functions across environments. You'll learn how to create Go programs in the web browser using GopherJS and how to render isomorphic templates. Then you'll be introduced to end-to-end application routing, use isomorphic handoff to seamlessly transition state from the web server to the web browser, and compose isomorphic forms that have the ability to reuse form validation logic. You'll be exposed to advanced concepts including the implementation of real-time web application functionality with websockets and the creation of reusable components (cogs) that are rendered using the virtual DOM. Finally, you'll see how to deploy an Isomorphic Go web application to a production environment.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Go (Computer program language)", } @Book{Hoffman:2017:CNG, author = "Kevin Hoffman and Dan Nemeth", title = "Cloud Native {Go}: Building {Web} Applications and Microservices for the Cloud with {Go} and {React}", publisher = "Addison-Wesley Professional", address = "????", pages = "256", year = "2017", ISBN = "0-13-450575-1 (e-book), 0-13-450578-6, 0-13-450580-8, 0-672-33779-7", ISBN-13 = "978-0-13-450575-6 (e-book), 978-0-13-450578-7, 978-0-13-450580-0, 978-0-672-33779-6", LCCN = "QA76.585", bibdate = "Thu Apr 22 10:38:29 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://www.vlebooks.com/vleweb/product/openreader?id=none\%26isbn=9780134505800", abstract = "The Complete Guide to Building Cloud-Based Services Cloud Native Go shows developers how to build massive cloud applications that meet the insatiable demands of today's customers, and will dynamically scale to handle virtually any volume of data, traffic, or users. Kevin Hoffman and Dan Nemeth describe the modern cloud-native application in detail, illuminating factors, disciplines, and habits associated with rapid, reliable cloud-native development. They also introduce Go, a ``simply elegant'' high-performance language that is especially well-suited for cloud development. You'll walk through creating microservices in Go, adding front-end web components using ReactJS and Flux, and mastering advanced Go-based cloud-native techniques. Hoffman and Nemeth show how to build a continuous delivery pipeline with tools like Wercker, Docker, and Dockerhub; automatically push apps to leading platforms; and systematically monitor app performance in production. Learn ``The Way of the Cloud'': why developing good cloud software is fundamentally about mindset and discipline Discover why Go is ideal for cloud-native microservices development Plan cloud apps that support continuous delivery and deployment Design service ecosystems, and then build them in a test-first manner Push work-in-progress to a cloud Use Event Sourcing and CQRS patterns to react and respond to enormous volume and throughput Secure cloud-based web applications: do's, don'ts, and options Create reactive applications in the cloud with third-party messaging providers Build massive-scale, cloud-friendly GUIs with React and Flux Monitor dynamic scaling, failover, and fault tolerance in the cloud.", acknowledgement = ack-nhfb, subject = "Cloud computing; Cloud computing.", } @Book{Jackson:2017:BMG, author = "Nic Jackson", title = "Building Microservices with {Go}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "ix + 338", year = "2017", ISBN = "1-78646-866-2, 1-78646-979-0", ISBN-13 = "978-1-78646-866-6, 978-1-78646-979-3", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 10:05:37 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Your one-stop guide to the common patterns and practices, showing you how to apply these using the Go programming language About This Book This short, concise, and practical guide is packed with real-world examples of building microservices with Go It is easy to read and will benefit smaller teams who want to extend the functionality of their existing systems Using this practical approach will save your money in terms of maintaining a monolithic architecture and demonstrate capabilities in ease of use Who This Book Is For You should have a working knowledge of programming in Go, including writing and compiling basic applications. However, no knowledge of RESTful architecture, microservices, or web services is expected. If you are looking to apply techniques to your own projects, taking your first steps into microservice architecture, this book is for you. What You Will Learn Plan a microservice architecture and design a microservice Write a microservice with a RESTful API and a database Understand the common idioms and common patterns in microservices architecture Leverage tools and automation that helps microservices become horizontally scalable Get a grounding in containerization with Docker and Docker-Compose, which will greatly accelerate your development lifecycle Manage and secure Microservices at scale with monitoring, logging, service discovery, and automation Test microservices and integrate API tests in Go In Detail Microservice architecture is sweeping the world as the de facto pattern to build web-based applications. Golang is a language particularly well suited to building them. Its strong community, encouragement of idiomatic style, and statically-linked binary artifacts make integrating it with other technologies and managing microservices at scale consistent and intuitive. This book will teach you the common patterns and practices, showing you how to apply these using the Go programming language. It will teach you the fundamental concepts of architectural design and RESTful communication, and show you patterns that provide manageable code that is supportable in development and at scale in production. We will provide you with examples on how to put these concepts and patterns into practice with Go. Whether you are planning a new application or working in an existing monolith, this book will explain and illustrate with practical examples how teams of all sizes can start solving problems with microservices. It will help you unders.", acknowledgement = ack-nhfb, tableofcontents = "Preface \\ 1: Introduction to Microservices \\ Building a simple web server with net/http \\ Reading and writing JSON \\ Marshalling Go structs to JSON \\ Unmarshalling JSON to Go structs \\ Routing in net/http \\ Paths \\ Convenience handlers \\ FileServer \\ NotFoundHandler \\ RedirectHandler \\ StripPrefix \\ TimeoutHandler \\ Static file handler \\ Creating handlers \\ Context \\ Background \\ WithCancel \\ WithDeadline \\ WithTimeout \\ WithValue \\ Using contexts \\ RPC in the Go standard library \\ Simple RPC example \\ RPC over HTTP \\ JSON-RPC over HTTP \\ Summary \\ 2: Designing a Great API \\ RESTful APIs \\ URIs \\ URI format \\ URI path design for REST services \\ Collections \\ Documents \\ Controller \\ Store \\ CRUD function names \\ HTTP verbs \\ GET \\ POST \\ PUT \\ PATCH \\ DELETE \\ HEAD \\ OPTIONS \\ URI query design \\ Response codes \\ 2xx Success \\ 200 OK \\ 201 Created \\ 204 No Content \\ 3xx Redirection \\ 301 Moved Permanently \\ 304 Not Modified \\ 4xx Client Error \\ 400 Bad Request \\ 401 Unauthorized \\ 403 Forbidden \\ 404 Not Found \\ 405 Method Not Allowed \\ 408 Request Timeout \\ 5xx Server Error \\ 500 Internal Server Error \\ 503 Service Unavailable \\ HTTP headers \\ Standard request headers \\ Authorization \\ string \\ Date \\ Accept \\ content type \\ Accept-Encoding \\ gzip, deflate \\ Standard response headers \\ Returning errors \\ Accessing APIs from JavaScript \\ JSONP \\ CORS \\ RPC APIs \\ RPC API design \\ RPC message frameworks \\ Gob \\ Thrift \\ Protocol Buffers \\ JSON-RPC \\ Filtering \\ Versioning APIs \\ Semantic versioning \\ Versioning formats for REST APIs \\ Versioning formats for RPC APIs \\ Naming for RPC \\ Object type standardization \\ Dates \\ Durations \\ Intervals \\ Documenting APIs \\ REST based-based APIs \\ Swagger \\ API Blueprint \\ RAMLRPC based-based APIs \\ Summary \\ 3: Introducing Docker \\ Introducing Containers with Docker \\ Installing Docker \\ Running our first container \\ Docker volumes \\ Union filesystem \\ Mounting volumes \\ Docker ports \\ Removing a container starting with an explicit name \\ Docker networking \\ Bridge networking \\ Host networking \\ No network \\ Overlay network \\ Custom network drivers \\ Weaveworks \\ Project Calico \\ Creating custom bridge networks \\ Creating a bridge network \\ Connecting containers to a custom network \\ Writing Dockerfiles \\ Building application code for Docker \\ FROM \\ MAINTAINER \\ EXPOSE \\ COPYENTRYPOINTCMD \\ Good practice for creating Dockerfiles \\ Building images from Dockerfiles \\ Docker build context \\ Docker Ignore files \\ Running Daemons in containers \\ Docker Compose \\ Installing Docker Compose on Linux \\ Service startup \\ Specifying the location of a compose file \\ Specifying a project name \\ Summary \\ 4: Testing \\ The testing pyramid \\ Outside-in development \\ Unit tests \\ httptest.NewRequest \\ httptest.NewRecorder \\ Dependency injection and mocking \\ Code coverage \\ Behavioral Driven Development \\ Testing with Docker Compose \\ Benchmarking and profiling \\ Benchmarks \\ Profiling \\ Summary", } @Book{Kennedy:2017:UGP, author = "William Kennedy", title = "Ultimate {Go} Programming", publisher = "Addison-Wesley Professional", pages = "1 video file (14 hours, 51 minutes)", year = "2017", ISBN = "0-13-475747-5", ISBN-13 = "978-0-13-475747-6", LCCN = "????", bibdate = "Thu Apr 22 10:15:33 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "15+ Hours of Video Instruction Ultimate Go Programming LiveLessons provides an intensive, comprehensive, and idiomatic view of the Go programming language. This course focuses on both the specification and implementation of the language, including topics ranging from language syntax, design, and guidelines to concurrency, testing, and profiling. This class is perfect for anyone who wants a jump-start in learning Go or wants a more thorough understanding of the language and its internals. In this video training, Bill Kennedy starts by providing a deep and intensive dive into Go's language syntax, idioms, implementation, and specification. Then Bill guides you through the essential things you need to know about designing software in Go. With that strong foundation, Bill then teaches the language mechanics behind Go's concurrency primitives and covers all the things you need to know to design concurrent software. Finally, Bill covers the tooling Go provides for testing, tracing, and profiling your programs. About the Instructor William Kennedy is a managing partner at Ardan Studio in Miami, Florida, a mobile, web, and systems development company. He is also a coauthor of the book Go in Action, the author of the blog ``GoingGo.Net,'' and a founding member of GoBridge, which is working to increase Go adoption through embracing diversity. Skill Level Intermediate What You Will Learn Language mechanics and internals Data structures and mechanical sympathy Software design and best practices Project structure and design Concurrent software design Testing and benchmarking Tracing and profiling Who Should Take This Course Any intermediate-level developer who has some experience with other programming languages and wants to learn Go. This video is perfect for anyone who wants a jump-start in learning Go or wants a more thorough understanding of the language, its internals and how to design software. Course Requirements Studied CS in school or has a minimum of two years of experience programming full time professionally. Familiar with structural and object-oriented programming styles. Has worked with arrays, lists, queues and stacks. Understands processes, threads and synchronization at a high level. Operating Systems Has worked with a command shell Knows how to maneuver around the file system Understands what environment variables are About Pearson Video Training Pearson publishes expert-led video tutorials covering a wide selection of technology topics \ldots{}", acknowledgement = ack-nhfb, subject = "Internet videos; Streaming video; Internet videos; Streaming video.", } @Book{Ketelsen:2017:TG, author = "Brian Ketelsen", title = "Testing in Go", publisher = pub-ORA-MEDIA, address = pub-ORA-MEDIA:adr, pages = "1 video file (25 minutes)", year = "2017", ISBN = "1-4919-7276-9, 1-4919-7277-7", ISBN-13 = "978-1-4919-7276-2, 978-1-4919-7277-9", LCCN = "????", bibdate = "Thu Apr 22 10:46:40 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Having access to a reliable and comprehensive test suite for your applications isn't a luxury anymore-it's a requirement. This video is the first in a series of ``Testing in Go'' videos that teach you how to test your Go applications and make certain that what you ship works the first time. Designed for basic or intermediate level Go developers who want to start writing tests, write better tests, or increase the coverage of their current test suites, this course provides complete step-by-step instruction on how to write testable code. Learn all about Go's testing package and tools Understand how to test code in Go with internal tests Explore the mechanics of writing tests for your Go code Discover how to simplify your Go test cases by using table-driven tests Get exposed to Go's external tests and their usage Learn to scope tests to cover your code and not the code in the standard library or other packages Brian Ketelsen is the founder of the Gopher Academy, the parent group that manages GopherCon, the Go programming language conference. A prolific open source enthusiast, he has contributed to many of Go's largest projects, including Docker, Kubernetes, etcd, SkyDNS, Kong, Go-Kit, and Goa. Brian holds a bachelor's degree in computer science from American InterContinental University.", acknowledgement = ack-nhfb, subject = "Internet videos; Streaming video; Internet videos; Streaming video.", } @Article{Kortschak:2017:PBOa, author = "R. Daniel Kortschak and Brent S. Pedersen and David L. Adelson", title = "\pkg{b{\'\i}ogo/hts}: high throughput sequence handling for the {Go} language", journal = j-J-OPEN-SOURCE-SOFT, volume = "2", number = "10", pages = "168:1--168:1", month = feb, year = "2017", CODEN = "????", DOI = "https://doi.org/10.21105/joss.00168", ISSN = "2475-9066", ISSN-L = "2475-9066", bibdate = "Thu Sep 13 08:09:35 MDT 2018", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/joss.bib", URL = "http://joss.theoj.org/papers/10.21105/joss.00168", acknowledgement = ack-nhfb, fjournal = "Journal of Open Source Software", journal-URL = "http://joss.theoj.org/; https://github.com/openjournals/joss-papers/", onlinedate = "04 February 2017", ORCID-numbers = "R Daniel Kortschak / 0000-0001-8295-2301; Brent S. Pedersen / 0000-0003-1786-2216; David L. Adelson / 0000-0003-2404-5636", } @Article{Kortschak:2017:PBOb, author = "R. Daniel Kortschak and David L. Adelson", title = "\pkg{b{\'\i}ogo/ncbi}: interfaces to {NCBI} services for the {Go} language", journal = j-J-OPEN-SOURCE-SOFT, volume = "2", number = "18", pages = "234:1--234:2", month = oct, year = "2017", CODEN = "????", DOI = "https://doi.org/10.21105/joss.00234", ISSN = "2475-9066", ISSN-L = "2475-9066", bibdate = "Thu Sep 13 08:09:35 MDT 2018", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/joss.bib", URL = "http://joss.theoj.org/papers/10.21105/joss.00234", acknowledgement = ack-nhfb, fjournal = "Journal of Open Source Software", journal-URL = "http://joss.theoj.org/; https://github.com/openjournals/joss-papers/", onlinedate = "25 October 2017", ORCID-numbers = "R Daniel Kortschak / 0000-0001-8295-2301; David L. Adelson / 0000-0003-2404-5636", } @Book{Newmarch:2017:NPG, author = "Jan Newmarch", title = "Network Programming with {Go}: Essential Skills for Using and Securing Networks", publisher = pub-APRESS, address = pub-APRESS:adr, pages = "xxi + 274 + 36", year = "2017", DOI = "https://doi.org/10.1007/978-1-4842-2692-6", ISBN = "1-4842-2691-7, 1-4842-2692-5", ISBN-13 = "978-1-4842-2691-9, 978-1-4842-2692-6", LCCN = "QA76.73.G63 N48 2017; QA76.76.C65", bibdate = "Thu Apr 22 10:44:51 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Dive into key topics in network architecture and Go, such as data serialization, application level protocols, character sets and encodings. This book covers network architecture and gives an overview of the Go language as a primer, covering the latest Go release. Beyond the fundamentals, Network Programming with Go covers key networking and security issues such as HTTP and HTTPS, templates, remote procedure call (RPC), web sockets including HTML5 web sockets, and more. Additionally, author Jan Newmarch guides you in building and connecting to a complete web server based on Go. This book can serve as both as an essential learning guide and reference on Go networking. What You Will Learn Master network programming with Go Carry out data serialization Use application-level protocols Manage character sets and encodings Deal with HTTP(S) Build a complete Go-based web server Work with RPC, web sockets, and more Who This Book Is For Experienced Go programmers and other programmers with some experience with the Go language.", acknowledgement = ack-nhfb, subject = "Computer science; Computer networks; Computer programming; Programming languages (Electronic computers); Programming Languages, Compilers, Interpreters; Programming Techniques; Computer Communication Networks; Computer Science (Springer-11645); Computer networks; Computer programming; Computer science; Programming languages (Electronic computers)", tableofcontents = "1. Architecture \\ 2. Overview of the Go language \\ 3. Socket-level Programming \\ 4. Data Serialization \\ 5. Application-Level Protocols \\ 6. Managing character sets and encodings \\ 7. Security \\ 8. HTTP \\ 9. Templates \\ 10. A Complete Web Server \\ 11. HTML \\ 12. XML \\ 13. Remote Procedure Call \\ 14. REST \\ 15. Web Sockets \\ Afterword", } @Book{Rice:2017:HCY, author = "Liz Rice", title = "How to Containerize Your {Go} Code", publisher = pub-ORA-MEDIA, address = pub-ORA-MEDIA:adr, pages = "????", year = "2017", ISBN = "1-4919-8230-6", ISBN-13 = "978-1-4919-8230-3", LCCN = "????", bibdate = "Thu Apr 22 11:02:53 2021", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/ora.bib", acknowledgement = ack-nhfb, } @InProceedings{Sartori:2017:GFM, author = "Marcos L. L. Sartori and Ney L. V. Calazans", editor = "{IEEE}", booktitle = "{2017 24th IEEE International Conference on Electronics, Circuits and Systems (ICECS)}", title = "{Go} functional model for a {RISC-V} asynchronous organisation --- {ARV}", publisher = pub-IEEE, address = pub-IEEE:adr, pages = "381--348", year = "2017", DOI = "https://doi.org/10.1109/ICECS.2017.8292066", bibdate = "Sat Dec 16 15:51:40 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/risc-v.bib", acknowledgement = ack-nhfb, } @Book{Torres:2017:GCB, author = "Aaron Torres", title = "{Go} cookbook: build modular, readable, and testable applications in {Go}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "392 (est.)", year = "2017", ISBN = "1-78328-684-9", ISBN-13 = "978-1-78328-683-6, 978-1-78328-684-3", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 10:42:24 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Application software; Development; Development; Go (Computer program language)", } @Book{Valentine:2017:CGG, author = "DaveIn Valentine", title = "The complete {Google Go} programming course for beginners", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "1 streaming video file (4 hours, 50 minutes)", year = "2017", ISBN = "1-78862-697-4", ISBN-13 = "978-1-78862-697-2", LCCN = "????", bibdate = "Thu Apr 22 10:50:15 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Our goal for you in this course is: For you to become a beginner Ninja in one of the hottest new languages called ``Google Go'' and also known as Golang. Google go is taking the development world by storm, because of its system level access and its design which gives programmers the ability to create multi-core programs. This is the first development language really developed for the type of multi-core CPU computers that have been in the market for the last ten years. Created by three genius developers are Google - to solve deficiencies Google was experiencing with conventional computer languages. This course is especially structured to solve a number of problems that introductions to programming languages suffer form.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Computer programming; Application software; Development; Electronic videos; local", } @Book{Vivien:2017:GDP, author = "Vladimir Vivien and Mario Contreras and Mat Ryer", title = "{Go}: Design Patterns for Real-World Projects", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "1091", year = "2017", ISBN = "1-78839-055-5, 1-78839-287-6", ISBN-13 = "978-1-78839-055-2, 978-1-78839-287-7", LCCN = "????", bibdate = "Thu Apr 22 10:14:18 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "An insightful guide to learning the Go programming language About This Book Get insightful coverage of Go programming syntax, constructs, and idioms to help you understand Go code Get a full explanation of all the known GoF design patterns in Go, including comprehensive theory and examples Learn to apply the nuances of the Go language, and get to know the open source community that surrounds it to implement a wide range of start-up quality projects Who This Book Is For Beginners to Go who are comfortable in other OOP languages like Java, C\#, or Python will find this course interesting and beneficial. What You Will Learn Install and configure the Go development environment to quickly get started with your first program Use the basic elements of the language including source code structure, variables, constants, and control flow primitives Get to know all the basic syntax and tools you need to start coding in Go Create unique instances that cannot be duplicated within a program Build quirky and fun projects from scratch while exploring patterns, practices, and techniques, as well as a range of different technologies Create websites and data services capable of massive scaling using Go's net/http package, Explore RESTful patterns as well as low-latency WebSocket APIs Interact with a variety of remote web services to consume capabilities, ranging from authentication and authorization to a fully functioning thesaurus In Detail The Go programming language has firmly established itself as a favorite for building complex and scalable system applications. Go offers a direct and practical approach to programming that lets programmers write correct and predictable code using concurrency idioms and a full-featured standard library. This practical guide is full of real-world examples to help you get started with Go in no time at all. You'll start by understanding the fundamentals of Go, then get a detailed description of the Go data types, program structures, and Maps. After that, you'll learn how to use Go concurrency idioms to avoid pitfalls and create programs that are exact in expected behavior. Next, you will get familiar with the tools and libraries that are available in Go to write and exercise tests, benchmarking, and code coverage. After that, you will be able to utilize some of the most important features of GO such as Network Programming and OS integration to build efficient applications.", } @Book{Whitenack:2017:MLG, author = "Daniel Whitenack", title = "Machine Learning With Go", publisher = "Packt Publishing; O'Reilly Media Inc.", address = "[Erscheinungsort nicht ermittelbar]; Sebastopol, CA", pages = "287 (??)", year = "2017", ISBN = "1-78588-210-4, 1-78588-390-9", ISBN-13 = "978-1-78588-210-4, 978-1-78588-390-3", LCCN = "QA76.73.G63 W55 2017", bibdate = "Thu Apr 22 10:41:17 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Build simple, maintainable, and easy to deploy machine learning applications. About This Book Build simple, but powerful, machine learning applications that leverage Go's standard library along with popular Go packages. Learn the statistics, algorithms, and techniques needed to successfully implement machine learning in Go Understand when and how to integrate certain types of machine learning model in Go applications. Who This Book Is For This book is for Go developers who are familiar with the Go syntax and can develop, build, and run basic Go programs. If you want to explore the field of machine learning and you love Go, then this book is for you! Machine Learning with Go will give readers the practical skills to perform the most common machine learning tasks with Go. Familiarity with some statistics and math topics is necessary. What You Will Learn Learn about data gathering, organization, parsing, and cleaning. Explore matrices, linear algebra, statistics, and probability. See how to evaluate and validate models. Look at regression, classification, clustering. Learn about neural networks and deep learning Utilize times series models and anomaly detection. Get to grip with techniques for deploying and distributing analyses and models. Optimize machine learning workflow techniques In Detail The mission of this book is to turn readers into productive, innovative data analysts who leverage Go to build robust and valuable applications. To this end, the book clearly introduces the technical aspects of building predictive models in Go, but it also helps the reader understand how machine learning workflows are being applied in real-world scenarios. Machine Learning with Go shows readers how to be productive in machine learning while also producing applications that maintain a high level of integrity. It also gives readers patterns to overcome challenges that are often encountered when trying to integrate machine learning in an engineering organization. The readers will begin by gaining a solid understanding of how to gather, organize, and parse real-work data from a variety of sources. Readers will then develop a solid statistical toolkit that will allow them to quickly understand gain intuition about the content of a dataset. Finally, the readers will gain hands-on experience implementing essential machine learning techniques (regression, classification, clustering, and so on) with the relevant Go packages. Finally, the reader will have a solid \ldots{}", acknowledgement = ack-nhfb, } @Book{Aggarwal:2018:GWD, author = "Arpit Aggarwal", title = "{Go} web development cookbook: build full-stack web applications with {Go}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "viii + 321", year = "2018", ISBN = "1-78728-674-6, 1-78728-856-0", ISBN-13 = "978-1-78728-674-0, 978-1-78728-856-0", LCCN = "QA76.73.G63; QA76.76.A65 .A343 2018", bibdate = "Thu Apr 22 10:16:48 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Go is an open source programming language that is designed to scale and support concurrency at the language level. This gives you the liberty to write large concurrent web applications with ease. From creating web application to deploying them on Amazon Cloud Services, this book will be your one-stop guide to learn web development in Go.", subject = "Go (Computer program language); Web applications; Application software; Development; Application program interfaces (Computer software); Application program interfaces (Computer software); Development; Go (Computer program language); Web applications.", tableofcontents = "Preface \\ 1: Creating Your First Server in Go \\ Introduction \\ Creating a simple HTTP server \\ How to do it \ldots{} \\ How it works \ldots{} \\ Implementing basic authentication on a simple HTTP server \\ Getting ready \\ How to do it \ldots{} \\ How it works \ldots{} \\ Optimizing HTTP server responses with GZIP compression \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating a simple TCP server \\ How to do it \ldots{} \\ How it works \ldots{} \\ Reading data from a TCP connection \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Writing data to a TCP connection \\ Getting ready How to do it \ldots{} How it works \ldots{} \\ Implementing HTTP request routing \\ How to do it \ldots{} \\ How it works \ldots{} \\ Implementing HTTP request routing using Gorilla Mux \\ How to do it \ldots{} \\ How it works \ldots{} \\ Logging HTTP requests \\ Getting Ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ 2: Working with Templates, Static Files, and HTML Forms \\ Introduction \\ Creating your first template \\ How to do it \ldots{} \\ How it works \ldots{} \\ Serving static files over HTTP \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Serving static files over HTTP using Gorilla Mux \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first HTML form \\ How to do it \ldots{} \\ How it works \ldots{} \\ Reading your first HTML form \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Validating your first HTML form \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Uploading your first file \\ How to do it \ldots{} \\ How it works \ldots{} \\ 3: Working with Sessions, Error Handling, and Caching in Go \\ Introduction \\ Creating your first HTTP session \\ How to do it \ldots{} \\ How it works \ldots{} \\ Managing your HTTP session using Redis \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first HTTP cookie \\ How to do it \ldots{} \\ How it works \ldots{} \\ Implementing caching in Go \\ How to do it \ldots{} \\ How it works Implementing HTTP error handling in GoHow to do it \ldots{} \\ How it works \ldots{} \\ Implementing login and logout in web application \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ 4: Writing and Consuming RESTful Web Services in Go \\ Introduction \\ Creating your first HTTP GET method \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first HTTP POST method \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first HTTP PUT method \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first HTTP DELETE method \\ How to do it \ldots{} \\ How it works \ldots{} \\ Versioning your REST API \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first REST client \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first AngularJS Client \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first ReactJS client \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first VueJS client \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ 5: Working with SQL and NoSQL Databases \\ Introduction \\ Integrating MySQL and Go \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Creating your first record in MySQL \\ Getting ready \ldots{} \\ How to do it \ldots{} \\ How it works \ldots{} \\ Reading records from MySQL \\ How to do it \ldots{} \\ How it works", } @Book{Ball:2018:WIG, author = "Thorsten Ball", title = "Writing an Interpreter in {Go}: version 1.6", publisher = "Thorsten Ball", address = "????", pages = "263", year = "2018", ISBN = "3-9820161-1-8 (paperback)", ISBN-13 = "978-3-9820161-1-5 (paperback)", LCCN = "QA76.76.C65 .B35 2018", bibdate = "Mon Sep 20 07:33:32 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/master.bib", abstract = "In this book we will create a programming language together. We'll start with 0 lines of code and end up with a fully working interpreter for the Monkey programming language. Step by step. From tokens to output. All code shown and included. Fully tested.", acknowledgement = ack-nhfb, shorttableofcontents = "Introduction \\ Lexing \\ Parsing \\ Evaluation \\ Extending the interpreter \\ Going further", subject = "Interpreters (Computer programs); Study and teaching; Programming languages (Electronic computers); Computer programs; Computer software; Computer programs; Computer software; Study and teaching", tableofcontents = "Acknowledgments / 5 \\ Introduction / 6 \\ The Monkey Programming Language \& Interpreter / 8 \\ Why Go? / 10 \\ How to Use this Book / 11 \\ 1 Lexing / 13 \\ 1.1 Lexical Analysis / 13 \\ 1.2 Defining Our Tokens / 15 \\ 1.3 The Lexer / 17 \\ 1.4 Extending our Token Set and Lexer / 27 \\ 1.5 Start of a REPL / 33 \\ 2 Parsing / 36 \\ 2.1 Parsers / 36 \\ 2.2 Why not a parser generator? / 39 \\ 2.3 Writing a Parser for the Monkey Programming Language / 41 \\ 2.4 Parser's first steps: parsing let statements / 41 \\ 2.5 Parsing Return Statements / 56 \\ 2.6 Parsing Expressions / 59 \\ Expressions in Monkey / 60 \\ Top Down Operator Precedence (or Pratt Parsing) / 61 \\ Terminology / 62 \\ Preparing the AST / 63 \\ Implementing the Pratt Parser / 67 \\ Identifiers / 68 \\ Integer Literals / 72 \\ Prefix Operators / 75 \\ Infix Operators / 81 \\ 2.7 How Pratt Parsing Works / 88 \\ 2.8 Extending the Parser / 99 \\ Boolean Literals / 101 \\ Grouped Expressions / 105 \\ If Expressions / 107 \\ Function Literals / 113 \\ Call Expressions / 119 \\ Removing TODOs / 124 \\ 2.9 Read-Parse-Print-Loop / 126 \\ 3 Evaluation / 130 \\ 3.1 Giving Meaning to Symbols / 130 \\ 3.2 Strategies of Evaluation / 131 \\ 3.3 A Tree-Walking Interpreter / 133 \\ 3.4 Representing Objects / 135 \\ Foundation of our Object System / 136 \\ Integers / 137 \\ Booleans / 138 \\ Null / 138 \\ 3.5 Evaluating Expressions / 139 \\ Integer Literals / 140 \\ 15 Completing the REPL / 143 \\ Boolean Literals / 145 \\ Null / 147 \\ Prefix Expressions / 147 \\ Infix Expressions / 151 \\ 3.6 Conditionals / 157 \\ 3.7 Return Statements / 161 \\ 3.8 Abort! Abort! There's been a mistake!, or: Error Handling / 165 \\ 3.9 Bindings \& The Environment / 172 \\ 3.10 Functions \& Function Calls / 177 \\ 3.11 Who's taking the trash out? / 189 \\ 4 Extending the Interpreter / 192 \\ 4.1 Data Types \& Functions / 192 \\ 4.2 Strings / 193 \\ Supporting Strings in our Lexer / 193 \\ Parsing Strings / 196 \\ Evaluating Strings / 197 \\ String Concatenation / 199 \\ 4.3 Built-in Functions / 201 \\ len / 202 \\ 4.4 Array / 207 \\ Supporting Arrays in our Lexer / 208 \\ Parsing Array Literals / 210 \\ Parsing Index Operator Expressions / 213 \\ Evaluating Array Literals / 217 \\ Evaluating Index Operator Expressions / 219 \\ Adding Built-in Functions for Arrays / 223 \\ Test-Driving Arrays / 227 \\ 4.5 Hashes / 228 \\ Lexing Hash Literals / 229 \\ Parsing Hash Literals / 231 \\ Hashing Objects / 236 \\ Evaluating Hash Literals / 242 \\ Evaluating Index Expressions With Hashes / 245 \\ 4.6 The Grand Finale / 249 \\ Going Further / 252 \\ The Lost Chapter / 252 \\ Writing A Compiler In Go / 253 \\ Resources / 254 \\ Feedback / 257 \\ Changelog / 285", } @Book{Chew:2018:GML, author = "Xuanyi Chew", title = "{Go} machine learning projects: eight projects demonstrating end-to-end machine learning and predictive analytics applications in {Go}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "339", year = "2018", ISBN = "1-78899-340-3, 1-78899-519-8", ISBN-13 = "978-1-78899-340-1, 978-1-78899-519-1", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 10:40:28 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Machine learning; Go (Computer program language); Machine learning.", } @Book{Daniel:2018:SG, author = "John Leon Daniel", title = "Security with {Go}", publisher = pub-PACKT, address = pub-PACKT:adr, year = "2018", ISBN = "1-78862-791-1", ISBN-13 = "978-1-78862-791-7", LCCN = "QA76.585 .L466 2018; QA76.59", bibdate = "Thu Apr 22 10:33:25 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "The first stop for your security needs when using Go, covering host, network, and cloud security for ethical hackers and defense against intrusion About This Book First introduction to Security with Golang Adopting a Blue Team/Red Team approach Take advantage of speed and inherent safety of Golang Works as an introduction to security for Golang developers Works as a guide to Golang security packages for recent Golang beginners Who This Book Is For Security with Go is aimed at developers with basics in Go to the level that they can write their own scripts and small programs without difficulty. Readers should be familiar with security concepts, and familiarity with Python security applications and libraries is an advantage, but not a necessity. What You Will Learn Learn the basic concepts and principles of secure programming Write secure Golang programs and applications Understand classic patterns of attack Write Golang scripts to defend against network-level attacks Learn how to use Golang security packages Apply and explore cryptographic methods and packages Learn the art of defending against brute force attacks Secure web and cloud applications In Detail Go is becoming more and more popular as a language for security experts. Its wide use in server and cloud environments, its speed and ease of use, and its evident capabilities for data analysis, have made it a prime choice for developers who need to think about security. Security with Go is the first Golang security book, and it is useful for both blue team and red team applications. With this book, you will learn how to write secure software, monitor your systems, secure your data, attack systems, and extract information. Defensive topics include cryptography, forensics, packet capturing, and building secure web applications. Offensive topics include brute force, port scanning, packet injection, web scraping, social engineering, and post exploitation techniques. Style and approach John Leon has divided the book into two parts which present the team playing defense against anyone breaking into servers and the team playing (ethical!) offense to perform said attacks. All Go scripts and programs are workable solutions that can be easily understood and expanded upon by anyone with a system administrator's level view of networking and cloud-based systems. Golang developers will profit from a swift and incisive approach to security. Downloading the example code for this book You can download the \ldots{}", acknowledgement = ack-nhfb, remark = "Title from content provider.", subject = "Information technology; Security measures; Computer security; Management; Computer networks; Data protection; Security measures; Management; Data protection.", tableofcontents = "Preface \\ 1: Introduction to Security with Go \\ About Go \\ Go language design \\ The History of Go \\ Adoption and community \\ Common criticisms about Go \\ The Go toolchain \\ Go mascot \\ Learning Go \\ Why use Go? \\ Why use Go for security? \\ Why not use Python? \\ Why not use Java? \\ Why not use C++? \\ Development environment \\ Installing Go on other platforms \\ Other Linux distributions \\ Windows \\ Mac \\ Setting up Go \\ Creating your workspace \\ Setting up environment variables \\ Editors \\ Creating your first package \\ Writing your first program \\ Running the executable file \\ Building the executable file \\ Installing the executable file \\ Formatting with go fmt \\ Running Go examples \\ Building a single Go file \\ Running a single Go file \\ Building multiple Go files \\ Building a folder (package) \\ Installing a program for use \\ Summary \\ 2: The Go Programming Language \\ Go language specification \\ The Go playground \\ A tour of Go \\ Keywords \\ Notes about source code \\ Comments \\ Types \\ Boolean \\ Numeric \\ Generic numbers \\ Specific numbers \\ Unsigned integers \\ Signed integers \\ Floating point numbers \\ Other numeric types \\ String \\ Array \\ Slice \\ Struct \\ Pointer \\ Function \\ Interface \\ Map \\ Channel \\ Control structures \\ if \\ for \\ range \\ switch, case, fallthrough, and default \\ goto \\ Defer \\ Packages \\ Classes \\ Inheritance \\ Polymorphism \\ Constructors \\ Methods \\ Operator overloading \\ Goroutines \\ Getting help and documentation \\ Online Go documentation \\ Offline Go documentation \\ Summary \\ 3: Working with Files \\ File basics \\ Creating an empty file \\ Truncating a file \\ Getting the file info \\ Renaming a file \\ Deleting a file \\ Opening and closing files \\ Checking whether a file exists \\ Checking read and write permissions \\ Changing permissions, ownership, and timestamps \\ Hard links and symlinks \\ Reading and writing \\ Copying a file \\ Seeking positions in a file \\ Writing bytes to a file \\ Quickly writing to a file \\ Buffered writer \\ Reading up to n bytes from a file \\ Reading exactly n bytes \\ Reading at least n bytes \\ Reading all bytes of a file \\ Quickly reading whole files to memory \\ Buffered reader \\ Reading with a scanner \\ Archives \\ Archive (ZIP) files \\ Extracting (unzip) archived files \\ Compression \\ Compressing a file \\ Uncompressing a File \\ Creating temporary files and directories \\ Downloading a file over HTTP \\ Summary \\ 4: Forensics \\ Files \\ Getting file information \\ Finding the largest files \\ Finding recently modified files \\ Reading the boot sector \\ Steganography \\ Generating an image with random noise \\ Creating a ZIP archive \\ Creating a steganographic image archive \\ Detecting a ZIP archive in a JPEG image \\ Network \\ Looking up a hostname from an IP address \\ Looking up IP addresses from a hostname \\ Looking up MX records \\ Looking up nameservers for a hostname \\ Summary \\ 5: Packet Capturing and Injection \\ Prerequisites \\ Installing libpcap and Git \\ Installing libpcap on Ubuntu \\ Installing libpcap on Windows \\ Installing libpcap on macOS \\ Installing gopacket \\ Permission problems \\ Getting a list of network devices \\ Capturing packets \\ Capturing with filters \\ Saving to the pcap file \\ Reading from a pcap file \\ Decoding packet layers \\ Creating a custom layer \\ Converting bytes to and from packets \\ Creating and sending packets \\ Decoding packets faster \\ Summary \\ 6: Cryptography \\ Hashing \\ Hashing small files \\ Hashing large files \\ Storing passwords securely \\ Encryption \\ Cryptographically secure pseudo-random number generator (CSPRNG) \\ Symmetric encryption \\ AES \\ Asymmetric encryption \\ Generating a public and private key pair \\ Digitally signing a message \\ Verifying a signature \\ TLS \\ Generating a self-signed certificate \\ Creating a certificate signing request \\ Signing a certificate request \\ TLS server \\ TLS client \\ Other encryption packages \\ OpenPGP \\ Off The Record (OTR) messaging \\ Summary \\ 7: Secure Shell (SSH) \\ Using the Go SSH client \\ Authentication methods \\ Authenticating with a password \\ Authenticating with private key \\ Verifying remote host \\ Executing a command over SSH \\ Starting an interactive shell \\ Summary \\ 8: Brute Force \\ Brute forcing HTTP basic authentication \\ Brute forcing the HTML login form \\ Brute forcing SSH \\ Brute forcing database login \\ Summary \\ 9: Web Applications \\ HTTP server \\ Simple HTTP servers \\ HTTP basic auth \\ Using HTTPS \\ Creating secure cookies \\ HTML escaping output \\ Middleware with Negroni \\ Logging requests \\ Adding secure HTTP headers \\ Serving static files \\ Other best practices \\ CSRF tokens \\ Preventing user enumeration and abuse \\ Registration \\ Login \\ Resetting the password \\ User profiles \\ Preventing LFI and RFI abuse \\ Contaminated files \\ HTTP client \\ The basic HTTP request \\ Using the client SSL certificate \\ Using a proxy \\ Using system proxy \\ Using a specific HTTP proxy \\ Using a SOCKS5 proxy (Tor) \\ Summary \\ 10: Web Scraping \\ Web scraping fundamentals \\ Finding strings in HTTP responses with the strings package \\ Using regular expressions to find email addresses in a page \\ Extracting HTTP headers from an HTTP response \\ Setting cookies with an HTTP client \\ Finding HTML comments in a web page \\ Finding unlisted files on a web server \\ Changing the user agent of a request \\ Fingerprinting web application technology stacks \\ Fingerprinting based on HTTP response headers \\ Fingerprinting web applications \\ How to prevent fingerprinting of your applications \\ Using the goquery package for web scraping \\ Listing all hyperlinks in a page \\ Finding documents in a web page \\ Listing page title and headings \\ Crawling pages on the site that store the most common words \\ Printing a list of external JavaScript files in a page \\ Depth-first crawling \\ Breadth-first crawling \\ How to protect against web scraping \\ Summary \\ 11: Host Discovery and Enumeration \\ TCP and UDP sockets \\ Creating a server \\ Creating a client \\ Port scanning \\ Grabbing a banner from a service \\ Creating a TCP proxy \\ Finding named hosts on a network \\ Fuzzing a network service \\ Summary \\ 12: Social Engineering \\ Gathering intel via JSON REST API \\ Sending phishing emails with SMTP \\ Generating QR codes \\ Base64 encoding data \\ Honeypots \\ TCP honeypot \\ The TCP testing tool \\ HTTP POST form login honeypot \\ HTTP form field honeypots \\ Sandboxing \\ Summary \\ 13: Post Exploitation \\ Cross compiling \\ Creating bind shells \\ Creating reverse bind shells \\ Creating web shells \\ Finding writable files \\ Changing file timestamp \\ Changing file permissions \\ Changing file ownership \\ Summary \\ 14: Conclusions \\ Recapping the topics you have learned \\ More thoughts on the usage of Go \\ What I hope you take away from the book \\ Be aware of legal, ethical, and technical boundaries \\ Where to go from here \\ Getting help and learning more \\ Another Book You May Enjoy \\ Leave a review \\ let other readers know what you think \\ Index", } @Book{Guney:2018:HG, author = "Tarik Guney", title = "Hands-on with {Go}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "1 streaming video file (2 hours, 26 minutes)", year = "2018", ISBN = "1-78913-251-7", ISBN-13 = "978-1-78913-251-9", LCCN = "????", bibdate = "Thu Apr 22 10:35:33 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Learn Go programming with concise examples to many common fundamental problems. About This Video Get comfortable with Go with short, independent, and concise videos. Overcome the most common challenges with the practical knowledge catered by the each and every tutorial. Never forget by watching pill-size videos whenever you are in a hurry. In Detail Go has moved from the state of tentative to mass adoption. Its C-like speed, simplicity, and power for a growing number of systems level programming domains make it an attractive option for programmers working with older cumbersome, statically typed languages. This course will help you learn Go programming language by solving commonly faced problems by developers in a Recipe approach. You will start by installing Go binaries and get familiar with tools to develop application. Then you will manipulate with strings and then use them in built in constructions and built-in function constructs to create a complex value from two floating-point values. Then you will learn to perform arithmetic operation date and time along with parsing them from string values. Whether you are an expert programmer or a fresh starter, you will learn how various answers are programmed in Go language, which will take you to the next level in your mastering at Go. These recipes will be from concurrency in Go, performing various web programming tasks, doing system programming, reading and writing files, and many fundamental Go programming skills such as proper error handling, doing logging, and so on. The code bundle for this video course is available at https://github.com/PacktPublishing/Hands-on-with-go.", acknowledgement = ack-nhfb, remark = "Not recommended for use on the libraries' public computers.", subject = "Internet videos; Streaming video; Internet videos; Streaming video.", } @Book{Guney:2018:HGP, author = "Tarik Guney", title = "Hands-on {Go} programming: explore {Go} by solving real-world challenges", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "iii + 166", year = "2018", ISBN = "1-78953-487-9 (e-book)", ISBN-13 = "978-1-78953-175-6, 978-1-78953-487-0 (e-book)", LCCN = "QA76.73.G63 G86 2018", bibdate = "Thu Apr 22 10:53:01 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Computer programming; COMPUTERS; Programming Languages; Java; Computer programming; Go (Computer program language)", } @Book{Kennedy:2018:UGP, author = "William Kennedy", title = "Ultimate {Go} Programming", publisher = "Addison-Wesley Professional", edition = "Second", pages = "1 video file (16 hours, 51 minutes)", year = "2018", ISBN = "0-13-526165-1", ISBN-13 = "978-0-13-526165-1", LCCN = "????", bibdate = "Thu Apr 22 07:22:26 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "16+ Hours of Video Instruction Ultimate Go Programming LiveLessons, Second Edition, provides an intensive, comprehensive, and idiomatic view of the Go programming language. This course focuses on both the specification and implementation of the language, including topics ranging from language syntax, design, and guidelines to concurrency, testing, and profiling. This class is perfect for anyone who wants a jump-start in learning Go or wants a more thorough understanding of the language and its internals. In this video training, Bill Kennedy starts by providing a deep and intensive dive into Go's language syntax, idioms, implementation, and specification. Then Bill guides you through the essential things you need to know about designing software in Go. With that strong foundation, Bill then teaches the language mechanics behind Go's concurrency primitives and covers all the things you need to know to design concurrent software. Finally, Bill covers the tooling Go provides for testing, tracing, and profiling your programs. About the Instructor William Kennedy is a managing partner at Ardan Studio in Miami, Florida, a mobile, web, and systems development company. He is also a coauthor of the book Go in Action, the author of the blog ``GoingGo.Net,'' and a founding member of GoBridge, which is working to increase Go adoption through embracing diversity. Skill Level Intermediate Learn How To Read code with an understanding of the language mechanics and internals Understand costs by knowing the different semantics of the language Code and design software more effectively Design your Go projects and better ways to package your APIs Write multithreaded code in Go and learn the things you need to focus on Unit test your code and write benchmarks to validate assumptions Profile and trace your Go programs to identify and fix bugs and to make improvements Who Should Take This Course Any intermediate-level developer who has some experience with other programming languages and wants to learn Go. This video is perfect for anyone who wants a jump-start in learning Go or wants a more thorough understanding of the language, its internals and how to design software. Course Requirements Studied CS in school or has a minimum of two years of experience programming full time professionally. Familiar with structural and object-oriented programming styles. Has worked with arrays, lists, queues and stacks. Understands processes, threads and synchronization at a high level.", acknowledgement = ack-nhfb, subject = "Internet videos; Streaming video; Internet videos; Streaming video.", } @Article{Kortschak:2018:PAG, author = "R. Daniel Kortschak", title = "\pkg{arrgh}: a {Go} interface to the {OpenCPU} {R} server system", journal = j-J-OPEN-SOURCE-SOFT, volume = "3", number = "21", pages = "517:1--517:1", month = jan, year = "2018", CODEN = "????", DOI = "https://doi.org/10.21105/joss.00517", ISSN = "2475-9066", ISSN-L = "2475-9066", bibdate = "Thu Sep 13 08:09:35 MDT 2018", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/joss.bib; https://www.math.utah.edu/pub/tex/bib/s-plus.bib", URL = "http://joss.theoj.org/papers/10.21105/joss.00517", acknowledgement = ack-nhfb, fjournal = "Journal of Open Source Software", journal-URL = "http://joss.theoj.org/; https://github.com/openjournals/joss-papers/", onlinedate = "15 January 2018", ORCID-numbers = "R Daniel Kortschak / 0000-0001-8295-2301", } @InProceedings{Mladenovi:2018:ASM, author = "Dragan Mladenovi{\c{c}} and Milan Kne{\v{z}}evi{\'c} and Vladimir Stefanovi{\'c} and Milo{\v{s}} Suboti{\'c}", editor = "{IEEE}", booktitle = "2018 26th Telecommunications Forum {(TELFOR)}", title = "Adding Support for the {MIPS32} Architecture into the {Go} Language Compiler", publisher = pub-IEEE, address = pub-IEEE:adr, pages = "420--425", year = "2018", DOI = "https://doi.org/10.1109/TELFOR.2018.8612023", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, } @Book{Ramalho:2018:PVG, author = "Luciano Ramalho", title = "{Python vs. Go}", publisher = pub-ORA-MEDIA, address = pub-ORA-MEDIA:adr, pages = "????", year = "2018", ISBN = "1-4920-3317-0, 1-4920-3318-9", ISBN-13 = "978-1-4920-3317-2, 978-1-4920-3318-9", LCCN = "QA76.73.P98", bibdate = "Thu Apr 22 10:36:31 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/python.bi", abstract = "Comparing Python with Go is a bit like comparing an SUV with a sports car: they were created to serve different needs. Thanks to their simple syntax and careful design, you will probably find Python and Go easier to learn and use than other mainstream languages that you might have already studied. Given their gentle learning curve and phenomenal growth in several fields, getting to know them is a sound investment now.", acknowledgement = ack-nhfb, subject = "Python (Computer program language); Go (Computer program language); Go (Computer program language); Python (Computer program language)", } @Book{Scott:2018:HDI, author = "Corey Scott", title = "Hands-on dependency injection in {Go}: develop clean {Go} code that is easier to read, maintain, and test", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "338", year = "2018", ISBN = "1-78913-175-8", ISBN-13 = "978-1-78913-175-8, 978-1-78913-276-2", LCCN = "QA76.76.A65 .S368 2018; QA76.73.G63", bibdate = "Thu Apr 22 10:11:46 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://proquest.safaribooksonline.com/?fpi=9781789132762", abstract = "This book will take you on a journey of refactoring existing code to adopt dependency injection using the various methods available in Go. You will gain knowledge of how and when to best leverage each technique to transform code into something simple and flexible.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Data structures (Computer science); Application software; Development; Development; Data structures (Computer science); Go (Computer program language)", tableofcontents = "Preface \\ 1: Never Stop Aiming for Better \\ Technical requirements \\ Why does DI matter? \\ So, how do I define DI? \\ Code smells that indicate you might need DI \\ Code bloat \\ Resistance to change \\ Wasted effort \\ Tight coupling \\ Healthy skepticism \\ A quick word about idiomatic Go \\ Leave your baggage at the door \\ Summary \\ Questions \\ Further reading \\ 2: SOLID Design Principles for Go \\ Technical requirements \\ Single responsibility principle (SRP) \\ How does this relate to DI?What does this mean for Go?Go interfaces, structs, and functions \\ Go packages \\ Open/closed principle (OCP) \\ How does this relate to DI? \\ What does this mean for Go? \\ Liskov substitution principle (LSP) \\ How does this relate to DI? \\ What does this mean for Go? \\ Interface segregation principle (ISP) \\ How does this relate to DI? \\ What does this mean for Go? \\ Dependency inversion principle (DIP) \\ How does this relate to DI? \\ What does this mean for Go? \\ Summary \\ Questions \\ Further reading \\ 3: Coding for User Experience \\ Technical requirements \\ Optimizing for humans \\ What does user experience mean for Go code? \\ Start with simple, get complicated only when you must \\ Apply just enough abstraction \\ Follow industry, team, and language conventions \\ Export only what you must \\ Aggressively apply the single responsibility principle \\ Discovering a good user experience \\ Who is the user? \\ What are your users capable of? \\ Why do users want to use your code? \\ How do they expect to use it? \\ When to compromise \\ Final thoughts on coding for user experience \\ A security blanket named unit tests \\ So why do I write unit tests? \\ What should I test? \\ Table-driven tests \\ StubsMocksTest-induced damage \\ Warning signs of test-induced damage \\ Parameters, config options, or outputs that only exist because of tests \\ Parameters that cause or are caused by leaky abstractions \\ Publishing mocks in production code \\ Excessive test coverage \\ Visualizing your package dependencies with Godepgraph \\ Installing the tools \\ Generating a dependency graph \\ Interpreting the dependency graph \\ Summary \\ Questions \\ 4: Introduction to the ACME Registration Service \\ Technical requirements \\ Goals for our system \\ High readability \\ High testability \\ Low coupling \\ Final thoughts on goals \\ Introduction to our system \\ Software architecture \\ Known issues \\ Testability \\ Duplication of effort \\ Lack of isolation in tests \\ High coupling between the data and REST packages \\ High coupling with the config package \\ Downstream currency service \\ Summary \\ Questions \\ 5: Dependency Injection with Monkey Patching \\ Technical requirements \\ Monkey magic! \\ Advantages of monkey patching \\ Applying monkey patching \\ Introducing SQLMock \\ Monkey patching with SQLMock \\ Testing error handling \\ Reducing test bloat with table-driven tests \\ Monkey patching between packages \\ When the magic fades \\ Summary", } @Book{Spaulding:2018:GSG, author = "Matthew Spaulding", title = "Getting started with {Go} Programming Language", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "1 streaming video file (3 hours, 4 minutes)", year = "2018", ISBN = "1-78847-185-7", ISBN-13 = "978-1-78847-185-5", LCCN = "????", bibdate = "Thu Apr 22 07:16:12 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Develop simple, reliable, and efficient applications with Go language About This Video Explore fundamentals of Go language Design and test your code with Go tools In-depth coverage of Go libraries such as Viper and Cobra 25 assessments specific to the course In Detail Go is an open source programming language that makes it easy to build simple, reliable, and efficient software. Are you a software programmer who wants to learn go language from scratch to build amazing applications, then this course is for you! This course begins with covering the basic fundamentals of golang along with creating a basic application. You will learn data types, control structures, loops, and object-oriented concepts in golang. Then, you will be familiar with the tools used for Go development and will learn to perform testing. Also, you will learn certain standard libraries used in golang. Moving ahead, you will be introduced to Viper and Cobra libraries to build Command Line applications. Finally, you will learn to work with configuration files.", acknowledgement = ack-nhfb, remark = "Not recommended for use on the libraries' public computers.", subject = "Internet videos; Streaming video; Internet videos; Streaming video.", } @Book{Andrawos:2019:HFS, author = "Mina Andrawos", title = "Hands-on full stack development with {Go}: build full stack web applications with {Go}, {React}, {Gin}, and {GopherJS}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "v + 311", year = "2019", ISBN = "1-78913-865-5", ISBN-13 = "978-1-78913-075-1, 978-1-78913-865-8", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 09:57:22 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://proquest.safaribooksonline.com/?fpi=9781789130751", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Web applications; Application software; Development; Development; Go (Computer program language); Web applications.", tableofcontents = "1. The Go language. Welcome to full stack Go \\ Building blocks of the Go language \\ Go concurrency \\ 2. The frontend. Frontend with React.js \\ Building a frontend for GoMusic \\ 3. Web APIs and middleware in Go \\ RESTful web APIs in Go with the Gin framework \\ Advanced web Go applications with Gin and React technical requirements \\ Testing and benchmarking your web API \\ Introduction to Isomorphic Go with GopherJS \\ Where to go from here?", } @Book{Ball:2019:WCG, author = "Thorsten Ball", title = "Writing a compiler in {Go}", publisher = "Thorsten Ball", address = "Aschaffenburg, Germany", edition = "Version 1.1.", pages = "351", year = "2019", ISBN = "3-9820161-0-X", ISBN-13 = "978-3-9820161-0-8", LCCN = "QA76.73.G63 B348 2019", bibdate = "Mon Sep 20 07:28:07 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/master.bib", abstract = "This is the sequel to \booktitle{Writing An Interpreter In Go}. We're picking up right where we left off and write a compiler and a virtual machine for Monkey. Runnable and tested code front and center, built from the ground up, step by step --- just like before. But this time, we're going to define bytecode, compile Monkey and execute it in our very own virtual machine. It's the next step in Monkey's evolution.", acknowledgement = ack-nhfb, shorttableofcontents = "Compilers and virtual machines \\ Hello bytecode! \\ Compiling expressions \\ Conditionals \\ Keeping track of names \\ String, array and hash \\ Functions \\ Built-in functions \\ Closures \\ Taking time", subject = "Go (Computer program language); Compilers (Computer programs); Computer programming; Compilers (Computer programs); Computer programming; Go (Computer program language)", tableofcontents = "Acknowledgments / 5 \\ Introduction / 6 \\ Evolving Monkey / 7 \\ The Past and Present / 7 \\ The Future / 11 \\ Use This Book / 11 \\ 1 Compilers \& Virtual Machines / 13 \\ Compilers / 14 \\ Virtual and Real Machines / 18 \\ Real Machines / 19 \\ What Is a Virtual Machine? / 25 \\ Why Build One? / 28 \\ Bytecode / 30 \\ What We're Going to Do, or: the Duality of VM and Compiler / 33 \\ 2 Hello Bytecode! / 34 \\ First Instructions / 35 \\ Starting With Bytes / 36 \\ The Smallest Compiler / 42 \\ Bytecode, Disassemble! / 48 \\ Back to the Task at Hand / 53 \\ Powering On the Machine / 56 \\ Adding on the Stack / 64 \\ Hooking up the REPL / 70 \\ 3 Compiling Expressions / 73 \\ Cleaning Up the Stack / 73 \\ Infix Expressions / 78 \\ Booleans / 83 \\ Comparison Operators / 88 \\ Prefix Expressions / 96 \\ 4 Conditionals / 103 \\ Jumps / 106 \\ Compiling Conditionals / 109 \\ Executing Jumps / 125 \\ Welcome Back, Null! / 129 \\ 5 Keeping Track of Names / 138 \\ The Plan / 139 \\ Compiling Bindings / 141 \\ Introducing: the Symbol Table / 144 \\ Using Symbols in the Compiler / 147 \\ Adding Globals to the VM / 150 \\ 6 String, Array and Hash / 156 \\ String / 157 \\ Array / 162 \\ Hash / 168 \\ Adding the index operator / 175 \\ 7 Functions / 182 \\ Dipping Our Toes: a Simple Function / 182 \\ Representing Functions / 183 \\ Opcodes to Execute Functions / 184 \\ Compiling Function Literals / 188 \\ Compiling Function Calls / 204 \\ Functions in the VM / 207 \\ A Little Bonus / 219 \\ Local Bindings / 220 \\ Opcodes for Local Bindings / 221 \\ Compiling Locals / 225 \\ Implementing Local Bindings in the VM / 239 \\ Arguments / 249 \\ Compiling Calls With Arguments / 250 \\ Resolving References to Arguments / 256 \\ Arguments in the VM / 259 \\ 8 Built-in Functions / 269 \\ Making the Change Easy / 270 \\ Making the Change: the Plan / 277 \\ A New Scope for Built-in Functions / 277 \\ Executing built-in functions / 283 \\ 9 Closures / 290 \\ The Problem / 291 \\ The Plan / 292 \\ Everything's a closure / 294 \\ Compiling and resolving free variables / 307 \\ Creating real closures at run time / 320 \\ Recursive Closures / 325 \\ 10 Taking Time / 341 \\ Resources / 345 \\ Feedback / 348 \\ Changelog /349", } @Book{Guerrieri:2019:HSP, author = "Alex Guerrieri", title = "Hands-on system programming with {Go}: build modern and concurrent applications for {Unix} and {Linux} systems using {Golang}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "xii + 437", year = "2019", ISBN = "1-78980-336-5 (e-book), 1-78980-407-8", ISBN-13 = "978-1-78980-336-5 (e-book), 978-1-78980-407-2", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 07:34:05 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/linux.bib; https://www.math.utah.edu/pub/tex/bib/unix.bib", URL = "http://proquest.safaribooksonline.com/?fpi=9781789804072", abstract = "Go is the new systems programming language for Linux and Unix systems. After a brief introduction of Unix-based OS and of system programming, we'll dive into Go standard packages, focusing on how easily they allow to interact will all the functionality of the OS. By the end of this book, you will be comfortable with systems programming using Go.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Application software; Development; Development; Go (Computer program language)", tableofcontents = "Preface \\ Section 1: An Introduction to System Programming and Go \\ 1: An Introduction to System Programming \\ Technical requirements \\ Beginning with system programming \\ Software for software \\ Languages and system evolution \\ System programming and software engineering \\ Application programming interfaces \\ Types of APIs \\ Operating systems \\ Libraries and frameworks \\ Remote APIs \\ Web APIs \\ Understanding the protection ring \\ Architectural differences \\ Kernel space and user space \\ Diving into system calls \\ Services provided \\ Process control \\ File management \\ Device management \\ Information maintenance \\ Communication \\ The difference between operating systems \\ Understanding the POSIX standard \\ POSIX standards and features \\ POSIX. 1 \\ core services \\ POSIX. 1b and POSIX. 1c \\ real-time and thread extensions \\ POSIX. 2 \\ shell and utilities \\ OS adherence \\ Linux and macOS \\ Windows \\ Summary \\ Questions \\ 2: Unix OS Components \\ Technical requirements \\ Memory management \\ Techniques of management \\ Virtual memory \\ Understanding files and filesystems \\ Operating systems and filesystems \\ Linux \\ macOS \\ Windows \\ Files and hard and soft links \\ Unix filesystem \\ Root and inodes \\ Directory structure \\ Navigation and interaction \\ Mounting and unmounting \\ Processes \\ Process properties \\ Process life cycle \\ Foreground and background \\ Killing a job \\ Users, groups, and permissions \\ Users and groups \\ Owner, group, and others \\ Read, write, and execute \\ Changing permission \\ Process communications \\ Exit codes \\ Signals \\ Pipes \\ Sockets \\ Summary \\ Questions \\ 3: An Overview of Go \\ Technical requirements \\ Language features \\ History of Go \\ Strengths and weaknesses \\ Namespace \\ Imports and exporting symbols \\ Type system \\ Basic types \\ Composite types \\ Custom-defined types \\ Variables and functions \\ Handling variables \\ Declaration \\ Operations \\ Casting \\ Scope \\ Constants \\ Functions and methods \\ Values and pointers \\ Understanding flow control \\ Condition \\ Looping \\ Exploring built-in functions \\ Defer, panic, and recover \\ Concurrency model \\ Understanding channels and goroutines \\ Understanding memory management \\ Stack and heap \\ The history of GC in Go \\ Building and compiling programs \\ Install \\ Build \\ Run \\ Summary \\ Questions \\ Section 2: Advanced File I/O Operations \\ 4: Working with the Filesystem \\ Technical requirements \\ Handling paths \\ Working directory \\ Getting and setting the working directory \\ Path manipulation \\ Reading from files \\ Reader interface \\ The file structure \\ Using buffers \\ Peeking content \\ Closer and seeker \\ Writing to file \\ Writer interface \\ Buffers and format \\ Efficient writing \\ File modes \\ Other operations \\ Create \\ Truncate \\ Delete \\ Move \\ Copy \\ Stats \\ Changing properties \\ Third-party packages \\ Virtual filesystems \\ Filesystem events \\ Summary \\ Questions \\ 5: Handling Streams \\ 6: Building pseudo-terminals \\ 7: Handling processes and daemons \\ 8: Exit codes, signals, and pipes \\ 9: Network programming \\ 10:Data encoding using Go \\ 11: Dealing with channels and Goroutines \\ 12: Synchronization with sync and atomic \\ 13: Coordination using context \\ 14: Implementing concurrency patterns \\ 15: Using reflection \\ 16: Using CGO", } @Book{McGavren:2019:HFG, author = "Jay McGavren", title = "Head First {Go}: a brain-friendly guide", publisher = pub-ORA-MEDIA, address = pub-ORA-MEDIA:adr, pages = "xxxiv + 520", year = "2019", ISBN = "1-4919-6955-5", ISBN-13 = "978-1-4919-6955-7", LCCN = "QA76.73.G63 M34 2019", bibdate = "Thu Apr 22 07:23:50 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Go represents an attempt to improve on some weaknesses of traditional compiled programming languages. It de-emphasizes or removes error-prone language structures like class inheritance and exception handling. It features great concurrency support and automatic memory management (garbage collection).Existing Go books tend to be highly technical in nature, teaching all aspects of the language regardless of their relevance to beginners. This book, rather than talking about the features of Go in abstract terms, features simple, clear examples that demonstrate Go in action, and diagrams to explain difficult concepts.This book will not only teach developers basic language features, it will get them comfortable consulting error output, documentation, and search engines to find solutions to problems. It will teach all the conventions and techniques that employers expect an entry-level Go developer to know.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Computer programming; Application software; Development; COMPUTERS / Programming / General; Development; Computer programming; Go (Computer program language)", tableofcontents = "Let's get going: syntax basics \\ Which code runs next?: conditionals and loops \\ Call me: functions \\ Bundles of code: packages \\ On the list: arrays \\ Appending issue: slices \\ Labeling data: maps \\ Building storage: structs \\ You're my type: defined type \\ Keep it to yourself: encapsulation and embedding \\ What can you do?: interfaces \\ Back on your feet: recovering from failure \\ Sharing work: goroutines and channels \\ Code quality assurance: automated testing \\ Responding to requests: web apps \\ A pattern to follow: HTML templates \\ Understanding os. OpenFile: opening files \\ Six things we didn't cover: leftovers", } @Book{McNerney:2019:BBB, author = "P. J. McNerney", title = "Beginning {Bazel}: Building and Testing for {Java}, {Go}, and More", publisher = pub-APRESS, address = pub-APRESS:adr, pages = "xi + 192", year = "2019", ISBN = "1-4842-5194-6", ISBN-13 = "978-1-4842-5193-5, 978-1-4842-5194-2", LCCN = "QA75.5-76.95", bibdate = "Thu Apr 22 10:09:52 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/java2010.bib", URL = "http://www.vlebooks.com/vleweb/product/openreader?id=none\%26isbn=9781484251942", abstract = "Discover Bazel, a new build and software test set of tools for today's programmers and developers. This book shows you how to speed up your builds and tests, and how to use Bazel in the context of your favorite programming language. You'll see that the languages and SDKs supported include Java, Android, iOS, and Go. What You Will Learn Use Bazel as a build tool Test software with Bazel Work with Java, C++, Android, iOS, Go, and other programming languages Run Bazel on Linux, macOS, and Windows Scale and extend Bazel to other languages and platforms Who This Book Is For Experienced programmers looking for alternative build/test tools.", acknowledgement = ack-nhfb, remark = "Referencing Build Targets Outside of the Current Package.", subject = "Computer software; Development; Testing", tableofcontents = "About the Author \\ About the Technical Reviewer \\ 1: Introduction \\ What This Book Is \\ What This Book Is Not \\ Features of Bazel \\ High-Level Build Language \\ Explicit Dependency Management \\ Advanced Visibility Features \\ Explicit Workspace Management \\ Remote Build Execution and Caching \\ Build Dependency Analysis \\ Fast, Correct Builds (and Tests) \\ Who This Book Is For (and Possibly Not For) \\ 2: Setup and Installation \\ MacOS \\ Installing Xcode \\ Installing Bazel \\ Installing Java \\ Verifying Your Python Version \\ Ubuntu Linux \\ Installing Required Packages \\ Installing Bazel \\ Installing Java \\ Windows \\ Setting Up Your System \\ Installing Required Applications \\ Visual C++ Redistributable for Visual Studio 2015 \\ MSYS2 \\ Bazel Installation \\ Installing Language Support \\ C++ \\ Java \\ Python \\ Final Word \\ 3: Your First Bazel Project \\ Setting Up Your Workspace \\ Adding Source Code \\ Hello World, Java Style \\ Specifying the BUILD Targets \\ Building Your Targets \\ Build the Binary \\ Running the Binary \\ Creating and Using Dependencies \\ Adding IntMultiplier.java to java\_binary \\ Creating a java\_library Dependency \\ Depending on Build Targets \\ Testing Your Build Targets \\ Setting Up Testing Dependencies \\ Creating the java\_test Build Target \\ Build (and Clean) the World \\ Build Everything (In a Directory) \\ Build Everything (At This Directory and Below) \\ Clean (Mostly) Everything \\ Final Word \\ 4: WORKSPACE File Functionality \\ WORKSPACE Files \\ Adding New Rules to WORKSPACE \\ A Deeper Dive into the Load Path \\ Finding the bazel\_tools Repository \\ Loading Multiple Rules at the Same Time \\ Referencing Other Dependencies \\ http\_archive \\ git\_repository \\ Retrieving a Git Repository \\ Fine Print on git\_repository \\ http\_archive vs. git\_repository \\ Employing a New Language \\ Locating the Go Language Rules Repository \\ 5: A Simple Echo Client/Server Program \\ Setting Up Your Workspace \\ Go Echo Server \\ Java Echo Client \\ Naming the Echo Client and Server \\ Echoing Between Programs \\ Upgrading to JSON \\ JSON in Go \\ JSON in Java \\ GSON Setup \\ Adding the Transmission Object to EchoClient \\ Executing the Echo Client/Server with JSONFinal Word: Duplication of Effort \\ 6: Protocol Buffers and Bazel \\ Setting Up Your Workspace \\ Creating Your First Protocol Buffer \\ Using the Protocol Buffer in Java \\ Creating the Java Proto Library Target \\ Using Your Java Protocol Buffer Target \\ Using the Protocol Buffer in Go \\ Creating the Go Proto Library Target \\ Using Your Go Protocol Buffer Target \\ Echo Using Protocol Buffers \\ Dependency Tracking and Management \\ Change Management in Action \\ Final Word \\ 7: Code Organization and Bazel \\ Setup \\ Separating the Protocol Buffers", } @Book{Torres:2019:ASG, author = "Aaron Torres", title = "Advanced solutions in {Go} testing and distributed systems", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "1 streaming video file (1 hour, 48 minutes)", year = "2019", ISBN = "1-78862-788-1", ISBN-13 = "978-1-78862-788-7", LCCN = "????", bibdate = "Thu Apr 22 10:31:22 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "``Go (a.k.a. Golang) is a statically-typed programming language first developed at Google. It is derived from C with additional features such as garbage collection, type safety, dynamic-typing capabilities, additional built-in types, and a large standard library. This video takes off where basic tutorials on the language leave off. You can immediately put into practice some of the more advanced concepts and libraries offered by the language while avoiding some of the common mistakes for new Go developers. The video explores applications that interact with users, such as websites, command-line tools, or via the file system. It demonstrates how to handle advanced topics such as parallelism, distributed systems, and performance tuning. Lastly, it finishes with reactive and serverless programming in Go.''--Resource description page.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Application software; Development; Electronic videos; local", } @InProceedings{Ciolino:2020:GTN, author = "Matthew Ciolino and Josh Kalin and David Noever", editor = "{IEEE}", booktitle = "2020 Third International Conference on Artificial Intelligence for Industries {(AI4I)}", title = "The {Go} Transformer: Natural Language Modeling for Game Play", publisher = pub-IEEE, address = pub-IEEE:adr, pages = "23--26", year = "2020", DOI = "https://doi.org/10.1109/AI4I49448.2020.00012", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, } @Book{Steele:2020:BGG, author = "Tom Steele and Chris Patten and Dan Kottmann", title = "{Black Hat Go}: {Go} Programming for Hackers and Pentesters", publisher = pub-NO-STARCH, address = pub-NO-STARCH:adr, pages = "xxv + 337", year = "2020", ISBN = "1-0981-2264-X, 1-59327-865-9", ISBN-13 = "978-1-0981-2264-5, 978-1-59327-865-6", LCCN = "QA76.9.A25 S739 2020", bibdate = "Thu Apr 22 07:27:53 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Black Hat Go explores the darker side of Go, the popular programming language revered by hackers for its simplicity, efficiency, and reliability. It provides an arsenal of practical tactics from the perspective of security practitioners and hackers to help you test your systems, build and automate tools to fit your needs, and improve your offensive security skillset, all using the power of Go. You'll begin your journey with a basic overview of Go's syntax and philosophy and then start to explore examples that you can leverage for tool development, including common network protocols like HTTP, DNS, and SMB. You'll then dig into various tactics and problems that penetration testers encounter, addressing things like data pilfering, packet sniffing, and exploit development. You'll create dynamic, pluggable tools before diving into cryptography, attacking Microsoft Windows, and implementing steganography. You'll learn how to: * Make performant tools that can be used for your own security projects. * Create usable tools that interact with remote APIs. * Scrape arbitrary HTML data. * Use Go's standard package, net/http, for building HTTP servers. * Write your own DNS server and proxy. Use DNS tunneling to establish a C2 channel out of a restrictive network. * Create a vulnerability fuzzer to discover an application's security weaknesses. * Use plug-ins and extensions to future-proof products. * Use plug-ins and extensions to future-proof products. * Build an RC2 symmetric-key brute-forcer. * Implant data within a Portable Network Graphics (PNG) image Are you ready to add to your arsenal of security tools? Then let's Go!", acknowledgement = ack-nhfb, } @Book{Strecansky:2020:HHP, author = "Bob Strecansky", title = "Hands-on High Performance with {Go}: Boost and Optimize the Performance of Your {Golang} Applications at Scale with Resilience", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "vii + 391", year = "2020", ISBN = "1-78980-177-X (paperback), 1-78980-578-3", ISBN-13 = "978-1-78980-177-4 (paperback), 978-1-78980-578-9", LCCN = "QA76.73.G63", bibdate = "Thu Apr 22 07:32:11 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "http://proquest.safaribooksonline.com/?fpi=9781789805789", abstract = "Hands-On High Performance with Go is a complete resource with proven methodologies and techniques to help you diagnose and fix performance problems in your Go applications. With this book, you will be confident enough to solve the performance-related concerns in your enterprise applications.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Application software; Development; Development; Go (Computer program language)", tableofcontents = "Cover \\ Title Page \\ Copyright and Credits \\ Dedication \\ About Packt \\ Contributors \\ Table of Contents \\ Preface \\ Section 1: Learning about Performance in Go \\ 1: Introduction to Performance in Go \\ Technical requirements \\ Understanding performance in computer science \\ A brief note on Big O notation \\ Methods to gauge long term performance \\ Optimization strategies overview \\ Optimization levels \\ A brief history of Go \\ The Go standard library \\ Go toolset \\ Benchmarking overview \\ The ideology behind Go performance \\ Goroutines \\ performance from the start \\ Channels \\ a typed conduit \\ C-comparable performance \\ Large-scale distributed systems \\ Summary \\ 2: Data Structures and Algorithms \\ Understanding benchmarking \\ Benchmark execution \\ Real-world benchmarking \\ Introducing Big O notation \\ Practical Big O notation example \\ Data structure operations and time complexity \\ O(1) \\ constant time \\ O(log n) \\ logarithmic time \\ O(n) \\ linear time \\ O(n log n) \\ quasilinear time \\ O(n2) \\ quadratic time \\ O(2n) \\ exponential time \\ Understanding sort algorithms \\ Insertion sort \\ Heap sort \\ Merge sort \\ Quick sort \\ Understanding search algorithms \\ Linear search \\ Binary search \\ Exploring trees \\ Binary trees \\ Doubly linked list \\ Exploring queues \\ Common queuing functions \\ Common queuing patterns \\ Summary \\ 3: Understanding Concurrency \\ Understanding closures \\ Anonymous functions \\ Anonymous functions with respect to closures \\ Closures for nesting and deferring work \\ HTTP handlers with closures \\ Exploring goroutines \\ The Go scheduler \\ Go scheduler goroutine internals \\ The M struct \\ The P struct \\ The G struct \\ Goroutines in action \\ Introducing channels \\ Channel internals \\ Buffered channels \\ Ranges over channels \\ Unbuffered channels \\ Selects \\ Introducing semaphores \\ Understanding WaitGroups \\ Iterators and the process of iteration \\ Briefing on generators \\ Summary \\ 4: STL Algorithm Equivalents in Go \\ Understanding algorithms in the STL \\ Sort \\ Reverse \\ Min element and max element \\ Binary search \\ Understanding containers \\ Sequence containers \\ Array \\ Vector \\ Deque \\ List \\ Forward list \\ Container adapters \\ Queue \\ Priority queue \\ Stack \\ Associative containers \\ Set \\ Multiset \\ MapMultimap \\ Understanding function objects \\ Functors \\ Iterators \\ Internal iterators \\ External iterators \\ Generators \\ Implicit Iterators \\ Summary \\ 5: Matrix and Vector Computation in Go \\ Introducing Gonum and the Sparse library \\ Introducing BLAS \\ Introducing vectors \\ Vector computations \\ Introducing matrices \\ Matrix operations \\ Matrix addition \\ A practical example (matrix subtraction) \\ Scalar multiplication \\ Scalar multiplication practical example \\ Matrix multiplication \\ Matrix multiplication practical example \\ Matrix transposition", } @Book{Bodner:2021:LGI, author = "Jon Bodner", title = "Learning {Go}: an Idiomatic Approach to Real-world {Go} Programming", publisher = pub-ORA-MEDIA, address = pub-ORA-MEDIA:adr, pages = "xvii + 352", year = "2021", ISBN = "1-4920-7721-6", ISBN-13 = "978-1-4920-7721-3", LCCN = "QA76.73.G63 B64 2021", bibdate = "Thu Apr 22 07:19:32 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/ora.bib", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Computer programming; Web applications; Programming; Open source software; Go (Computer program language)", } @Article{Lemire:2021:NPG, author = "Daniel Lemire", title = "Number parsing at a gigabyte per second", journal = j-SPE, volume = "51", number = "8", pages = "1700--1727", month = aug, year = "2021", CODEN = "SPEXBL", DOI = "https://doi.org/10.1002/spe.2984", ISSN = "0038-0644 (print), 1097-024X (electronic)", ISSN-L = "0038-0644", bibdate = "Fri Jul 23 09:04:36 MDT 2021", bibsource = "https://www.math.utah.edu/pub/tex/bib/fparith.bib; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/spe.bib", abstract = "With disks and networks providing gigabytes per second, parsing decimal numbers from strings becomes a bottleneck. We consider the problem of parsing decimal numbers to the nearest binary floating-point value. The general problem requires variable-precision arithmetic. However, we need at most 17 digits to represent 64-bit standard floating-point numbers (IEEE 754). Thus, we can represent the decimal significand with a single 64-bit word. By combining the significand and precomputed tables, we can compute the nearest floating-point number using as few as one or two 64-bit multiplications. Our implementation can be several times faster than conventional functions present in standard C libraries on modern 64-bit systems (Intel, AMD, ARM, and POWER9). Our work is available as open source software used by major systems such as Apache Arrow and Yandex ClickHouse. The Go standard library has adopted a version of our approach.", acknowledgement = ack-nhfb, ajournal = "Softw. Pract. Exp.", fjournal = "Software --- Practice and Experience", journal-URL = "http://onlinelibrary.wiley.com/journal/10.1002/(ISSN)1097-024X", onlinedate = "11 May 2021", } @Article{Nelson:2021:GAT, author = "Grant Nelson and Clemente Izurieta", title = "A Gap in the Analysis of Technical Debt in Procedural Languages: an Experiential Report on {Go}", journal = j-IEEE-SOFTWARE, volume = "38", number = "6", pages = "71--75", year = "2021", CODEN = "IESOEG", DOI = "https://doi.org/10.1109/MS.2021.3103710", ISSN = "0740-7459 (print), 1937-4194 (electronic)", ISSN-L = "0740-7459", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, fjournal = "IEEE Software", journal-URL = "https://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=52", } @Book{Thornton:2021:GBG, author = "Edward Thornton", title = "{Go} for Beginners: A Genius Guide to {Go} Programming", publisher = "????", address = "????", pages = "????", year = "2021", ISBN = "????", ISBN-13 = "979-85-399-6273-9", LCCN = "????", bibdate = "Mon Sep 20 07:41:30 2021", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, } @Book{Titmus:2021:CNG, author = "Matthew Titmus", title = "Cloud Native {Go}: building reliable services in unreliable environments", publisher = pub-ORA-MEDIA, address = pub-ORA-MEDIA:adr, pages = "????", year = "2021", ISBN = "1-4920-7633-3", ISBN-13 = "978-1-4920-7633-9", LCCN = "????", bibdate = "Thu Apr 22 07:21:07 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/ora.bib", acknowledgement = ack-nhfb, subject = "Cloud computing; Go (Computer program language); Cloud computing; Go (Computer program language)", } @Book{Williams:2021:BCP, author = "Andrew Williams", title = "Building Cross-Platform {GUI} Applications with {Fyne}: Create beautiful, platform-agnostic graphical applications using {Fyne} and the {Go} programming language", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "xii + 301", year = "2021", ISBN = "1-80056-316-7 (paperback), 1-80056-688-3 (PDF e-book)", ISBN-13 = "978-1-80056-316-2 (paperback), 978-1-80056-688-0 (PDF e-book)", LCCN = "QA76.9.U83 .W555 2021", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Understand how to use the Fyne toolkit to build exciting apps for a range of devices and deploy them effectively. Key Features: Learn how to use standard widgets, dialogs, and layouts as well as how to build your own Understand how to develop an app and package and distribute it to different operating systems and app stores. Explore the design principles and vision of the Fyne toolkit and how that may align with your project. Book Description: The history of graphical application development is long and complicated, with various development challenges that persist to this day. The mix of technologies involved and the need to use different programming languages led to a very steep learning curve for developers looking to build applications across multiple platforms. In Building Cross-Platform GUI Applications with Fyne, you'll understand how the Go language, when paired with a modern graphical toolkit such as Fyne, can overcome these issues and make application development much easier. To provide an easy-to-use framework for cross-platform app development, the Fyne project offers many graphical concepts and design principles that are outlined throughout this book. By working through five example projects, you'll learn how to build apps effectively, focusing on each of the main areas, including the canvas, layouts, file handling, widgets, data binding, and themes. The book will also show you how the completed applications can then be run on your desktop computer, laptop, and smartphone. After completing these projects, you will discover how to prepare applications for release and distribute them to platform marketplaces and app stores. By the end of this book, you'll be able to create cross-platform graphical applications with visually appealing user interfaces and concise code. What you will learn: Become well-versed with the history of GUI development and how Fyne and the Golang programming language make it easier. Explore how the Fyne toolkit is architected and the various modules are provided. Discover how Fyne apps can be tested and constructed using best practices. Construct five complete applications and deploy them to your devices. Customize the design of your apps by extending widgets and themes. Understand the separation and presentation of data and how to test and build applications that present dynamic data. Who this book is for: This Fyne-Golang GUI book is for developers from any background who are looking to build cross-platform applications \ldots{}", acknowledgement = ack-nhfb, tableofcontents = "A Brief History of GUI Toolkits and Cross-Platform Development \\ The Future According to Fyne \\ Window, Canvas, and Drawing \\ Layout and File handling \\ Widget Library and Themes \\ Data Binding and Storage \\ Building Custom Widgets and Themes \\ Project Structure and Best Practices \\ Bundling Resources and Preparing for Release Distribution \\ App Stores and Beyond \\ Appendix A: Developer Tool Installation \\ Appendix B: Installation of Mobile Build Tools \\ Appendix C: Cross-Compiling", } @Book{Woodbeck:2021:NPG, author = "Adam Woodbeck", title = "Network Programming with {Go}: Code Secure and Reliable Network Services from Scratch", publisher = pub-NO-STARCH, address = pub-NO-STARCH:adr, pages = "xxii + 363", year = "2021", ISBN = "1-0981-2889-3, 1-71850-088-2 (paperback)", ISBN-13 = "978-1-0981-2889-0, 978-1-71850-088-4 (paperback)", LCCN = "QA76.73.G63 W663 2021", bibdate = "Thu Apr 22 07:25:26 MDT 2021", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Go combines the best parts of many other programming languages. It's fast, scalable, and designed for high-performance networking and multiprocessing-in other words, it's perfect for network programming. Network Programming with Go is for developers ready to start leveraging Go's ease of use for writing secure, readable, production-ready network code. Early chapters establish a foundation of networking and traffic-routing know-how upon which the rest of the book builds. You'll put that knowledge to use as author Adam Woodbeck guides you through writing programs that communicate using TCP, UDP, Unix sockets, and other features that ensure reliable data transmission. As you progress, you'll explore higher-level network protocols like HTTP and HTTP/2, then build applications that securely interact with servers, clients, and APIs over a network using TLS. In addition, Woodbeck shows you how to create a simple messaging protocol, develop tools for monitoring network traffic, craft a custom web server, and implement best practices for interacting with cloud providers using their SDKs. Along the way, you'll learn: * IP basics for writing effective network programs, such as IPv4 and IPv6 multicasting, ports, and network address translation. * How to use handlers, middleware, and multiplexers to build capable HTTP-based applications with minimal code. * The OSI and TCP/IP models for layered data architectures. * Methods for reading data from/writing data to a network connection, like the type-length-value encoding scheme. * Tools for incorporating authentication and encryption into your applications using TLS, like mutual authentication. * How to serialize data for storage or transmission in Go-friendly formats like JSON, Gob, XML, and protocol buffers. * How to Leverage Go's code generation support to efficiently communicate with gRPC-based network services So get ready to take advantage of Go's built-in concurrency, rapid compiling, and rich standard library. Because when it comes to writing robust network programs, it's Go time.", acknowledgement = ack-nhfb, } @Book{Yoon:2021:AGB, author = "Harry Yoon", title = "The Art of {Go} --- Basics: Introducing to Programming in {Go}", publisher = "Coding Books Press", address = "????", pages = "????", year = "2021", ISBN-13 = "979-87-11-30861-4", LCCN = "????", bibdate = "Mon Sep 20 07:38:53 2021", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, } @Article{Costa:2022:BTS, author = "Diego Elias Costa and Suhaib Mujahid and Rabe Abdalkareem and Emad Shihab", title = "Breaking Type Safety in {Go}: An Empirical Study on the Usage of the {\tt unsafe} Package", journal = j-IEEE-TRANS-SOFTW-ENG, volume = "48", number = "7", pages = "2277--2294", month = jul, year = "2022", CODEN = "IESEDJ", DOI = "https://doi.org/10.1109/TSE.2021.3057720", ISSN = "0098-5589 (print), 1939-3520 (electronic)", ISSN-L = "0098-5589", bibdate = "Thu Jul 21 10:20:56 2022", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/ieeetranssoftweng2020.bib", acknowledgement = ack-nhfb, fjournal = "IEEE Transactions on Software Engineering", journal-URL = "http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=32", } @Article{Cox:2022:GPL, author = "Russ Cox and Robert Griesemer and Rob Pike and Ian Lance Taylor and Ken Thompson", title = "The {Go} programming language and environment", journal = j-CACM, volume = "65", number = "5", pages = "70--78", month = may, year = "2022", CODEN = "CACMA2", DOI = "https://doi.org/10.1145/3488716", ISSN = "0001-0782 (print), 1557-7317 (electronic)", ISSN-L = "0001-0782", bibdate = "Tue Apr 26 07:08:57 MDT 2022", bibsource = "https://www.math.utah.edu/pub/tex/bib/cacm2020.bib; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "https://dl.acm.org/doi/10.1145/3488716", abstract = "Released as open source in November 2009, Go has become the foundation for critical infrastructure at every major cloud provider. Its creators look back on how Go got here and why it has stuck around.", acknowledgement = ack-nhfb, fjournal = "Communications of the ACM", journal-URL = "https://dl.acm.org/loi/cacm", } @Book{Doak:2022:GDL, author = "John Doak and David Justice", title = "{Go} for {DevOps}: Learn how to use the {Go} language to automate servers, the cloud, {Kubernetes}, {GitHub}, {Packer}, and {Terraform}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "xxiv + 608", year = "2022", ISBN = "1-80181-889-4 (paperback), 1-80181-934-3 (e-book)", ISBN-13 = "978-1-80181-889-6 (paperback), 978-1-80181-934-3 (e-book)", LCCN = "QA76.73.G63 D63 2022", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", abstract = "Achieve reliable release automation and get zero troublesome notifications on your release day. Key Features:: Develop the skills to build command-line tools to control thousands of nodes. Use Go to create Terraform providers and GitHub actions and extend Kubernetes. Gain the knowledge to build DevOps workflows that are understandable, scalable, and safe. Book Description: Go is the go-to language for DevOps libraries and services, and without it, achieving fast and safe automation is a challenge. With the help of Go for DevOps, you'll learn how to deliver services with ease and safety, becoming a better DevOps engineer in the process. Some of the key things this book will teach you are how to write Go software to automate configuration management, update remote machines, author custom automation in GitHub Actions, and interact with Kubernetes. As you advance through the chapters, you'll explore how to automate the cloud using software development kits (SDKs), extend HashiCorp's Terraform and Packer using Go, develop your own DevOps services with gRPC and REST, design system agents, and build robust workflow systems. By the end of this Go for DevOps book, you'll understand how to apply development principles to automate operations and provide operational insights using Go, which will allow you to react quickly to resolve system failures before your customers realize something has gone wrong. What you will learn Understand the basic structure of the Go language to begin your DevOps journey Interact with filesystems to read or stream data Communicate with remote services via REST and gRPC Explore writing tools that can be used in the DevOps environment Develop command-line operational software in Go. Work with popular frameworks to deploy production software. Create GitHub actions that streamline your CI/CD process. Write a ChatOps application with Slack to simplify production visibility. Who this book is for: This book is for Ops and DevOps engineers who would like to use Go to develop their own DevOps tooling or integrate custom features with DevOps tools such as Kubernetes, GitHub Actions, HashiCorp Packer, and Terraform. Experience with some type of programming language, but not necessarily Go, is necessary to get started with this book.", acknowledgement = ack-nhfb, tableofcontents = "Section 1: Getting Up and Running with Go \\ 1: Go Language Basics \\ 2: Go Language Essentials \\ 3: Setting Up Your Environment \\ 4: Filesystem Interactions \\ 5: Using Common Data Formats \\ 6: Interacting with Remote Data Sources \\ 7: Writing Command-Line Tooling \\ 8: Automating Command-Line Tasks \\ Section 2: Instrumenting, Observing, and Responding \\ 9: Observability with OpenTelemetry \\ 10: Automating Workflows with GitHub Actions \\ 11: Using ChatOps to Increase Efficiency \\ Section 3: Cloud ready Go \\ 12: Creating Immutable Infrastructure Using Packer \\ 13: Infrastructure as Code with Terraform \\ 14: Deploying and Building Applications in Kubernetes \\ 15: Programming the Cloud \\ 16: Designing for Chaos", } @Book{Feigenbaum:2022:GJP, author = "Barry Feigenbaum", title = "{Go} for {Java} Programmers Learn the {Google Go} Programming Language", publisher = pub-APRESS, address = pub-APRESS:adr, pages = "xxxv + 582 + 61 + 1", year = "2022", DOI = "https://doi.org/10.1007/978-1-4842-7199-5", ISBN = "1-4842-7199-8", ISBN-13 = "978-1-4842-7199-5", LCCN = "QA76.73.G63 F45 2022", bibdate = "Wed Feb 16 12:54:41 MST 2022", bibsource = "fsz3950.oclc.org:210/WorldCat; https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/java2020.bib", abstract = "Get an in-depth introduction to the Go programming language and its associated standard runtime libraries. This book is targeted towards programmers that already know the Java programming language and uses that Java knowledge to direct the learning of Go. You will get a deep understanding of the Go language and obtain a good introduction to the extensive Go standard libraries. This book teaches Go through clear descriptions of Go features, contrasting them with similar Java features and via providing extensive code examples. After reading this book you will be knowledgeable enough about Go and its libraries to begin doing effective programming using the Go language. Go for Java Programmers is structured more like a tutorial than a reference document. It covers key features of Go, but not every little detail as a reference might. Its goal is to get you competent enough in Go and its runtime that you can begin to effectively write Go programs. What You Will Learn Examine the key Go Runtime libraries and how they compare to Java libraries See when it is appropriate to use the Go language instead of the Java language Read and understand programs written in Go Write many programs in Go Determine when Go is an appropriate language to develop applications in Discover how the Go and Java languages and development experience compare and contrast Who This Book Is For Primarily existing professional Java programmers or students that already know something about Java. A basic understanding of Java is expected. Some basic programming experience with imperative languages is expected.", acknowledgement = ack-nhfb, subject = "Go (Computer program language); Java (Computer program language)", tableofcontents = "Intro \\ Table of Contents \\ About the Author \\ About the Technical Reviewer \\ Acknowledgments \\ Introduction \\ Assessments \\ Part I: First Look at Go \\ 1: A Brief Look at Go vs. Java \\ Go Is a Compiled (vs. Interpreted, As Java Is) Language \\ Go and Java Share Similar Program Structure \\ Go and Java Have Some Code Style Differences That Influence How Code Is Structured \\ Both Go and Java Are Procedural Languages \\ Java Is an Object-Oriented (OO) Language, While Go Is Not Fully OO \\ Java Is a Highly Functional Language, Go Is Less So \\ Java Is a Highly Declarative Language, Go Is Less So \\ Many Java Features Are Annotation Driven \\ Go Does Not Support Exceptions \\ Both Java and Go Use Managed Memory (Garbage Collectors) \\ Go and Java Both Support Concurrency but in Different Ways \\ Go's Runtime Is Simpler Than the JRE \\ The Go Program Build Process Is Different \\ Go and Java Have Similar Release Cycles \\ 2: What Java Has That Go Does Not \\ Multiple Assignments \\ Statements and Operators \\ Assert Statement \\ While and Do Statements \\ Throw Statement/Throws Clause \\ Strictfp, transient, volatile, synchronized, abstract, static \\ Objects and Classes (OOP) and Inner Classes, Lambdas, this, super, Explicit Constructors \\ Generic Types and Methods \\ Extensive Functional Programming Capabilities \\ Boxing of Primitive Values \\ Source Annotations \\ Multiple Visibilities \\ Overloaded/Overridden Functions \\ Formal Enums \\ Built-in Binary Data Self-Serialization \\ Concurrent Collections \\ 3: A Deeper Comparison of Go and Java \\ Part II: The Go Language \\ 4: Key Go Aspects \\ Simple Go Program Example \\ Go Packages \\ Go Comments \\ Go Build/Run Process \\ Go Playground \\ Go Integrated Development Environments \\ Running Go Programs \\ Building Go Programs \\ Bytecode vs. Real Code \\ Go Command-Line Tools \\ Tools Bundled in the Go Command \\ Other Tools \\ Go Runs Programs Instead of Classes \\ Go Memory Management \\ Go Identifiers \\ Go Scopes \\ Go Scopes vs. Go Source Files \\ Initializing Go Variables \\ Lifetimes of Go Identifiers \\ Go Module Summary \\ Go Assignments and Expressions \\ Text Formatting in Go \\ Goroutines \\ Issues with Concurrency \\ Go Concurrency \\ Goroutines by Example \\ 5: Go Basic Features \\ Language Keywords \\ Operators and Punctuation \\ Go Operator Precedence \\ Go Built-in Functions \\ 6: Go Types \\ Primitive/Built-in Types \\ Numbers \\ Characters and Strings \\ Reference vs. Pointer Types \\ Drill Down on Basic Data Types \\ Boolean Type \\ Integer Types \\ Floating-Point Types \\ When nil Can Go Wrong \\ Programmer-Defined Types \\ Arrays \\ Slices \\ Maps \\ Functions \\ Methods As Functions \\ Any Declared Type Can Have Custom Functions \\ Functions As Values \\ Structs \\ Structure Fields \\ Structure Literals \\ Nested Structures", } @InProceedings{Yoshikawa:2022:ENC, author = "Taiki Yoshikawa and Hijiri Komura and Chihiro Nishiwaki and Ren Goto and Kazushige Matama and Katsuhiro Naito", editor = "{IEEE}", booktitle = "2022 {IEEE} International Conference on Consumer Electronics {(ICCE)}", title = "Evaluation of new {CYPHONIC}: Overlay network protocol based on {Go} language", publisher = pub-IEEE, address = pub-IEEE:adr, pages = "1--6", year = "2022", DOI = "https://doi.org/10.1109/ICCE53296.2022.9730323", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, } @Article{Kirszenberg:2023:GFL, author = "Alexandre Kirszenberg and Antoine Martin and Hugo Moreau and Etienne Renault", title = "{Go2Pins}: a framework for the {LTL} verification of {Go} programs (extended version)", journal = j-INT-J-SOFTW-TOOLS-TECHNOL-TRANSFER, volume = "25", number = "1", pages = "77--94", month = feb, year = "2023", CODEN = "????", DOI = "https://doi.org/10.1007/s10009-022-00692-w", ISSN = "1433-2779 (print), 1433-2787 (electronic)", ISSN-L = "1433-2779", bibdate = "Sat Jun 3 14:59:07 MDT 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/sttt.bib", URL = "https://link.springer.com/article/10.1007/s10009-022-00692-w", acknowledgement = ack-nhfb, ajournal = "Int. J. Softw. Tools Technol. Transfer", fjournal = "International Journal on Software Tools for Technology Transfer", journal-URL = "http://link.springer.com/journal/10009", } @Book{Leiva:2023:NAG, author = "Nicolas Leiva and Michael Kashin", title = "Network Automation with {Go}: Learn how to automate network operations and build applications using the {Go} programming language", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "xviii + 423", year = "2023", ISBN = "1-80056-092-3 (paperback), 1-80056-101-6 (e-book)", ISBN-13 = "978-1-80056-092-5 (paperback), 978-1-80056-101-4 (e-book)", LCCN = "QA76.73.G63", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, tableofcontents = "Introduction \\ Go Basics \\ Getting Started with Go \\ Networking (TCP/IP) with Go \\ Network Automation \\ Configuration Management \\ Automation Frameworks \\ Network APIs \\ OpenConfig Network Monitoring \\ Expert Insights \\ Appendix: Building a Testing Environment", } @Book{Tolaram:2023:FSW, author = "Nanik Tolaram and Nick Glynn", title = "Full-Stack Web Development with {Go}: Build your web applications quickly using the {Go} programming language and {Vue.js}", publisher = pub-PACKT, address = pub-PACKT:adr, pages = "xvii + 282", year = "2023", ISBN = "1-80323-419-9 (paperback), 1-80324-391-0 (e-book)", ISBN-13 = "978-1-80323-419-9 (paperback), 978-1-80324-391-7 (e-book)", LCCN = "QA76.73.G63", bibdate = "Mon Dec 18 09:08:05 2023", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib", acknowledgement = ack-nhfb, tableofcontents = "Preface \\ Part 1: Building a Golang Backend \\ 1: Building the Database and Model \\ Technical requirements \\ Installing Docker \\ Setting up Postgres \\ Designing the database \\ Installing sqlc \\ Using sqlc \\ Setting up the database \\ Generating CRUD with sqlc \\ Building the makefile \\ Summary \\ 2: Application Logging \\ Technical requirements \\ Exploring Go standard logging \\ Using golog \\ Local logging \\ Writing log messages to the logging server \\ Configuring multiple outputs \\ Summary \\ 3: Application Metrics and Tracing \\ Technical requirements \\ Understanding OpenTelemetry \\ The OpenTelemetry APIs and SDK \\ Tracing applications \\ Installing Jaeger \\ Integrating the Jaeger SDK \\ Integration with Jaeger \\ Adding metrics using Prometheus \\ Adding metrics using Prometheus \\ Running docker-compose \\ Summary \\ Part 2: Serving Web Content \\ 4: Serving and Embedding HTML Content \\ Technical requirements \\ Handling HTTP functions and Gorilla Mux \\ Hello, World with defaults \\ Building on the basics with Gorilla Mux \\ Rendering static content \\ Rendering dynamic content \\ Using Go embed to bundle your content \\ Summary \\ 5: Securing the Backend and Middleware \\ Technical requirements \\ Adding authentication \\ Creating our dummy user \\ Authenticating a user \\ Adding middleware \\ Basic middleware \\ Adding cookies and sessions \\ Cookies and session handling \\ Storing session information \\ Using Redis for a session \\ Summary \\ 6: Moving to API-First \\ Technical requirements \\ Structuring an application \\ Defining packages \\ Exposing our REST API \\ Cross-Origin Resource Sharing (CORS) \\ JSON middleware \\ Session middleware \\ Converting to and from JSON \\ Defining request model \\ Defining a response model \\ Reporting errors with JSON \\ Using JSONError \\ Using JSONMessage \\ Summary \\ Part 3: Single-Page Apps with Vue and Go \\ 7: Frontend Frameworks \\ Technical requirements \\ Server-side rendering versus single-page apps \\ Introducing React, Vue, and more \\ React \\ Svelte \\ Vue \\ Creating a Vue app \\ Application and components \\ Login page using Vue \\ Using ViteUsing Vue Router to move around \\ Routing the login page \\ Summary \\ 8: Frontend Libraries \\ Technical requirements \\ Understanding Vuetify \\ Setting up Vuetify \\ Using UI components \\ Understanding Buefy \\ Bulma sample \\ Setting up Buefy \\ UI components \\ Validating data entry with Vuelidate \\ Better input handling with Cleave.JS \\ Summary \\ 9: Tailwind, Middleware, and CORS \\ Technical requirements \\ Introducing Tailwind \\ Creating a new Tailwind and Vite project \\ Consuming your Golang APIs \\ CORS for secure applications \\ Creating Vue middleware", } @Article{Williams:2025:BGI, author = "Alex Williams", title = "{BLOG@CACM}: {Go}-ing to the Cloud", journal = j-CACM, volume = "68", number = "2", pages = "8--9", month = feb, year = "2025", CODEN = "CACMA2", DOI = "https://doi.org/10.1145/3701221", ISSN = "0001-0782 (print), 1557-7317 (electronic)", ISSN-L = "0001-0782", bibdate = "Wed Jan 22 09:53:46 MST 2025", bibsource = "https://www.math.utah.edu/pub/tex/bib/cacm2020.bib; https://www.math.utah.edu/pub/tex/bib/go.bib", URL = "https://dl.acm.org/doi/10.1145/3701221", abstract = "Alex Williams on how the Go programming language can help resolve some major cloud-related conundrums.", acknowledgement = ack-nhfb, ajournal = "Commun. ACM", fjournal = "Communications of the ACM", journal-URL = "https://dl.acm.org/loi/cacm", } @Article{Wu:2026:EAG, author = "Jianwei Wu and James Clause", title = "An empirical assessment of {Go} linters on real-world issues", journal = j-J-SYST-SOFTW, volume = "236", number = "??", pages = "??--??", month = jun, year = "2026", CODEN = "JSSODM", DOI = "https://doi.org/10.1016/j.jss.2026.112797", ISSN = "0164-1212 (print), 1873-1228 (electronic)", ISSN-L = "0164-1212", bibdate = "Tue Mar 17 07:21:11 MDT 2026", bibsource = "https://www.math.utah.edu/pub/tex/bib/go.bib; https://www.math.utah.edu/pub/tex/bib/jsystsoftw2020.bib", URL = "https://www.sciencedirect.com/science/article/pii/S0164121226000312", acknowledgement = ack-nhfb, ajournal = "J. Syst. Softw.", articleno = "112797", fjournal = "Journal of Systems and Software", journal-URL = "http://www.sciencedirect.com/science/journal/01641212", }