42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
[](https://goreportcard.com/report/github.com/go-toolsmith/astcopy)
 | 
						|
[](https://godoc.org/github.com/go-toolsmith/astcopy)
 | 
						|
[](https://travis-ci.org/go-toolsmith/astcopy)
 | 
						|
 | 
						|
# astcopy
 | 
						|
 | 
						|
Package astcopy implements Go AST reflection-free deep copy operations.
 | 
						|
 | 
						|
## Installation:
 | 
						|
 | 
						|
```bash
 | 
						|
go get github.com/go-toolsmith/astcopy
 | 
						|
```
 | 
						|
 | 
						|
## Example
 | 
						|
 | 
						|
```go
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"go/ast"
 | 
						|
	"go/token"
 | 
						|
 | 
						|
	"github.com/go-toolsmith/astcopy"
 | 
						|
	"github.com/go-toolsmith/astequal"
 | 
						|
	"github.com/go-toolsmith/strparse"
 | 
						|
)
 | 
						|
 | 
						|
func main() {
 | 
						|
	x := strparse.Expr(`1 + 2`).(*ast.BinaryExpr)
 | 
						|
	y := astcopy.BinaryExpr(x)
 | 
						|
	fmt.Println(astequal.Expr(x, y)) // => true
 | 
						|
 | 
						|
	// Now modify x and make sure y is not modified.
 | 
						|
	z := astcopy.BinaryExpr(y)
 | 
						|
	x.Op = token.SUB
 | 
						|
	fmt.Println(astequal.Expr(y, z)) // => true
 | 
						|
	fmt.Println(astequal.Expr(x, y)) // => false
 | 
						|
}
 | 
						|
```
 |