• Stars
    star
    256
  • Rank 159,219 (Top 4 %)
  • Language
    Go
  • License
    MIT License
  • Created over 9 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A library for doing diffs of arbitrary Golang structs.

messagediff Build Status Coverage Status GoDoc

A library for doing diffs of arbitrary Golang structs.

If the unsafe package is available messagediff will diff unexported fields in addition to exported fields. This is primarily used for testing purposes as it allows for providing informative error messages.

Optionally, fields in structs can be tagged as testdiff:"ignore" to make messagediff skip it when doing the comparison.

Example Usage

In a normal file:

package main

import "gopkg.in/d4l3k/messagediff.v1"

type someStruct struct {
    A, b int
    C []int
}

func main() {
    a := someStruct{1, 2, []int{1}}
    b := someStruct{1, 3, []int{1, 2}}
    diff, equal := messagediff.PrettyDiff(a, b)
    /*
        diff =
        `added: .C[1] = 2
        modified: .b = 3`

        equal = false
    */
}

In a test:

import "gopkg.in/d4l3k/messagediff.v1"

...

type someStruct struct {
    A, b int
    C []int
}

func TestSomething(t *testing.T) {
    want := someStruct{1, 2, []int{1}}
    got := someStruct{1, 3, []int{1, 2}}
    if diff, equal := messagediff.PrettyDiff(want, got); !equal {
        t.Errorf("Something() = %#v\n%s", got, diff)
    }
}

To ignore a field in a struct, just annotate it with testdiff:"ignore" like this:

package main

import "gopkg.in/d4l3k/messagediff.v1"

type someStruct struct {
    A int
    B int `testdiff:"ignore"`
}

func main() {
    a := someStruct{1, 2}
    b := someStruct{1, 3}
    diff, equal := messagediff.PrettyDiff(a, b)
    /*
        equal = true
        diff = ""
    */
}

See the DeepDiff function for using the diff results programmatically.

License

Copyright (c) 2015 Tristan Rice [email protected]

messagediff is licensed under the MIT license. See the LICENSE file for more information.

bypass.go and bypasssafe.go are borrowed from go-spew and have a seperate copyright notice.

More Repositories

1

go-pry

An interactive REPL for Go that allows you to drop into your code at any point.
Go
2,976
star
2

WebSync

WebSync is a document editing tool similar to Google Drive or Office 365.
JavaScript
302
star
3

go-sct

A color temperature setting library and CLI that operates in a similar way to f.lux and Redshift. Supports Wayland, X and Windows
C
123
star
4

talib

A Go(lang) wrapper for TA-Lib
Go
111
star
5

go-electrum

A pure Go (golang) electrum bitcoin wallet library.
Go
59
star
6

go-bayesopt

A library for doing Bayesian Optimization using Gaussian Processes (blackbox optimizer) in Go/Golang.
Go
47
star
7

driverender

Repo for visualizing self driving models and data
JavaScript
31
star
8

skeletondb

SkeletonDB is a lock-less thread safe in memory MVCC store written in Go.
Go
21
star
9

go-highlight

A Go (Golang) code syntax highlighting library.
Go
20
star
10

starry

A starbound server manager with an API for remote administration.
Go
16
star
11

sketchy-url-shortener

A sketchy URL shortener that uses keywords from selectable lists.
Go
10
star
12

go-csp-engine

Content Security Policy engine for Go/Golang. Unit test your CSP rules!
Go
9
star
13

fn.lc

fn.lc landing page
HTML
9
star
14

wikigopher

Wikipedia DB Dump Server + wikitext parser in Go/Golang
Go
9
star
15

friday

A real world application of pytorch, transfer learning and edge TPU to detect when my dog uses the restroom.
Python
8
star
16

overwatch

Go
7
star
17

turtle

A simple Go(lang) implementation of a Turtle (Terse RDF Triple Language) parser.
Go
7
star
18

torchdrive

torch primitives for BEV style perception models for self driving tasks
Python
7
star
19

quic

An attempt at QUIC in Go(lang). Probably will go nowhere. :|
Go
6
star
20

cs213

CPSC 213: Introduction to Computer Systems
C
6
star
21

campus

A interactive map for UBC.
Go
5
star
22

webrtc-lobby

A lobby service for webrtc.
Go
5
star
23

opentetrisarena

An open source webrtc based implementation of Tetris Arena
TypeScript
4
star
24

cs420

Go
3
star
25

go-censor

A go library for censoring bad/offensive words.
Go
3
star
26

ffi-tox

Ruby FFI bindings to Tox.
Ruby
3
star
27

ubc-food-safety

UBC Restaurant Food Safety Scraper
Go
3
star
28

ficrecommend

A FanFiction story recommendation service.
Go
3
star
29

rewriting-webextension

JavaScript
3
star
30

go-lbsql

Go library for doing client side SQL load balancing.
Go
3
star
31

ticker

simple stock ticker using a e-paper display and an esp8266
C
2
star
32

opendropbike

This is an open source (MIT licensed) reimplementation of the DropBike app since the official one is terrible.
JavaScript
2
star
33

consensus-slides

This is a tool designed to allow people to determine engagement during a lecture or presentation.
HTML
2
star
34

flytrap

A simple HTTP server for recording requests and serving static files.
Go
2
star
35

comic-rocket-api

A repository collating all of the information on the internal Comic Rocket API.
Ruby
2
star
36

SL-RubyScript

Allows scripting with Ruby to Second Life.
Ruby
2
star
37

go-caffe2

caffe2 bindings for Go
Go
2
star
38

upass

Renew your UPass automatically every month!
HTML
2
star
39

ServerInitProxy

A proxy that the server initializes for the client to connect to. Designed to connect to a private minecraft server behind a firewall. NOTE: New version has bugs.
Ruby
2
star
40

RubyLink

An advanced sign based system for mechanisms in Minecraft (Bukkit). Written in Ruby.
Ruby
2
star
41

config-files

My config files
Shell
2
star
42

polymer-react

Use React in Polymer 3 elements.
TypeScript
2
star
43

dominos.ca-coupons

A program to fetch all the dominos.ca coupons that are in the 1000-10000 range.
Go
2
star
44

go-bfloat16

Bfloat16 conversion utilities for Go/Golang
Go
1
star
45

transformer-example

Python
1
star
46

tensorflowops

A golang library that allows the user to access the registered tensorflow operations.
Go
1
star
47

cs304

HTML
1
star
48

chesms

Chess over SMS.
JavaScript
1
star
49

ourgraph

Go
1
star
50

cs221

CPSC 221: Basic Algorithms and Data Structures
C++
1
star
51

gh-notify

Go
1
star
52

etcdummy

Simple reimplementation of etcd for testing purposes
Go
1
star
53

bypass

bypass is an incredibly unsafe Go package that allows you to inspect private parts of go objects.
Go
1
star
54

comic-starship

A better comic viewer for Comic Rocket.
HTML
1
star
55

Bukkit-Miniplugs

Small Bukkit plugins (and scripts) that add various functionality. Written in ruby.
Ruby
1
star
56

confusednn-slicer

An experimental 3D model slicer using a combination of a CNN for processing a slice of the model and an RNN for generating gcode.
Python
1
star
57

Link

Advanced Sign Based Operations in Minecraft
Java
1
star
58

webrtc-lobby-elements

Polymer elements/webcomponents for interacting with the webrtc-lobby service.
JavaScript
1
star
59

RTerraria

Terraria server written in Ruby.
Ruby
1
star
60

dropbike-visualizer

A visualizer for dropbike trips.
HTML
1
star
61

monarch-api

Unofficial Monarch Python client
Python
1
star
62

gotorch

A WIP wrapper for pytorch / TorchScript
Go
1
star
63

axe

A simple graph partitioning algorithm written in Go. Designed for use for partitioning neural networks across multiple devices which has an added cost when crossing device boundaries.
Go
1
star
64

go-internetarchive

A Go API to the Internet Archive
Go
1
star
65

dnd-assistant

DND Assistant is an attempt to make a better DND helper app.
JavaScript
1
star
66

Ruby2LSL

A Symbolic-Expression to LSL converter. Right now it only converts ruby, however it is easy to extend.
Ruby
1
star
67

bridgesim-assets

An asset pack to use with aomarks/bridgesim .
1
star
68

ricela

Tesla stats and charging service. Exports car statistics to Prometheus as well as automatically starting and stopping ChargePoint chargers.
Go
1
star
69

cs425

https://www.cs.ubc.ca/~madooei/cpsc425/
Python
1
star