From c127e2898e6f63bdf0733b8c6b636ad9bb32b51c Mon Sep 17 00:00:00 2001 From: PeterBocan <me@pbocan.net> Date: Mon, 1 Jul 2019 16:45:01 +0200 Subject: [PATCH] Added a constructor to structs --- examples/structs/structs.go | 13 ++++++++++ examples/structs/structs.hash | 4 +-- examples/structs/structs.sh | 1 + public/structs | 47 +++++++++++++++++++++++++++++++++-- 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/examples/structs/structs.go b/examples/structs/structs.go index 6cf5629..21584a2 100644 --- a/examples/structs/structs.go +++ b/examples/structs/structs.go @@ -12,6 +12,16 @@ type person struct { age int } +// A de facto constructor of type `person`. +func NewPerson(name string) *person { + + // You can safely return a pointer to local variable + // as a local variable will survive the scope of the function. + p := person{name: name} + p.age = 42 + return &p +} + func main() { // This syntax creates a new struct. @@ -38,4 +48,7 @@ func main() { // Structs are mutable. sp.age = 51 fmt.Println(sp.age) + + // Call our constructor + fmt.Println(NewPerson("Jon")) } diff --git a/examples/structs/structs.hash b/examples/structs/structs.hash index 2c0e37f..a1194e9 100644 --- a/examples/structs/structs.hash +++ b/examples/structs/structs.hash @@ -1,2 +1,2 @@ -49cad39331ee5e9fb8d8dad99d3aff7f18a4e6d0 -XMZpGsF4sWM +71e8ecdcf8c8fbddbb250ada5bbe8659b68d5229 +nHvnHAGTYHq diff --git a/examples/structs/structs.sh b/examples/structs/structs.sh index 6d82fa0..f0d6025 100644 --- a/examples/structs/structs.sh +++ b/examples/structs/structs.sh @@ -6,3 +6,4 @@ $ go run structs.go Sean 50 51 +&{Jon 42} \ No newline at end of file diff --git a/public/structs b/public/structs index 31c03d0..22fd85f 100644 --- a/public/structs +++ b/public/structs @@ -29,7 +29,7 @@ records.</p> </td> <td class="code leading"> - <a href="http://play.golang.org/p/XMZpGsF4sWM"> + <a href="http://play.golang.org/p/nHvnHAGTYHq"> <img title="Run code" class="run" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVCjPY/j//z8DMu7o6GAAgpQgD9tLqcmJH4KDg14aaik/MtdXe2ZjY6OCrh6Fs2jRYmZ9Pd05M9uL/u9dPfU/CLS0dfxvKIz/X5Dg/z8pKdkGqwGpqakMUdExDHJSYqt37tjxf+qUSf9rc2P+79298/+RA3v+H1zV///o6r7/DrbWFQkJiQwxMTGoBjAxMTpKiQmuqMuP/f/xw/v/J0+f/W9tbvTfxVLn/8rJVf+v757z/96hRf8TQtxuCQmLMjk4OKAawMfDVWVvrvd85eTq/7tXTP6/e/XM/22lif9LCnL+b13Q/v/Kzln/L++c/X/7/Jb/VpYWuZFRUagGAAErEBtlxvi+vn944f9L26cDNcz6v21R9/8zm6aC2SBDbu+f/78kK+4/L79AO7oBYCAqxD/57JZp/y/tmPX/wrYZ/6+CbAayD6zs/78daBjIgPayFJAGG6wGAIFAcpjH/dv7F4ANABuya/b/Od3l/ye2V/+/tnv2/7ldxSANmrgMYGBhZg7fuagD7GyYIeeBrrqwdRrQgLn/l02sBGkwwWkAEAjV5EZ/vQV0LswAGAYZsLC3DKTBAJ8BzCkRni/uHFyIYcAtoNc6ypL/ANVIohigrKwMxqqqqgxMzKzM6VHeL+6iGQAKzDtAV5XlJv3n5uFLRTHgzZs3YPzz50+GwqJiPitD9Y8Pjy4BB+CNvfP+3wUmIpAhhckhr3X19LodHZ28UQxQU1MDYw0NDQYBAQEeoBOTK7JjP2xf3Pt/bkfB/4KkoDcKMmIL5OXlFerq6hhu3rzJgC8MwMDYxGSfm5vbVn9/f0cgVxAkpqioyFBfX49iAACbTAK+xT3CzgAAAABJRU5ErkJggg==" /> </a> <div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span> @@ -66,6 +66,36 @@ records.</p> </td> </tr> + <tr> + <td class="docs"> + <p>A de facto constructor of type <code>person</code>.</p> + + </td> + <td class="code leading"> + + <div class="highlight"><pre><span class="kd">func</span> <span class="nx">NewPerson</span><span class="p">(</span><span class="nx">name</span> <span class="kt">string</span><span class="p">)</span> <span class="o">*</span><span class="nx">person</span> <span class="p">{</span> +</pre></div> + + </td> + </tr> + + <tr> + <td class="docs"> + <p>You can safely return a pointer to local variable +as a local variable will survive the scope of the function.</p> + + </td> + <td class="code leading"> + + <div class="highlight"><pre> <span class="nx">p</span> <span class="o">:=</span> <span class="nx">person</span><span class="p">{</span><span class="nx">name</span><span class="p">:</span> <span class="nx">name</span><span class="p">}</span> + <span class="nx">p</span><span class="p">.</span><span class="nx">age</span> <span class="p">=</span> <span class="mi">42</span> + <span class="k">return</span> <span class="o">&</span><span class="nx">p</span> +<span class="p">}</span> +</pre></div> + + </td> + </tr> + <tr> <td class="docs"> @@ -164,10 +194,23 @@ pointers are automatically dereferenced.</p> <p>Structs are mutable.</p> </td> - <td class="code"> + <td class="code leading"> <div class="highlight"><pre> <span class="nx">sp</span><span class="p">.</span><span class="nx">age</span> <span class="p">=</span> <span class="mi">51</span> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Println</span><span class="p">(</span><span class="nx">sp</span><span class="p">.</span><span class="nx">age</span><span class="p">)</span> +</pre></div> + + </td> + </tr> + + <tr> + <td class="docs"> + <p>Call our constructor</p> + + </td> + <td class="code"> + + <div class="highlight"><pre> <span class="nx">fmt</span><span class="p">.</span><span class="nx">Println</span><span class="p">(</span><span class="nx">NewPerson</span><span class="p">(</span><span class="s">"Jon"</span><span class="p">))</span> <span class="p">}</span> </pre></div>