github.com/System-Glitch/goyave/v2@v2.10.3-0.20200819142921-51011e75d504/docs/guide/advanced/helpers.html (about)

     1  <!DOCTYPE html>
     2  <html lang="en-US">
     3    <head>
     4      <meta charset="utf-8">
     5      <meta name="viewport" content="width=device-width,initial-scale=1">
     6      <title>Helpers | Goyave</title>
     7      <meta name="generator" content="VuePress 1.5.3">
     8      <link rel="icon" type="image/png" sizes="16x16" href="/goyave/goyave_16.png">
     9      <link rel="icon" type="image/png" sizes="32x32" href="/goyave/goyave_32.png">
    10      <link rel="icon" type="image/png" sizes="64x64" href="/goyave/goyave_64.png">
    11      <link rel="icon" type="image/png" sizes="128x128" href="/goyave/goyave_128.png">
    12      <link rel="icon" type="image/png" sizes="256x256" href="/goyave/goyave_256.png">
    13      <link rel="icon" type="image/png" sizes="512x512" href="/goyave/goyave_512.png">
    14      <meta name="description" content="Goyave is a Golang web API framework aiming at cleanliness, fast development and power.">
    15      <meta name="og:title" content="Helpers - Goyave">
    16      <meta name="twitter:title" content="Helpers - Goyave">
    17      <meta name="title" content="Helpers - Goyave">
    18      <meta property="twitter:description" content="Goyave is a Golang web API framework aiming at cleanliness, fast development and power.">
    19      <meta property="twitter:image:src" content="https://system-glitch.github.io/goyave/goyave_banner.png">
    20      <meta property="twitter:card" content="summary_large_image">
    21      <meta property="og:type" content="website">
    22      <meta property="og:description" content="Goyave is a Golang web API framework aiming at cleanliness, fast development and power.">
    23      <meta property="og:image" content="https://system-glitch.github.io/goyave/goyave_banner.png">
    24      <meta property="og:site_name" content="Goyave">
    25      <link rel="preload" href="/goyave/assets/css/0.styles.589fd562.css" as="style"><link rel="preload" href="/goyave/assets/js/app.092490a7.js" as="script"><link rel="preload" href="/goyave/assets/js/4.75a9cc68.js" as="script"><link rel="preload" href="/goyave/assets/js/1.121dd9ed.js" as="script"><link rel="preload" href="/goyave/assets/js/10.2f07bbf5.js" as="script"><link rel="prefetch" href="/goyave/assets/js/11.2d66fdef.js"><link rel="prefetch" href="/goyave/assets/js/12.63171b15.js"><link rel="prefetch" href="/goyave/assets/js/13.770050f3.js"><link rel="prefetch" href="/goyave/assets/js/14.b933d8cf.js"><link rel="prefetch" href="/goyave/assets/js/15.36df2a66.js"><link rel="prefetch" href="/goyave/assets/js/16.ed66719e.js"><link rel="prefetch" href="/goyave/assets/js/17.7bef5f05.js"><link rel="prefetch" href="/goyave/assets/js/18.470b55ed.js"><link rel="prefetch" href="/goyave/assets/js/19.90e0dab8.js"><link rel="prefetch" href="/goyave/assets/js/20.3a300ca3.js"><link rel="prefetch" href="/goyave/assets/js/21.c3fd6053.js"><link rel="prefetch" href="/goyave/assets/js/22.d5569617.js"><link rel="prefetch" href="/goyave/assets/js/23.931b2034.js"><link rel="prefetch" href="/goyave/assets/js/24.1a4755e7.js"><link rel="prefetch" href="/goyave/assets/js/25.0d463913.js"><link rel="prefetch" href="/goyave/assets/js/26.3c173a7a.js"><link rel="prefetch" href="/goyave/assets/js/27.9c5b36f2.js"><link rel="prefetch" href="/goyave/assets/js/28.41e055b7.js"><link rel="prefetch" href="/goyave/assets/js/29.b87adf4a.js"><link rel="prefetch" href="/goyave/assets/js/3.ef71e77d.js"><link rel="prefetch" href="/goyave/assets/js/5.c83f1192.js"><link rel="prefetch" href="/goyave/assets/js/6.2336bf0c.js"><link rel="prefetch" href="/goyave/assets/js/7.d60e55c1.js"><link rel="prefetch" href="/goyave/assets/js/8.2ee33a42.js"><link rel="prefetch" href="/goyave/assets/js/9.8e043d60.js">
    26      <link rel="stylesheet" href="/goyave/assets/css/0.styles.589fd562.css">
    27    </head>
    28    <body>
    29      <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/goyave/" class="home-link router-link-active"><img src="/goyave/goyave_64.png" alt="Goyave" class="logo"> <span class="site-name can-hide">Goyave</span></a> <div class="links"><div class="user-settings"><a title="Dark theme" href="#" class="settings-button"><svg aria-hidden="true" data-prefix="fas" data-icon="cog" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="svg-inline--fa fa-cog fa-w-16 settings-icon"><path fill="currentColor" d="M8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zM8 15c-3.9 0-7-3.1-7-7 0-2.4 1.2-4.6 3.2-5.9-0.1 0.6-0.2 1.3-0.2 1.9 0 4.9 4 8.9 8.9 9-1.3 1.3-3 2-4.9 2z"></path></svg></a></div> <div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/goyave/guide/" class="nav-link router-link-active">
    30    Guide
    31  </a></div><div class="nav-item"><a href="https://pkg.go.dev/github.com/System-Glitch/goyave/v2" target="_blank" rel="noopener noreferrer" class="nav-link external">
    32    pkg.go.dev
    33    <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <a href="https://github.com/System-Glitch/goyave" target="_blank" rel="noopener noreferrer" class="repo-link">
    34      GitHub
    35      <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/goyave/guide/" class="nav-link router-link-active">
    36    Guide
    37  </a></div><div class="nav-item"><a href="https://pkg.go.dev/github.com/System-Glitch/goyave/v2" target="_blank" rel="noopener noreferrer" class="nav-link external">
    38    pkg.go.dev
    39    <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div> <a href="https://github.com/System-Glitch/goyave" target="_blank" rel="noopener noreferrer" class="repo-link">
    40      GitHub
    41      <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav>  <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Guide</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>The Basics</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>Advanced</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/goyave/guide/advanced/helpers.html" aria-current="page" class="active sidebar-link">Helpers</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/goyave/guide/advanced/helpers.html#general" class="sidebar-link">General</a></li><li class="sidebar-sub-header"><a href="/goyave/guide/advanced/helpers.html#filesystem" class="sidebar-link">Filesystem</a></li></ul></li><li><a href="/goyave/guide/advanced/authentication.html" class="sidebar-link">Authentication</a></li><li><a href="/goyave/guide/advanced/localization.html" class="sidebar-link">Localization</a></li><li><a href="/goyave/guide/advanced/testing.html" class="sidebar-link">Testing</a></li><li><a href="/goyave/guide/advanced/multi-services.html" class="sidebar-link">Multi-services</a></li><li><a href="/goyave/guide/advanced/cors.html" class="sidebar-link">CORS</a></li><li><a href="/goyave/guide/advanced/status-handlers.html" class="sidebar-link">Status Handlers</a></li><li><a href="/goyave/guide/advanced/logging.html" class="sidebar-link">Logging</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="helpers"><a href="#helpers" class="header-anchor">#</a> Helpers</h1> <p></p><div class="table-of-contents"><ul><li><a href="#general">General</a></li><li><a href="#filesystem">Filesystem</a></li></ul></div><p></p> <p>The Goyave framework offers a collection of helpers to ease development.</p> <h2 id="general"><a href="#general" class="header-anchor">#</a> General</h2> <p>The helpers require the <code>helper</code> package to be imported.</p> <div class="language-go extra-class"><pre class="language-go"><code><span class="token keyword">import</span> <span class="token string">&quot;github.com/System-Glitch/goyave/v2/helper&quot;</span>
    42  </code></pre></div><p><strong>List of general helpers</strong>:</p> <div class="table"><p><a href="#helper-indexof">IndexOf</a> <a href="#helper-contains">Contains</a> <a href="#helper-indexofstr">IndexOfStr</a> <a href="#helper-containsstr">ContainsStr</a> <a href="#helper-sliceequal">SliceEqual</a> <a href="#helper-tofloat64">ToFloat64</a> <a href="#helper-tostring">ToString</a> <a href="#helper-parsemultivaluesheader">ParseMultiValuesHeader</a> <a href="#helper-removehiddenfields">RemoveHiddenFields</a></p></div><h4 id="helper-indexof"><a href="#helper-indexof" class="header-anchor">#</a> helper.IndexOf</h4> <p>Get the index of the given value in the given slice, or <code>-1</code> if not found.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>slice interface{}</code></td> <td><code>int</code></td></tr> <tr><td><code>value interface{}</code></td> <td></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>slice <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">{</span><span class="token string">'r'</span><span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2.42</span><span class="token punctuation">}</span>
    43  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">IndexOf</span><span class="token punctuation">(</span>slice<span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 1</span>
    44  </code></pre></div><h4 id="helper-contains"><a href="#helper-contains" class="header-anchor">#</a> helper.Contains</h4> <p>Check if a generic slice contains the given value.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>slice interface{}</code></td> <td><code>bool</code></td></tr> <tr><td><code>value interface{}</code></td> <td></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>slice <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">{</span><span class="token string">'r'</span><span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2.42</span><span class="token punctuation">}</span>
    45  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">Contains</span><span class="token punctuation">(</span>slice<span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// true</span>
    46  </code></pre></div><h4 id="helper-indexofstr"><a href="#helper-indexofstr" class="header-anchor">#</a> helper.IndexOfStr</h4> <p>Get the index of the given value in the given string slice, or <code>-1</code> if not found.</p> <p>Prefer using this helper instead of <code>IndexOf</code> for better performance.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>slice []string</code></td> <td><code>int</code></td></tr> <tr><td><code>value []string</code></td> <td></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>slice <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span><span class="token string">&quot;Avogado&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Pear&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Apple&quot;</span><span class="token punctuation">}</span>
    47  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">IndexOfStr</span><span class="token punctuation">(</span>slice<span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 1</span>
    48  </code></pre></div><h4 id="helper-containsstr"><a href="#helper-containsstr" class="header-anchor">#</a> helper.ContainsStr</h4> <p>Check if a string slice contains the given value.</p> <p>Prefer using this helper instead of <code>Contains</code> for better performance.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>slice []string</code></td> <td><code>bool</code></td></tr> <tr><td><code>value []string</code></td> <td></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>slice <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span><span class="token string">&quot;Avogado&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Pear&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Apple&quot;</span><span class="token punctuation">}</span>
    49  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ContainsStr</span><span class="token punctuation">(</span>slice<span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// true</span>
    50  </code></pre></div><h4 id="helper-sliceequal"><a href="#helper-sliceequal" class="header-anchor">#</a> helper.SliceEqual</h4> <p>Check if two generic slices are the same.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>first interface{}</code></td> <td><code>bool</code></td></tr> <tr><td><code>second interface{}</code></td> <td></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>first <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span><span class="token string">&quot;Avogado&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Pear&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Apple&quot;</span><span class="token punctuation">}</span>
    51  second <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span><span class="token string">&quot;Goyave&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Avogado&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Pear&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Apple&quot;</span><span class="token punctuation">}</span>
    52  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">SliceEqual</span><span class="token punctuation">(</span>first<span class="token punctuation">,</span> second<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// false</span>
    53  </code></pre></div><h4 id="helper-tofloat64"><a href="#helper-tofloat64" class="header-anchor">#</a> helper.ToFloat64</h4> <p>Check if two generic slices are the same.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>value interface{}</code></td> <td><code>float64</code></td></tr> <tr><td></td> <td><code>error</code></td></tr></tbody></table> <p><strong>Examples:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToFloat64</span><span class="token punctuation">(</span><span class="token number">1.42</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 1.42 nil</span>
    54  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToFloat64</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 1.0 nil</span>
    55  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToFloat64</span><span class="token punctuation">(</span><span class="token string">&quot;1.42&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 1.42 nil</span>
    56  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToFloat64</span><span class="token punctuation">(</span><span class="token string">&quot;NaN&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 0 nil</span>
    57  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToFloat64</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// 0 nil</span>
    58  </code></pre></div><h4 id="helper-tostring"><a href="#helper-tostring" class="header-anchor">#</a> helper.ToString</h4> <p>Convert a generic value to string.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>value interface{}</code></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Examples:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToString</span><span class="token punctuation">(</span><span class="token number">1.42</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;1.42&quot;</span>
    59  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToString</span><span class="token punctuation">(</span><span class="token boolean">nil</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;nil&quot;</span>
    60  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToString</span><span class="token punctuation">(</span><span class="token string">&quot;hello&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;hello&quot;</span>
    61  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ToString</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;[]&quot;</span>
    62  </code></pre></div><h4 id="helper-parsemultivaluesheader"><a href="#helper-parsemultivaluesheader" class="header-anchor">#</a> helper.ParseMultiValuesHeader</h4> <p>Parses multi-values HTTP headers, taking the quality values into account. The result is a slice of values sorted according to the order of priority.</p> <p>See: <a href="https://developer.mozilla.org/en-US/docs/Glossary/Quality_values" target="_blank" rel="noopener noreferrer">https://developer.mozilla.org/en-US/docs/Glossary/Quality_values<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>header string</code></td> <td><code>[]filesystem.HeaderValue</code></td></tr></tbody></table> <p><strong>HeaderValue struct:</strong></p> <table><thead><tr><th>Attribute</th> <th>Type</th></tr></thead> <tbody><tr><td><code>Value</code></td> <td><code>string</code></td></tr> <tr><td><code>Priority</code></td> <td><code>float64</code></td></tr></tbody></table> <p><strong>Examples:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ParseMultiValuesHeader</span><span class="token punctuation">(</span><span class="token string">&quot;text/html,text/*;q=0.5,*/*;q=0.7&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
    63  <span class="token comment">// [{text/html 1} {*/* 0.7} {text/* 0.5}]</span>
    64  
    65  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>helper<span class="token punctuation">.</span><span class="token function">ParseMultiValuesHeader</span><span class="token punctuation">(</span><span class="token string">&quot;text/html;q=0.8,text/*;q=0.8,*/*;q=0.8&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
    66  <span class="token comment">// [{text/html 0.8} {text/* 0.8} {*/* 0.8}]</span>
    67  </code></pre></div><h4 id="helper-removehiddenfields"><a href="#helper-removehiddenfields" class="header-anchor">#</a> helper.RemoveHiddenFields</h4> <p>Remove hidden fields if the given model is a struct pointer. All fields marked with the tag <code>model:&quot;hide&quot;</code> will be set to their zero value.</p> <p>For example, this allows to send user models to the client without their password field.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>model interface{}</code></td> <td><code>void</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code><span class="token keyword">type</span> Model <span class="token keyword">struct</span> <span class="token punctuation">{</span>
    68      Username <span class="token builtin">string</span>
    69      Password <span class="token builtin">string</span> <span class="token string">`model:&quot;hide&quot; json:&quot;,omitempty&quot;`</span>
    70  <span class="token punctuation">}</span>
    71  
    72  model <span class="token operator">:=</span> <span class="token operator">&amp;</span>Model<span class="token punctuation">{</span>
    73      Username<span class="token punctuation">:</span> <span class="token string">&quot;Jeff&quot;</span><span class="token punctuation">,</span>
    74      Password<span class="token punctuation">:</span> <span class="token string">&quot;bcrypted password&quot;</span><span class="token punctuation">,</span>
    75  <span class="token punctuation">}</span>
    76  
    77  helper<span class="token punctuation">.</span><span class="token function">RemoveHiddenFields</span><span class="token punctuation">(</span>model<span class="token punctuation">)</span>
    78  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>model<span class="token punctuation">)</span> <span class="token comment">// &amp;{ Jeff}</span>
    79  </code></pre></div><h2 id="filesystem"><a href="#filesystem" class="header-anchor">#</a> Filesystem</h2> <p>The filesystem helpers require the <code>filesystem</code>  package to be imported.</p> <div class="language-go extra-class"><pre class="language-go"><code><span class="token keyword">import</span> <span class="token string">&quot;github.com/System-Glitch/goyave/v2/helper/filesystem&quot;</span>
    80  </code></pre></div><p>All files received in a requests are stored in the <code>filesystem.File</code> structure. This structres gives all the information you need on a file and its content, as well as a helper function to save it easily.</p> <table><thead><tr><th>Attribute</th> <th>Type</th></tr></thead> <tbody><tr><td><code>Header</code></td> <td><code>*multipart.FileHeader</code></td></tr> <tr><td><code>MIMEType</code></td> <td><code>string</code></td></tr> <tr><td><code>Data</code></td> <td><code>multipart.File</code></td></tr></tbody></table> <div class="custom-block warning"><p class="custom-block-title">WARNING</p> <p>The data in <code>file.Header</code> come from the client and <strong>shouldn't be trusted</strong>. The filename is always optional and must not be used blindly by the application: path information should be stripped, and conversion to the server file system rules should be done. You cannot rely on the size given in the header neither.</p></div> <p><strong>List of filesystem helpers</strong>:</p> <div class="table"><p><a href="#filesystem-file-save">File.Save</a> <a href="#filesystem-getfileextension">GetFileExtension</a> <a href="#filesystem-getmimetype">GetMIMEType</a> <a href="#filesystem-fileexists">FileExists</a> <a href="#filesystem-isdirectory">IsDirectory</a> <a href="#filesystem-delete">Delete</a></p></div><h4 id="filesystem-file-save"><a href="#filesystem-file-save" class="header-anchor">#</a> filesystem.File.Save</h4> <p>Writes the given file on the disk.
    81  Appends a timestamp to the given file name to avoid duplicate file names.
    82  The file is not readable anymore once saved as its FileReader has already been closed.</p> <p>Returns the actual file name.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>path string</code></td> <td><code>string</code></td></tr> <tr><td><code>name string</code></td> <td></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>image <span class="token operator">:=</span> request<span class="token punctuation">.</span>Data<span class="token punctuation">[</span><span class="token string">&quot;image&quot;</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span>filesystem<span class="token punctuation">.</span>File<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span>
    83  <span class="token comment">// As file fields can be multi-files uploads, a file field</span>
    84  <span class="token comment">// is always a slice.</span>
    85  
    86  name <span class="token operator">:=</span> request<span class="token punctuation">.</span>Data<span class="token punctuation">[</span><span class="token string">&quot;name&quot;</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token builtin">string</span><span class="token punctuation">)</span>
    87  product <span class="token operator">:=</span> model<span class="token punctuation">.</span>Product<span class="token punctuation">{</span>
    88      Name<span class="token punctuation">:</span> name<span class="token punctuation">,</span>
    89      Price<span class="token punctuation">:</span> request<span class="token punctuation">.</span>Data<span class="token punctuation">[</span><span class="token string">&quot;price&quot;</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token builtin">float64</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
    90      Image<span class="token punctuation">:</span> image<span class="token punctuation">.</span><span class="token function">Save</span><span class="token punctuation">(</span><span class="token string">&quot;storage/img&quot;</span><span class="token punctuation">,</span> name<span class="token punctuation">)</span>
    91  <span class="token punctuation">}</span>
    92  database<span class="token punctuation">.</span><span class="token function">GetConnection</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Create</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>product<span class="token punctuation">)</span>
    93  </code></pre></div><h4 id="filesystem-getfileextension"><a href="#filesystem-getfileextension" class="header-anchor">#</a> filesystem.GetFileExtension</h4> <p>Returns the last part of a file name. If the file doesn't have an extension, returns an empty string.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>file string</code></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Examples:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">GetFileExtension</span><span class="token punctuation">(</span><span class="token string">&quot;README.md&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;md&quot;</span>
    94  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">GetFileExtension</span><span class="token punctuation">(</span><span class="token string">&quot;LICENSE&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// empty string</span>
    95  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">GetFileExtension</span><span class="token punctuation">(</span><span class="token string">&quot;archive.tar.gz&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;gz&quot;</span>
    96  </code></pre></div><h4 id="filesystem-getmimetype"><a href="#filesystem-getmimetype" class="header-anchor">#</a> filesystem.GetMIMEType</h4> <p>Get the MIME type and size of the given file. If the file cannot be opened, panics. You should check if the file exists, using <code>filesystem.FileExists()</code>, before calling this function.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>file string</code></td> <td><code>string</code></td></tr></tbody></table> <p><strong>Examples:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">GetMIMEType</span><span class="token punctuation">(</span><span class="token string">&quot;logo.png&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;image/png&quot;</span>
    97  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">GetFileExtension</span><span class="token punctuation">(</span><span class="token string">&quot;config.json&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;application/json; charset=utf-8&quot;</span>
    98  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">GetFileExtension</span><span class="token punctuation">(</span><span class="token string">&quot;index.html&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// &quot;text/html; charset=utf-8&quot;</span>
    99  </code></pre></div><h4 id="filesystem-fileexists"><a href="#filesystem-fileexists" class="header-anchor">#</a> filesystem.FileExists</h4> <p>Returns true if the file at the given path exists and is readable. Returns false if the given file is a directory</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>file string</code></td> <td><code>bool</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">FileExists</span><span class="token punctuation">(</span><span class="token string">&quot;README.md&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// true</span>
   100  </code></pre></div><h4 id="filesystem-isdirectory"><a href="#filesystem-isdirectory" class="header-anchor">#</a> filesystem.IsDirectory</h4> <p>Returns true if the file at the given path exists, is a directory and is readable.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>path string</code></td> <td><code>bool</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">IsDirectory</span><span class="token punctuation">(</span><span class="token string">&quot;README.md&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// false</span>
   101  fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>filesystem<span class="token punctuation">.</span><span class="token function">IsDirectory</span><span class="token punctuation">(</span><span class="token string">&quot;resources&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// true</span>
   102  </code></pre></div><h4 id="filesystem-delete"><a href="#filesystem-delete" class="header-anchor">#</a> filesystem.Delete</h4> <p>Delete the file at the given path. Panics if the file cannot be deleted.</p> <p>You should check if the file exists, using <code>filesystem.FileExists()</code>, before calling this function.</p> <table><thead><tr><th>Parameters</th> <th>Return</th></tr></thead> <tbody><tr><td><code>file string</code></td> <td><code>void</code></td></tr></tbody></table> <p><strong>Example:</strong></p> <div class="language-go extra-class"><pre class="language-go"><code>filesystem<span class="token punctuation">.</span><span class="token function">Delete</span><span class="token punctuation">(</span><span class="token string">&quot;README.md&quot;</span><span class="token punctuation">)</span>
   103  </code></pre></div></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/System-Glitch/goyave/edit/master/docs_src/src/guide/advanced/helpers.md" target="_blank" rel="noopener noreferrer">Edit this page on GitHub</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev">
   104        ←
   105        <a href="/goyave/guide/basics/validation.html" class="prev">
   106          Validation
   107        </a></span> <span class="next"><a href="/goyave/guide/advanced/authentication.html">
   108          Authentication
   109        </a>
   110        →
   111      </span></p></div> </main></div><div class="global-ui"><!----></div></div>
   112      <script src="/goyave/assets/js/app.092490a7.js" defer></script><script src="/goyave/assets/js/4.75a9cc68.js" defer></script><script src="/goyave/assets/js/1.121dd9ed.js" defer></script><script src="/goyave/assets/js/10.2f07bbf5.js" defer></script>
   113    </body>
   114  </html>