ورود به حساب

نام کاربری گذرواژه

گذرواژه را فراموش کردید؟ کلیک کنید

حساب کاربری ندارید؟ ساخت حساب

ساخت حساب کاربری

نام نام کاربری ایمیل شماره موبایل گذرواژه

برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید


09117307688
09117179751

در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید

دسترسی نامحدود

برای کاربرانی که ثبت نام کرده اند

ضمانت بازگشت وجه

درصورت عدم همخوانی توضیحات با کتاب

پشتیبانی

از ساعت 7 صبح تا 10 شب

دانلود کتاب Beyond Effective Go: Part 2 - Striving for High-Quality

دانلود کتاب Beyond Go: قسمت 2 - تلاش برای با کیفیت بالا

Beyond Effective Go: Part 2 - Striving for High-Quality

مشخصات کتاب

Beyond Effective Go: Part 2 - Striving for High-Quality

ویرایش:  
نویسندگان:   
سری:  
ISBN (شابک) : 9780645582048, 9780645582086 
ناشر:  
سال نشر: 2024 
تعداد صفحات: 354 
زبان: English 
فرمت فایل : PDF (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) 
حجم فایل: 6 مگابایت 

قیمت کتاب (تومان) : 70,000



ثبت امتیاز به این کتاب

میانگین امتیاز به این کتاب :
       تعداد امتیاز دهندگان : 3


در صورت تبدیل فایل کتاب Beyond Effective Go: Part 2 - Striving for High-Quality به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.

توجه داشته باشید کتاب Beyond Go: قسمت 2 - تلاش برای با کیفیت بالا نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.


توضیحاتی درمورد کتاب به خارجی



فهرست مطالب

About the Author
Acknowledgments
Contents
Preface
Book Structure and Formatting
Chapter 4
Introduction
Code
Exploring Software Design Principles
	Minimalist and composable
	The DRY principle vs. the KISS principle
	Aspects to consider when applying the DRY principle
	Delegation
	Favor composition over inheritance
	Accept interfaces and return structs
	Accepting interfaces
	Returning structs
	The singles principle
	A single purpose
	A single responsibility
	A single level of abstraction
	The interface segregation principle
	Roles versus responsibilities
	The dependency inversion principle
Object-Oriented Design Patterns
	The singleton pattern
	Usage
	Implementation
	What is different in Go?
	The factory method pattern
	Usage
	Implementation
	What is different in Go?
	The observer pattern
	Usage
	Implementation
	What is different in Go?
	The adapter pattern
	Usage
	Implementation
	What is different in Go?
	Final thoughts on patterns
Summary
Questions
Chapter 5
Introduction
Code
What is Code UX?
Achieving Clarity
	Why idiomatic code?
	Formatting
	Whitespace
	What’s in a name?
	Names should be meaningful
	Names should be concise
	Names should be consistent
	Names should be context-aware
	Names don’t need to be original
	Adopting early return
	Switching to extended switch
	Avoiding shadowing
	Better struct initialization
	Avoiding foreign idioms
	Writing useful documentation
	Errors are not exceptional
	Named errors
	Wrapped errors
	The use of globals and init()
	Enums
	Don’t panic()!
Striving for Consistency
	Achieving a consistent style
	Building consistent packages
	The size and scope of packages
	Packages should be self-contained
	It’s all in the package name
	File organization
	How many files should be in a package?
	Do I need a function or a method?
	How long should our functions and methods be?
	Consider parameters and return values
	The number of arguments
	The scope of the arguments
	The grouping of the arguments
	The ordering of the arguments
	Boolean arguments are evil
	Reducing constructor arguments
	Employing private constructors
	Adopting config injection
Becoming Predictable
	APIs: export only what you must
	APIs: good fences make good neighbors
	Predictability with encapsulation
	Constructors
	A little copying vs. a little dependency
Dealing with Conflicting Goals
	Tradeoffs between code UX and performance
	Tradeoffs between code UX and code UX
Summary
Questions
Chapter 6
Introduction
Code
The What, When, Why, and How of Testing
	Why do we test?
	When do we test?
	How much should we test?
	Unit tests
	User acceptance tests
	End-to-end tests
	The test pyramid
	What should we be testing?
	What should we not be testing?
Table-Driven Tests
Test Scenario Construction
	What are the intended features and behaviors?
	What\'s the impact of different input types?
	How could things go wrong?
Mocks, Stubs, and Test Recorders
	Mocks and the Mockery tool
	Stubs
	Quick mocks and stubs
	Test recorders
Test UX and Quality
	The predictability of a pattern
	Improving test readability
	Using assertion libraries
	Avoiding the ambiguity of magic constants
	Reducing duplication
	Duplication caused by dependencies
	Duplication caused by mocks
	Duplication caused by test inputs
	Scenario 1: The input value influences the outcome
	Scenario 2: The input has no influence on the outcome
Achieving Test Resilience
Test Tricks That You Might Not Know
	The lesser-known Go test features
	The run flag
	The short flag
	The timeout flag
	The count flag
	Tests with context
	Test data
	Testing and private constructors
	Test-only config
	Internal initialization
	Function-based dependencies
	Testing with globals
	Testing fluent APIs
	Testing concurrent code
	Avoidance
	Switching outputs to channels
	Using a test latch
	Ensuring tests always complete
	Strategy 1: go test -timeout
	Strategy 2: Use channel results
	Strategy 3: Set context timeouts
	Strategy 4: Use give-ups
	Benchmarking concurrent code
	Asserting that an object implements an interface
	Fixing bugs
	Skipping tests
	Approach 1: use init()
	Approach 2: use an environment variable
	Approach 3: check for installed applications
	Global variables
Identifying Test-Induced Damage
	Parameters or configuration that only exist for testing
	Outputs that only exist for testing
	Parameters that cause leaky abstractions
	Publishing mocks in production code
	Excessive test coverage
Make it Work, Make it Clean, and Then, Maybe, Make it Fast
Summary
Questions
Interlude
Chapter 7
Introduction
Code
Be Lazy
	Less is often better
	Writing documentation can save time
Be Observant
	Look for repeated tasks
	Look for common mistakes
	Clean as you go
Be Introspective
Be Adventurous
	Use automated tests
	Plan, but just enough
	Expect change
Master Your Tooling
	Build tools that work for you
	Calculate unit test coverage
	Perform race detection with tests
	Format code and imports
	Generate/regenerate code
	Generate the dependency graph
	Ship it!
	Master your IDE
	Useful features
	Context actions
	The test runner
	Live templates
	Useful shortcuts
	Useful plugins
	Master your environment
	Handy Git scripts
	Shell aliases
Make Small Changes
Summary
Questions
Chapter 8
Introduction
Code
Functional Programming in Go
	First-class and higher-order functions
	Recursion
	Currying and partial functions
	Immutability
Fun with functions
	Understanding anonymous functions and closures
	Function-based patterns
	Replacing abstract methods
	Implementing middleware
	Functional options
	Decorating functions to satisfy an interface
	Function chaining
Implementing Futures
	Implementing futures the Go way
	Considerations surrounding futures
Curious Struct Tricks
	Empty structs
	Anonymous structs
	noCopy
Summary
Questions
Chapter 9
Introduction
Code
Integrating with APIs
	API integration example
	Calling the PagerDuty API
	Handling the API response
	Configuration and the command line
	Validation and reporting
	Wrapping up
Using Go to Coordinate Other Programs
Code Generation in Action
	A very brief introduction
	Code generation example
	Go’s AST
	Go’s text/template package
	Putting it all together
	Final thoughts on code generation
Summary
Questions
Postface
More From This Author
	Beyond Effective Go - Part 1
	Hands-On Dependency Injection in Go
	Articles and links to other content




نظرات کاربران