mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-14 12:36:30 +00:00
42 lines
1 KiB
Markdown
42 lines
1 KiB
Markdown
|
[![Go Report Card](https://goreportcard.com/badge/github.com/go-toolsmith/astcopy)](https://goreportcard.com/report/github.com/go-toolsmith/astcopy)
|
||
|
[![GoDoc](https://godoc.org/github.com/go-toolsmith/astcopy?status.svg)](https://godoc.org/github.com/go-toolsmith/astcopy)
|
||
|
[![Build Status](https://travis-ci.org/go-toolsmith/astcopy.svg?branch=master)](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
|
||
|
}
|
||
|
```
|