Description
Go Programming Experience
Intermediate
Other Languages Experience
JavaScript、PHP、C#、Delphi、JAVA
Related Idea
- Has this idea, or one like it, been proposed before?
- Does this affect error handling?
- Is this about generics?
- Is this change backward compatible? Breaking the Go 1 compatibility guarantee is a large cost and requires a large benefit
Has this idea, or one like it, been proposed before?
I don't think so, but considering how many error handling proposals there have been over the years it is possible.
Does this affect error handling?
Yes. It differs in that it doesn't attempt to handle errors in a magical way, but instead introduces a new syntax that can be used for several different types of common data handling.
Is this about generics?
No.
Proposal
Set ENV
ERROR_SINGLE = TRUE //error_single = true
Demo1:
//Single-line error handling
file, err := os.Create("abc.txt") @ return nil , err
defer file.Close()
Demo2:
func main() {
//Multiline error handling
:@
file, err:= os.Open("abc.txt")
defer file.Close()
buf := make([]byte, 1024)
_, err2 := file.Read(buf)
@ err | err2 return ...
}
Language Spec Changes
Two main changes: Add a block and add the operator and associated rules.with
Informal Change
No response
Is this change backward compatible?
I think so, but it should be possible to create an alternative that is if it is not. The parts that are potentially no backwards compatible are basically just implementation details.
Orthogonality: How does this change interact or overlap with existing features?
It enables separation of repeated error handling from the happy path of the code.
Would this change make Go easier or harder to learn, and why?
Slightly harder, but I don't think that it's overly complicated. It adds a new type of control flow, but I think that the main complication would probably come from the rules surrounding how the pattern matching works.
Cost Description
Some extra complexity. Possible runtime cost, but very minimal if it exists at all. It's mostly just syntax sugar. Most possible cost could come from some potentially unnecessary type switches, but it might be possible to optimize those away at compile-time in most cases.
Changes to Go ToolChain
Have no effect
Performance Costs
Likely minimal in both cases.
Prototype
No response