\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Gordon Mickel (guiltylemon)} \pdfinfo{ /Title (go-lang.pdf) /Creator (Cheatography) /Author (Gordon Mickel (guiltylemon)) /Subject (Go Lang Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A3A3A3} \definecolor{LightBackground}{HTML}{F3F3F3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Go Lang Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Gordon Mickel (guiltylemon)} via \textcolor{DarkBackground}{\uline{cheatography.com/20161/cs/3006/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Gordon Mickel (guiltylemon) \\ \uline{cheatography.com/guiltylemon} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 12th May, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Deklarationen}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{var foo int // Ohne Initialisierung \newline var foo int = 42 // Mit Initialisierung \newline var foo, bar int = 42, 1302 // Mehrere \newline var foo = 42 // Typinferenz \newline foo := 42 // Kurzform, immer implizit \newline const constant = "This is a constant"} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Loops}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{for i := 1; i \textless{} 10; i++ \{...\} \newline for ; i \textless{} 10; \{...\} // while - loop \newline for i \textless{} 10 \{...\} // Semikolons nicht n{\"o}tig \newline for \{...\} // while (true)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{If}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{if x \textgreater{} 0 \{ \newline return x \newline \} else \{ \newline return -x \newline \} \newline \newline if a := b + c; a \textless{} 42 \{ \newline return a \newline \} else \{ \newline return a - 42 \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Arrays}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{var a {[}10{]}int // int array mit 10 Elementen \newline a{[}3{]} = 42 // setzen \newline i := a{[}3{]} // auslesen \newline \newline // Deklarieren \newline a := {[}2{]}int\{1, 2\} \newline a := {[}...{]}int\{1, 2\} // Kompilierer findet die Anzahl Elemente automatisch} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Structs}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{type Man struct \{ \newline name string \newline age int \newline \} \newline func main() \{ \newline man1 := Man\{"Ariel", 26\} \newline man2 := Man \{ \newline age: 24, \newline name: "Ben", \newline \} \newline //Zugriff auf structs \newline for \_, man := range {[}{]}Man \{man1, man2\} \{ \newline println(man.name) \newline \} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Slices}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{var a {[}{]}int // Slice deklarieren, {\"a}hnlich wie Array aber ohne L{\"a}nge \newline var a = {[}{]}int \{1, 2, 3, 4\} // Slice deklarieren und initialisieren \newline a := {[}{]}int\{ 1, 2, 3, 4 \} // shorthand \newline \newline var b = a{[}lo:hi{]} // slice kreiieren (view of array) von index lo bis hi-1 \newline var b = a{[}1:4{]} // slice von index 1 to 3 \newline var b = a{[}:3{]} // ohne unterer index impliziert 0 \newline var b = a{[}3:{]} // ohne oberer index impliziert len(a) \newline \newline // Mit make Slices kreiieren \newline a = make({[}{]}byte, 5, 5) // 1. Paramenter: L{\"a}nge, 2. Parameter: Kapazit{\"a}t = make({[}{]}byte, 5) // Kapazit{\"a}t ist optional} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Funktionen}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{func functionName() \{\} \newline func functionName(param1 string, param2 int) \{\} \newline // parameter mit dem gleichen Typ \newline func functionName(param1, param2 int) \{\} \newline // Rückgabewert \newline func functionName() (int) \{ \newline return 42 \newline \} \newline // Mehrere Rückgabewerte \newline func returnMulti() (int, string) \{ \newline return 42, "foobar" \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Coroutines}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{import( \newline t "time" \newline f "fmt" \newline ) \newline func say(s string) \{ \newline for i := 0; i \textless{} 5; i++ \{ \newline t.Sleep(100 * t.Millisecond) \newline f.Println(s) \newline \} \newline \} \newline func main() \{ \newline go say("world") \newline say("hello") \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Channels}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{func seq(num int, c chan int) \{ \newline x, y := 0, 1 \newline for num != 0 \{ \newline x, y = y, x + y \newline num-{}- \newline \} \newline c \textless{}-x \newline \} \newline func main() \{ \newline //channels müssen vor ihrer Anwendung deklariert werden \newline ch := make(chan int) \newline go seq(50, ch) \newline go seq(20, ch) \newline res1, res2 := \textless{}-ch, \textless{}-ch \newline println(res1, res2) //12586269025 6765 \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}