Golang pointer vs value performance.
Use the following hard rule.
Golang pointer vs value performance. If you're going to benchmark passing by pointer vs.
Golang pointer vs value performance If you know and can restrict Aug 23, 2024 · In the world of Go programming, there’s an often overlooked yet crucial battle that every developer needs to understand: value semantics vs. A common idea is that with pointers in Golang, your applications will be faster, because you will avoid copying data around the time. There's no significant performance difference to speak of. We’ll cover key topics like returning pointers to local variables, choosing between pointer Sep 26, 2020 · In Golang we have the concept of pointers. That's why most high performance code that uses reflect will use reflect to just grab raw pointers to things, and then use normal unsafe pointer logic to do the rest. เมื่อไหร่ควรใช้ pointer receiver? Nov 10, 2021 · In the first example f is of type reflect. In Go programming language, we have access to deal with a pointer which means we must understand how the Pass by Value and Pass by Reference work in go, we will separate it into 3 sections: Basic, Referenced, Function. Variable is a large struct. Value to atomic. Sep 7, 2022 · Convert from atomic. I'm using time. But in addition, when you copy the pointer, you still need to dereference the pointer to get the value within the function. Time instead. Jul 21, 2022 · We do not have other option, but pass variable by value. Feb 24, 2019 · Now if I have method that accepts IFace is it better to design it to accept a pointer to that interface of value? Accept pointer: func DummyMethod(f *IFace) { (*f). Jan 29, 2020 · Performance when using JSON. Aug 29, 2021 · source: www. The first is so that the method can modify the value that its receiver points to. Many of the discussion focused on how struct pointers is "bad" in terms of performance due to initialization in heap and garbage collecting. Println("New value of Mar 28, 2014 · Should I define methods on values or pointers? For types such as basic types, slices, and small structs, a value receiver is very cheap so unless the semantics of the method requires a pointer, a value receiver is efficient and clear. This introduces a problem - if in the course of normal software engineering, you need to use a pointer receiver method, then the method you're using it Copying a client is not usually what you want. They cannot do this because they have no value type to do it on other than primitive values like float and int. Choosing values Vs pointers: If you want the receiver of the argument to be able to mutate it, then pass a pointer. Use a pointer if you need to determine if something was unset/nil. I. Unfortunately, this muddies the waters for newbies because *myVar is a pointer to myVar’s value It doesn't communicate intent clearly. Begin quote: Occasionally, new Go developers hear “pointers don’t pass copies” and take that to a logical extreme, concluding: “Pointers are always faster because copying Nov 17, 2019 · By using a pointer, the default-zero value is a nil pointer, which could be used to signify the absence of a value. So pointer vs value has basically zero effect on whether a value is on the heap. The second is to avoid copying the value on each method call. Value vs. But what about with optimizations? Pass by Pointer Aug 19, 2014 · laher reminds us in the comments that using a value instead of pointer also means getting a copy, and respecting the immutable nature of an object:: You'd want to use the non-pointer valueMethod when (for nstance) you're returning a [value derived from an] 'immutable' private property. y) } // scale, with pointer caller, func Nov 27, 2016 · I am searching to create a well formatted and well structured project so I have two questions about performances passing and returning value or pointers. y*v. On the This code is not a simple comparison of returning a value vs returning a pointer, but a contrived, micro-benchmark of allocating lots of value types on the stack (returning a value) vs on the heap, by returning a pointer that escapes to the heap. value, escaping, and benchmarks if performance is a concern at this stage. Contribute to err0r500/golang-pointer-vs-value-benchmark development by creating an account on GitHub. Choose either pointers or struct types for all available methods. This is a reason why we have to pass an argument in io. Nov 17, 2019 · They falsely believe that the zero value of a pointer is the zero value of the pointer’s type. Eg. It's inevitable. There is a performance difference between value and pointer receivers. (Extending Rick's answer) There are actually six types that hold pointer values and a pointer to these (i. Use a pointer if you are using a type that has methods with pointer receivers. type struct Example{ CreatedDate *time. Unmarshal will populate it directly using the pointer. For performance issues, don't guess. value) PassStruct(foo) fmt. When we pass a struct by value to a method, Go creates a copy of the struct. Nov 6, 2024 · Difference between value and pointer. Now the structs remain where they are and we only deal with pointers which I assume have a smaller footprint and will therefore make my operations faster. If you'd like to dive yourself into guts follow the links: Language Mechanics On Stacks And Pointers and Bad Go: pointer returns func main() { var a int = 10 // Declare an integer variable a with value 10 var p *int = &a // Declare a pointer variable p and assign it the address of a // Dereference p to access the value at the address it points to fmt. - GitHub - qdongxu/golang-value-pointer-benchmark: A lax benchmark about the value and pointer sematics. In my case I want to create a function that from the request returns an object so I have created it: Mar 11, 2013 · These, though they appear to be passed by value (you don't need to use a pointer) are actually passed by reference, so don't in general use a pointer to a slice, map or channel. The pointer works much like a pointer in C or C++ only the value it points to is garbage collected like in C# or Java. Println("Value at pointer p:", *p) // Outputs: 10 (value stored at the address p points to) // Modify the value at the address p points to *p = 20 fmt. Pointer when the value is a pointer. to show that Golang doesn't support pointer Feb 1, 2019 · Code. But I have a feeling that pointer is "better" in performance when passed Sep 29, 2024 · TL;DR: Pass by Value vs. The pointer is explicit and exposed, however it's still garbage collected. go Unless you’ve a very specific performance requirement, use a pointer only if you wish to allow the function to modify the value passed to it. . Reader and io. Dec 5, 2021 · Why is it convention in C and Go to pass a pointer to a variable and change it rather return a new variable with the value? In C: #include <stdio. Generally I've only returned a pointer if: The data can be mutated by a function There are fields such as mutexes which require a pointer Jun 29, 2017 · The overheads is not significant if the value is relatively small. However, an interface pointer is not that useful as an interface is a reference type already. When a type has mixed pointer and value receivers, the types that use it may need to be pointer or value receivers depending on the methods they use. The struct you May 8, 2013 · The length (the number of defined keys) of a map after inserting a new key-value pair always fits into an int. You can see more about pointers here, since it is not the objective of this post. Jan 5, 2015 · The rule about pointers vs. value you have to run the test long enough to see the effects of garbage collection. Method1() } By value: func DummyMethod(f IFace){ f. But, passing pointers in Golang is often slower than passing values. Variable is a large struct If variable is a large struct and performance is an issue, it’s preferable to pass variable by pointer. Value wrappers), and it aids to work with structs of any type. But I have a feeling that pointer is "better" in performance when passed Aug 25, 2015 · The first item returned is a value, the second is a pointer. So that variable cannot be modified downstream. New as it's a performance-critical app. Sqrt(v. There's still a need atomic. Now an interface can actually hold a pointer of a type that has the value nil, which is not the same as a nil interface. Writer rather than have the value in return. Its 2 functions called in main() tests the 2 features respectively. This is a simple go code, with 2 functions, that return a float64, one returns it as a value, & the other returns a pointer to it. Written by Gopal Agrawal. – Jul 19, 2024 · I was recently working on a lesson about pointer performance for Boot. The article ran some micro benchmarks and I added a few more to show how the various options perform. Sep 29, 2024 · TL;DR: Pass by Value vs. e. There are a few reasons to take this approach. As the Go specification says, the method set of a type T consists of all methods with receiver type T, while that of the corresponding pointer type *T consists of all methods with receiver *T or T. h> int getValueUsingReturn() { int value If you use a pointer, it's stored in a separate memory location from the struct it points to. If you want to print out the value of the variable being pointed at from the pointer variable, you need to dereference that variable. Feb 17, 2019 · The topic is large, and there is plenty of information online. Mar 19, 2010 · They are pointers. The main benefit is that int and uint are the smallest (in terms of bitsize) data types which are safe to use in a Go program in conjunction with common Go data types such as slices and maps. Value be gradually deprecated? The atomic types that are more specific than atomic. Otherwise pass a value. • Pointer Receiver: The method receives a pointer to the type’s value. Value. Returning pointers places the value(s) on the heap which may or may not have performance implications. a pointer to a pointer) types doesn't help anyway: pointers; slices; maps; channels; interfaces; function. The way it works is that you pass a pointer to the structure you want to fill, and json. Nov 25, 2024 · Before diving into updating pointers, let’s understand what pointers are. Unfortunately, this muddies the waters for newbies because *myVar is a pointer to myVar’s value Jul 22, 2023 · Choosing Between Value and Pointer Receivers: The decision between value and pointer receivers depends on the specific use case. Choosing between value and pointer receivers impacts: Performance: Golang Value Receiver----Follow. It will give you a better view about the Nov 13, 2024 · 1. Can you provide general guidelines of when to work with structs directly vs. Any other scenarios, use the value. go The places where reflect is slow is when you're setting/getting fields or values. The only way to really tell is to benchmark it but the people who do benchmark it often find better performance by passing by value. value = 1 } func main() { var foo Foo fmt. Oct 4, 2019 · This is why when we printed out the value of pointer, we received the value of 0xc0000721e0, which is the address of where the creature variable is currently stored in computer memory. Value, the second is obviously the type of the field. Passing a slice by value is just passing the slice definition tuple (array pointer, len, cap) by value. May 6, 2024 · Guidelines for Choosing Between Pointer and Value Receivers. value = 1 } func PassStructPointer(foo *Foo) { foo. go: // method - test package main import ( "fmt" "math" ) type Vertex struct { x float64 y float64 } // abs, with pointer caller, func (v *Vertex) AbsPointer() float64 { return math. 8 Golang Performance Tips I Jun 2, 2020 · To answer the question in your title: an interface pointer is a pointer to an interface value. In Go, methods can be attached to types in two ways: • Value Receiver: The method receives a copy of the type’s value. But now I'm giving the garbage collector a lot more work. com Pass by Value vs Pass by Reference in Go. The struct you Now the structs remain where they are and we only deal with pointers which I assume have a smaller footprint and will therefore make my operations faster. When a slice is passed, the slice value (which is a small descriptor) will be copied and passed - which will point to the same backing array (which will not be copied). The slice value does not include its elements (unlike arrays). Firstly, semantics: you’re clearly labelling whether your value can, or cannot, be modified by the receiving function. – The empty value of an interface is nil. This distinction influences method behavior, memory efficiency, and interface satisfaction. It takes about a millisecond once the value gets to be around 10 megabytes of data. Values can escape to the heap and pointers can be made to stack values. The number 5, OTOH, is a value. Python is a pass-by-object-reference language. Generally speaking, it is important to maintain a deep memory of what is told in this course and then accumulate it day by day to really reach an understanding. A pointer in Golang is a variable that stores the memory address of another variable. The first one creates a struct by value in each iteration, while the second one does use a pointer to the struct. For example, you can overwrite the pointer value which has no impact on the caller, as opposed to dereferencing it and overwriting the memory it points to. when to work with pointers to structs? The rule about pointers vs. Even pointers are a type and assigned the value of the memory address. Oct 17, 2021 · A pointer is an address value that points to the start of an area of memory. And vice versa, if variable is expected to be modified, it must be passed by pointer. It does a lot of allocations. Run a benchmark. If variable is a large struct and performance is an issue, it’s preferable to pass variable by pointer. May 8, 2014 · Also benchmarking values vs pointers depends on the size of the struct and memory access patterns after the fact. You have no direct control over that. Pass by Value: Copies the entire struct when passed to a function, causing performance issues for large structs. And passing pointer of struct doesn't. Even assigning an int16 to an interface variable results in an allocation, and there is a pointer indirection every time it's read. This means they don’t have typical pointer operations such as taking an address or dereferencing. In all other cases, it will hold a dynamic type (which has to have a method set compatible with the interface's method set) and the value itself (which can be either a pointer or a value). It works similar to languages like C, C++ and represents the memory address where the variable value is stored. Use the following hard rule. But a slice value is a header, describing a contiguous section of a backing array, and a slice value only contains a pointer to the array where the elements are actually stored. No type safety - you will be getting nil dereference panics sooner or later, because you will forget to check for nil at some point. values for receivers is that value methods can be invoked on pointers and values, but pointer methods can only be invoked on pointers Not true, actually. Because passing by value often avoids heap allocations and thus reduces the load on the garbage collector. Aug 12, 2022 · Also, each add is now three instructions which is one fewer than the pass-by-value vec4_add. x*v. Pass by Pointer in Go. To test the performance difference yourself: main_test. Since(then) function which does not accept the pointer as the parameter, but takes a time. values for receivers is that value methods can be invoked on pointers and values, but pointer methods can only be invoked on pointers. There are so many discussion about whether to use struct pointer or value in Golang. Performance Loss: Pass by value starts to slow down noticeably when struct There are so many discussion about whether to use struct pointer or value in Golang. Currently I return a value of this struct to the caller, but wanted to get some advice about returning a pointer to the data itself. This blog tries to keep it short and concise, and useful for experienced programmers that are new to Go. func (t *Type) Method() {} //pointer receiver func (t Type) Method() {} //value receiver. dev’s Golang course when I found myself repeating some advice I’ve given many times before. All instances of 5 are alike; identity (sameness, equality) is defined by the value, not a pointer to it. Sep 24, 2023 · Understanding Method Receivers in Golang: Value vs Pointer Receivers. When you use a value receiver, a copy of the instance is made for the method to operate on, which can lead to more memory Nov 13, 2014 · The following code shows two benchmarks. The concept of a pointer in a high-level language is not fundamentally different from String struct size: 16 (address pointer to actual string + length) String pointer size: 8 (address pointer to string struct) When passing a string as a value, you're creating a new struct, which contains the same pointer to the actual string and the length of it. Performance Implications. Passing struct to function argument makes copy of values. If you pass a pointer, then the pointer value will be copied and passed. And, here is a go code that I wrote when learning this feature. For the vast majority of codebases, consistency trumps performance. Printf Mar 15, 2023 · Pointers in Go don’t function the way they do in C/C++. It also prevents copying, which can be a performance improvement in very limited circumstances (do not pass pointers around all the time because it might be a performance In short, I tell people to choose a pointer or not based on the logic of the program, and worry about performance later. Is the existence of atomic. Negatively impacts performance. Apr 25, 2015 · in this go code piece, key is string, value is pointer to a struct. The difference is subtle but occasionally relevant. This means that dereferencing the pointer can cause more overhead than simply copying a struct one time. This rule arises because pointer methods can modify the receiver; invoking them on a value would cause the method to receive a copy of the value, so any modifications would be discarded. Performance Loss: Pass by value starts to slow down noticeably when struct Returning a struct value instead of a pointer is great if your struct doesn't have any internal references to mutable data (pointers, slices, maps). So in my case, when using a value we're copying 16 bytes instead of just 8. If the struct is large and you want to avoid copying it for performance reasons - use a pointer. So they are values too. Feb 13, 2015 · There seems so be a misunderstanding of receivers, as expressed in rog's answer. var b *bar for i := 0; i < 10; i++ { b = new(b) foo(b) } In the later case, if foo for example stores its arg in some container, results in 10 instances of bar existing while the former case with only one - in variable b. This article explores important performance considerations when working with pointers in Go. Pass by Reference that can be used to optimize performance and reduce memory usage. Additionally, if the value you’re working with is expensive to copy, like a mutex or a file, returning a pointer can be a good option. Instead of holding a direct value Mar 11, 2022 · I have a function which takes a generic type and should return a function that always return a pointer. If you need to know the difference, always write benchmarks. You can modify existing elements in the original while still passing by Pass by pointer improves performance is a myth supported by amateur benchmarking. Method1() } My first guess is since these are structs, probably it's better to pass by value? Or is there a rule of thumb The parent comment included a common misconception that "pointers mean pass-by-reference", which is not true for Go. Use a pointer if you need to pass something to be modified. From Golang FAQ:. Here are some guidelines to help you decide: Default to Value Receivers: If a method does not modify its receiver, use a value receiver. I don't want to use reflect. Both value receiver and pointer receiver methods can be invoked on a correctly-typed pointer or non-pointer. From this concept, we can have functions that works with pointer params and value params. Pointers have more properties to them than just nullability. On the other hand, opt for pointer receivers when the method needs to modify the original value or work Quick notes: Maps and slices are already pointers in go, so you don't need to do *[]string and such. Value do not cover all possible types. Printf("before PassStruct: %v\n", foo. There are two reasons to use a pointer receiver. Use Pointer Receivers for Large Structures: If the struct is large, using a pointer receiver can prevent performance issues due to copying. go package main import We do not have other option, but pass variable by value. Time } I'm using the pointer, so I can pass nil to the struct, if no date exists. The issue with most other languages is that they almost only support pointers and no value types. In that combined context (discussing GC performance and pointer-vs-value method receivers), I explained why pass-by-value is more GC friendly and therefore more performant A lax benchmark about the value and pointer sematics. Another difference is in the performance. Everything in Go is passed by value, slices too. Besides of this, I also hear various discussions about whether we should use pointer to improve the Overview. Coming to Go from Python introduced me to a new concept I didn’t have to put thought into. So you need to have a good knowledge of computer composition principles. These two concepts dictate how data is passed and manipulated in your code, and mastering them can be the difference between efficient, bug-free applications and a world of confusion. Why is the latter 20x slower ?? I know about GC issues with GoLang, but shouldn't escape analysis handle those situations ? Jun 22, 2020 · So how to choose between Pointer vs Value receiver? If you want to change the state of the receiver in a method, 8 Golang Performance Tips I Discovered After Years of Coding. Aug 31, 2023 · There is a performance difference between value and pointer receivers. When passing a pointer to an object, you're passing a pointer by value, not passing an object by reference. 18 Followers Sep 9, 2012 · vs. This can be more efficient if the receiver is a large struct, for example. Performance: For large structs, creating a copy can be costly, so using a pointer receiver is more efficient. What's the benefit to use pointer of Contry here? Can I remove the "*" and achieve the same behaviour? Such as: var store = map[string]Country Thanks. For performance reasons, it might still make sense to use pointers for large structs, but IMHO in a high level language such as Go, that should be for the compiler writers to decide. This is the biggest thing that will shock a C programmer -- you can return the address of a "stack allocated" variable because of escape analysis. Value Receivers Mar 28, 2023 · When you return a pointer to a value, you’re avoiding the cost of copying the value. What this means is, when you pass an object Parameters in Go are always passed by value, and a copy of the value being passed is made. I don’t believe it. Here it’s able to move one value into xmm0 and then perform the add directly from the value on the stack. pointer semantics. Go offers something of a compromise between those two paradigms. Passing a value into a function takes longer as the data gets larger. So passing struct can't update field value. Value only for compatibility reasons, should atomic. The compiler is the only one who decides. package main import ( "fmt" ) type Foo struct { value int } func PassStruct(foo Foo) { foo. It doesn't communicate intent clearly. Pointer Receivers. penjee. If you're going to benchmark passing by pointer vs. when to work with pointers to structs? If you use a pointer, it's stored in a separate memory location from the struct it points to. For example, file: bench_test. You will use more memory, because each value now has to store a value and a pointer to the value. Jul 19, 2016 · So when you have the value type, it's already providing an abstraction to hide the extra layer of indirection that occurs. On the other hand, when we pass a struct by pointer, we pass the memory address of the original Mar 7, 2023 · This is when using slice of pointers is a better option, since only the pointers will need to be copied, not the entire values. For data structures that are I would expect it to be more efficient - partly because of what you said: A float is smaller than a pointer on a system that you describe. Time as a pointer in one of my structs. Jun 4, 2017 · Everything in Golang is passed by value. Jun 2, 2024 · In Go, choosing between value receivers and pointer receivers for methods can significantly impact performance, especially when dealing with large structs. As you discovered, the only real reason to pass a pointer to a slice is if you need to append to the original. The reason is Garbage Collection in heap and Escape analysis Feb 26, 2023 · Memory Management with Pointers; Pass by Value vs. The behavior for returning a pointer versus returning a value is more interesting. We have generics now, just make an Optional[Value] type and use It discusses pointer vs. Any changes made to the struct inside the method won’t affect the original struct because we’re working with an independent copy. There’s other ways of doing this, you could create a struct such as: Google recommends to not pass pointers as function arguments, just to save a few bytes so I guess we should favor pass by value the best points appear last Don't mix receiver types. Pass by Pointer: Passes a reference (pointer) to the struct, avoiding the overhead of copying large data. From a JSON point of view each item is unique, so there is no sharing of data. Consider using value receivers when the method doesn’t modify the original value and can work independently. If the struct is less than 5 fields (preferably, 3) and they are most primitives, and you don’t see how you may ever need a shared pointer to it, copy the value, otherwise, use a pointer and don’t think twice. Unmarshal does not return a value, so if you passed a value instead of a pointer, it would have no way to work properly as it would fill its copy of the interface it takes as parameter. All these point to “object” identity; so use pointers. If you are deserializing JSON into pointers in the hopes of saving memory, you won't. This makes sense, as the size of a pointer is the same for all data types. I assume the language authors didn't think it made sense to do this when you have a pointer to the slice object, given that points off to the actual memory that would be a pretty misleading. The indirection added by the pointer could have a significant effect on the The value inside an interface is always a pointer, and they use a bit of information about the type to store whether the value inside the interface represents a pointer or a plain value. Hi, do you know is there any specific reason that grpc tool generate using pointer semantics for slices? Since I always refer to value semantics when working in Golang, and only using pointers in some specific cases such as need to be nil, large variables, etc. In my experience, it's easier to use a type that has either pointer or value receivers. Using reflection goes through numerous steps and creates extra values (interface{} and reflect. Copying cache-line sized things is as fast as you can get, and the speed of dereferencing pointers from CPU cache is much different than dereferencing them from main memory. Methods (receivers) are not "defined on" a pointer or a type, the same methods can be called on the value-of-type as the pointer, the receiver's signature only determines whether it receives value-of-type or a pointer to value-of-type. Choosing a value or pointer receiver. Finally, when in doubt, use a pointer receiver. Regardless of what the method is called on, within the May 23, 2024 · Returning Primitive Types. The same is true of strings. Mar 21, 2019 · In Golang, we normally use pointers if there are needs to modify the instance’s own value. // file: main. This does however pose a problem now, since I need to use the time. And I usually try to convince others to use value semantics in their regular tasks with some reason in performance as well as nil Jul 24, 2023 · Pointer receivers are essential when you want to modify the underlying state of a struct or any other type. You should do this instead: May 12, 2019 · In order to choose the good semantic for your data, I strongly suggest reading the post about the value/pointer semantic written by Bill Kennedy. When you use a value receiver, a copy of the instance is made for the method to operate on, which can lead to more memory usage and Aug 21, 2018 · As you can see, json. string s are also special - they are reference types under the hood, but they are also immutable, so pass them around directly. if you pass it a non-pointer type it should return a pointer to that type, if you pass it a pointer type it should return the same type. You can use reflect where it's necessary and still write very fast Apr 1, 2021 · Pointers are a way of passing a reference to a value, rather than a value itself, around, allowing you to modify the original value or "see" modifications to that value. If you’re working with large data, this can be a significant performance gain. So the pass-by-pointer version is 102 instructions while the pass-by-value version is only 55. Well, really that's up to Go's escape analysis to decide? And might change as the escape analysis changes (hopefully for the better)? Jul 13, 2019 · 7) Receiver function Value หรือ Pointer? หลายคนน่าจะเคยประกาศ struct และ implement receiver function หรือ method แบบนี้. method_learn. As to why your code does not compile when Node is a struct, you are trying to pass a pointer to a function that takes a value. x + v.
lmvv kxjpk cky dkikr dejva znaf nqp zmxkh syydmgo mdmqsd
{"Title":"What is the best girl
name?","Description":"Wheel of girl
names","FontSize":7,"LabelsList":["Emma","Olivia","Isabel","Sophie","Charlotte","Mia","Amelia","Harper","Evelyn","Abigail","Emily","Elizabeth","Mila","Ella","Avery","Camilla","Aria","Scarlett","Victoria","Madison","Luna","Grace","Chloe","Penelope","Riley","Zoey","Nora","Lily","Eleanor","Hannah","Lillian","Addison","Aubrey","Ellie","Stella","Natalia","Zoe","Leah","Hazel","Aurora","Savannah","Brooklyn","Bella","Claire","Skylar","Lucy","Paisley","Everly","Anna","Caroline","Nova","Genesis","Emelia","Kennedy","Maya","Willow","Kinsley","Naomi","Sarah","Allison","Gabriella","Madelyn","Cora","Eva","Serenity","Autumn","Hailey","Gianna","Valentina","Eliana","Quinn","Nevaeh","Sadie","Linda","Alexa","Josephine","Emery","Julia","Delilah","Arianna","Vivian","Kaylee","Sophie","Brielle","Madeline","Hadley","Ibby","Sam","Madie","Maria","Amanda","Ayaana","Rachel","Ashley","Alyssa","Keara","Rihanna","Brianna","Kassandra","Laura","Summer","Chelsea","Megan","Jordan"],"Style":{"_id":null,"Type":0,"Colors":["#f44336","#710d06","#9c27b0","#3e1046","#03a9f4","#014462","#009688","#003c36","#8bc34a","#38511b","#ffeb3b","#7e7100","#ff9800","#663d00","#607d8b","#263238","#e91e63","#600927","#673ab7","#291749","#2196f3","#063d69","#00bcd4","#004b55","#4caf50","#1e4620","#cddc39","#575e11","#ffc107","#694f00","#9e9e9e","#3f3f3f","#3f51b5","#192048","#ff5722","#741c00","#795548","#30221d"],"Data":[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19],[20,21],[22,23],[24,25],[26,27],[28,29],[30,31],[0,1],[2,3],[32,33],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19],[20,21],[22,23],[24,25],[26,27],[28,29],[34,35],[30,31],[0,1],[2,3],[32,33],[4,5],[6,7],[10,11],[12,13],[14,15],[16,17],[18,19],[20,21],[22,23],[24,25],[26,27],[28,29],[34,35],[30,31],[0,1],[2,3],[32,33],[6,7],[8,9],[10,11],[12,13],[16,17],[20,21],[22,23],[26,27],[28,29],[30,31],[0,1],[2,3],[32,33],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[18,19],[20,21],[22,23],[24,25],[26,27],[28,29],[34,35],[30,31],[0,1],[2,3],[32,33],[4,5],[6,7],[8,9],[10,11],[12,13],[36,37],[14,15],[16,17],[18,19],[20,21],[22,23],[24,25],[26,27],[28,29],[34,35],[30,31],[2,3],[32,33],[4,5],[6,7]],"Space":null},"ColorLock":null,"LabelRepeat":1,"ThumbnailUrl":"","Confirmed":true,"TextDisplayType":null,"Flagged":false,"DateModified":"2020-02-05T05:14:","CategoryId":3,"Weights":[],"WheelKey":"what-is-the-best-girl-name"}