2019-10-14 22:38:29 +03:00

184 lines
6.3 KiB
Plaintext
Generated
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Go в примерах: Panic</title>
<link rel=stylesheet href="site.css">
</head>
<script>
onkeydown = (e) => {
if (e.key == "ArrowLeft") {
window.location.href = 'сортировка-через-функции-(sorting-by-functions)';
}
if (e.key == "ArrowRight") {
window.location.href = 'defer';
}
}
</script>
<body>
<div class="example" id="panic">
<h2><a href="./">Go в примерах</a>: Panic</h2>
<table>
<tr>
<td class="docs">
<p><code>Panic</code> обычно означает, что что-то неожиданно пошло
не так. В основном мы используем его для быстрого
отказа при ошибках, которые не должны возникать во
время нормальной работы, или которые мы не готовы
обрабатывать.</p>
</td>
<td class="code empty leading">
</td>
</tr>
<tr>
<td class="docs">
</td>
<td class="code leading">
<a href="http://play.golang.org/p/eeoucVUhT6i" target="_blank"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
<div class="highlight"><pre><span class="kn">package</span> <span class="nx">main</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
</td>
<td class="code leading">
<div class="highlight"><pre><span class="kn">import</span> <span class="s">&quot;os&quot;</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
</td>
<td class="code leading">
<div class="highlight"><pre><span class="kd">func</span> <span class="nx">main</span><span class="p">()</span> <span class="p">{</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<p>Мы будем использовать panic на этом сайте, чтобы
проверять наличие неожиданных ошибок. Это
единственная программа на сайте, предназначенная
для паники.</p>
</td>
<td class="code leading">
<div class="highlight"><pre> <span class="nb">panic</span><span class="p">(</span><span class="s">&quot;a problem&quot;</span><span class="p">)</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<p>Обычное использование panic - это прерывание,
если функция возвращает значение ошибки, которое
мы не знаем, как (или хотим) обрабатывать. Вот
пример <code>panic</code>, если мы получаем неожиданную ошибку
при создании нового файла.</p>
</td>
<td class="code">
<div class="highlight"><pre> <span class="nx">_</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">os</span><span class="p">.</span><span class="nx">Create</span><span class="p">(</span><span class="s">&quot;/tmp/file&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
<span class="nb">panic</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td>
</tr>
</table>
<table>
<tr>
<td class="docs">
<p>Запуск этой программы вызовет панику, распечатает
сообщение об ошибке и трейс выполнения и завершит
работу с ненулевым статусом.</p>
</td>
<td class="code leading">
<div class="highlight"><pre><span class="gp">$</span> go run panic.go
<span class="go">panic: a problem</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
</td>
<td class="code leading">
<div class="highlight"><pre><span class="go">goroutine 1 [running]:</span>
<span class="go">main.main()</span>
<span class="go"> /.../panic.go:12 +0x47</span>
<span class="go">...</span>
<span class="go">exit status 2</span>
</pre></div>
</td>
</tr>
<tr>
<td class="docs">
<p>Обратите внимание, что в отличие от некоторых языков,
которые используют исключения для обработки
ошибок, в Go привычно использовать возвращающие
значения, указывающие на ошибки.</p>
</td>
<td class="code empty">
</td>
</tr>
</table>
<p class="next">
Следующий пример: <a href="defer">Defer</a>.
</p>
<p class="footer">
by <a href="https://markmcgranaghan.com">Mark McGranaghan</a> | <a href="https://github.com/mmcgrana/gobyexample/blob/master/examples/panic">source</a> | <a href="https://github.com/mmcgrana/gobyexample#license">license</a>
</p>
</div>
<script>
var codeLines = [];
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import \"os\"\u000A');codeLines.push('func main() {\u000A');codeLines.push(' panic(\"a problem\")\u000A');codeLines.push(' _, err := os.Create(\"/tmp/file\")\u000A if err != nil {\u000A panic(err)\u000A }\u000A}\u000A');codeLines.push('');codeLines.push('');codeLines.push('');
</script>
<script src="site.js" async></script>
</body>
</html>