Go Language

Wątek przeniesiony 2021-09-16 09:52 z Inne języki programowania przez cerrato.

1

Co myślicie o Go Lang?
https://golang.org/

Fajne to będzie, nie fajne? Umrze szybko? Skazany na sukces?

NZ
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:93
0

Fajne to będzie, nie fajne?

To już jest.

Umrze szybko? Skazany na sukces?

Trzeba jakiejś wróżki zapytać o to.

grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
1

Działa choinka, ma przyszłość:

Kopiuj
package main
import "fmt"

func main() {
	count := 10;
	for i := 0; i < count; i++ {
		for j := count - 1; j >= i; j--{ fmt.Print(" "); }		
		for j := 0; j < i + i + 1; j++ { fmt.Print("*"); }
		fmt.Println();
	}
}

Takie to trochę składniowo pomieszanie Pascala z C/C++, coś w ten deseń. Jakieś dobre IDE by się do tego przydało, bo przez www to testować można najwyżej.

edytowany 1x, ostatnio: hauleth
merlinnot
IntelliJ radzi sobie na prawdę dobrze.
0

Krytyki to to tez zebralo a chyba najwazniejszy zarzut to "nothing new".

hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:10 dni
3

Jako, że ostatnio sporo siedzę w tych nowych językach (głównie Rust, ale i Go się trochę liznęło) to:

Zalety:

  • prosta składnia - brak wodotrysków, i prosta logiczna składnia
  • go fmt - de facto wymuszenie jednolitego stylu programowania na wszystkich developerach
  • proste zarządzanie zależnościami
  • prosta wielowątkowość i kanały
  • szybkość względem języków skryptowych
  • czasy kompilacji
  • statyczne binarki

Wady:

  • nil - serio? 2015 rok a my dalej popełniamy błędy ALGOLa?
  • obsługa błędów - naprawdę, ktoś uznaje val, err := foo(); if err { … } za dobre rozwiązanie?
  • brak typów generycznych (a przynajmniej częściowo), trzeba używać interface{} lub kopiować kod
  • brak własnych iteratorów (jeszcze brak przeładowania operatorów zrozumiem)
  • nihil novi

Więcej http://yager.io/programming/go.html

Podsumowanie

Go jest fajnym rozwiązaniem do pisania narzędzi CLI jako, że wypluwa standalone binarki. Jednak samemu nie wprowadza za wiele nowego, jedyne co zrobił to rozpowszechnił kanały jako metodę synchronizacji wątków.

W pozostałych przypadkach są IMHO lepsze rozwiązania (z nowych języków):

  • strony internetowe: Elixir - przyjazna składnia i kompilacja do kodu wykonywalnego przez VM Erlang/OTP
  • biblioteki natywne: Rust - brak GC i łatwy interop C <-> Rust
  • Mobile/GUI: React Native/Swift

edytowany 1x, ostatnio: hauleth
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:dzień
  • Postów:2964
0

prosta wielowątkowość i kanały

Co jest niby takiego prostego w asynchronicznej wymianie komunikatów?
Ten model lepiej się skaluje, to fakt, ale żeby był prostszy czy mniej błędogenny? Nie zauważyłem.

Poza tym w wielu językach te rzeczy można dodać jako bibliotekę.

edytowany 2x, ostatnio: Krolik
hauleth
<quote>jedyne co zrobił to rozpowszechnił kanały jako metodę synchronizacji wątków</quote>, jestem świadomy, że w innych językach jest to dostępne. Kanały są IMHO łatwiejsze w zrozumieniu niż inne metody synchronizacji, zwłaszcza w językach bez RAII. Czy mniej błędogenne? Go wykrywa część deadlocków i wywala wtedy błąd, dodatkowo przejrzystsza składnia pomaga w ogarnięciu co się dzieje.
0

A umialby ktos zestawic scala vs go

0

W sumie to zle zadalem pytanie, bo nawet nie wiem czy te jezyki powinno sie zestawiac obok siebie ;)
Chyba prędzej Rust jest konkurentem.

hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:10 dni
0

IMHO Rust i Go nie są konkurentami a bardziej dwoma połówkami tego samego jabłka.


edytowany 1x, ostatnio: hauleth
merlinnot
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Wrocław
  • Postów:292
0

W mojej firmie używamy Go jako backend aplikacji webowych. Mieliśmy do wyboru PHP, Pythona, Javę i Go, pierwsze dwa odpadły z oczywistych względów, Java odpadła, bo myślałbym cały dzień o @karolinaa, więc wybraliśmy Go ;)

Nie był to zły wybór, jak się porządnie w tym pisze, to na prawdę dobrze działa. Ciężko o błędy, których nie widać już podczas pisania/kompilowania, składnia jest bardzo prosta, bardzo dużo bibliotek, co jak na tak młody język jest raczej rzadkością.

Największa głupota (na pierwszy rzut oka, znając mechanikę języka jest to zrozumiałe) to JSON (un)marshaling i pola (nie)eksportowane ze struktur. Tego typu błędy możnaby pokazywać podczas kompilacji w "lepszym" języku. Interface{} to IMO troszkę zbyt duża abstrakcja, pozwala praktycznie na wszystko. Nie żebym nie lubił abstraksji, zwykle piszę w językach funkcyjnych, ale to jest jakieś krzywe ;)

Wizzie
nie widzę tego oczywistego względu do odpadnięcia PHP i Pythona, oświecisz? ;) (to nie sarkazm, serio pytam)
Wizzie
oh, nie widziałem posta niżej
TO
  • Rejestracja:około 9 lat
  • Ostatnio:około 9 lat
  • Postów:30
0

Wydawało mnie się, że Python ma silną pozycją w webie? Dlaczego odpadł? Jakie to były oczywiste względy?

merlinnot
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Wrocław
  • Postów:292
0
Tokyo napisał(a):

Wydawało mnie się, że Python ma silną pozycją w webie? Dlaczego odpadł? Jakie to były oczywiste względy?

  • Jest powolny. Piszemy ogromne aplikacje, miliardy rekordów w bazie, które przepływają z urządzeń końcowych i klientów na nikim nie robią nawet wrażenia. Przy takich wolumenach danych stała się liczy.

  • W aplikacjach wymagających wysokiego bezpieczeństwa statyczne typowanie to podstawa.

  • Podobnie brak rozróżnienia pomiędzy deklaracją a przypisaniem.

  • GIL? Pythonie, serio? A może interfejs do multiprocessingu który jest tak przyjemny przy współdzieleniu danych... I tak lekki pamięciowo :)

  • Na koniec może jeszcze scoping... W pythonie3 "poprawili" to dodając "global" i "nonlocal", ale to IMO przykrywanie kupy kocykiem, nie widać, a nadal śmierdzi ;)

Podsumowując, sam używam Pythona i jestem z tym szczęśliwy, ale zawsze trzeba dobrać odpowiednie narzędzie do pracy. Pythona używam, jak chcę coś zrobić na chwilę, małego, nie wymagającego nie wiadomo jakiej wydajności. Łatwo się pisze, a działa. Można powiedzieć, że Python to taki mój sketchpad ;)

Zobacz pozostałe 7 komentarzy
hauleth
Oh… rozumiem.
R3
Ale zaraz. Erlang szybki? Duze obciazenie i erlang ok ale sam w sobie raczej super szybki nie jest.. Pewnie wystarczajaco szybki zazwyczaj.
hauleth
@rav3n BEAM daje modzno radę. Dodatkowo Erlanga stosuje się tam, gdzie masz duże IO, chcesz mieć możliwość bezproblemowego rozproszenia aplikacji (bo masz duże IO
R3
No z tym sie zgadzam. ;) tylko slowko szybkosc mi nie pasowalo szczegolnie gdy sie spojrzy na benchmarki ale zalety erlang ma gdzie indziej. A obecnie zawrotna szybkosc samego jezyka czesto nie jest krytyczna.
R3
Znaczy sie benchmarkowanie erlanga jest raczej trudne bo on raczej nie mial ogarniac single threaded stuff.
0

Myslicie, ze go moze sie sprawdzic do budowy np. Malych, srednich microservices? Bo chyba predzej to konkurencja dla node. Js niz javy?

Inne pytanie.. Czemu programisci python w jakiejs duzej czesci zaczeli uczyc sie go?

0
Krzywy Pomidor napisał(a):

Inne pytanie.. Czemu programisci python w jakiejs duzej czesci zaczeli uczyc sie go?

Python umiera ;)

A tak serio, to nie widzę specjalnej migracji to golang. Ludzie uczą się czasami nowości licząc na to że będą jakieś ciekawe nowy oferty pracy. To jest główny cel.

A czy GO LANG się przyjmie, to się zobaczy. Z pomocą Google na pewno będzie łatwiej. Dla mnie GO to kolejny język, który tak naprawdę nie wnosi nic nowego.

0

Na forach poczytalem jak ludzie od pythona probowali go a skonczyli na elixirze. Ktore tez raczej nie rozwiazuja tych samych problemow.

To ze nie wnosi nic nowego nie znaczy ze to zle. Bo jest stosunkowo latwy. Ale probuje sobie umiejscowic jakie go ma zastosowania. Wydaje mi sie ze do devops tools wydaje sie bardzo ok. I do high concurrency rowniez.

Budowa czegos malego sredniego co dziala natywnie nie jedzac tony ramu i szybko majac sporo rzeczy potrzebnych do tego zadania w samym jezyku jest atrakcyjna. A to ze w takim go nie da sie wszystkiego zrobic moze byc rowniez zaleta.

https://github.com/golang/go/wiki/SuccessStories

http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/ apples vs oranges

http://blog.jonathanoliver.com/why-i-love-go/

0
0
Mały Szczur napisał(a):

Krytyki to to tez zebralo a chyba najwazniejszy zarzut to "nothing new".

Python też nothing new nie wprowadził, a znalazł sobie miejsce

msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
5

Ja wiem że ten wątek ma pół roku, ale ciągle ktoś tu coś piszę, więc i ja odpiszę.

Po pierwsze, go ma już prawie 10 lat. Trochę późno zakładać o nim wątek i pytać "czy się uda".

Python też nothing new nie wprowadził, a znalazł sobie miejsce

Python nic nowego nie wprowadzał? Python powstał w ~~1991 roku (python 2.0 w 2000 roku). To wcześniej niż Ruby, Visual Basic, Java, JavaScript, PHP..., oraz ledwo kilka lat po Perlu.

Fakt faktem, że był wtedy dość biedny, ale...

Oczywiście nic "naprawdę nowego" czego nie było wcześniej nie wprowadził, bo podobno wszystko co kiedykolwiek powstało było wcześniej w Lispie (to w sumie tylko troche przesadzone stwierdzenie). Natomiast tak z głowy wymieniając, do mainstreamu wprowadził chociażby:

  • list comprehension
  • metody lambda (!)
  • map/filter/reduce
  • argumenty keywordowe

Oczywiście (jak pisałem) to wszystko było inspirowane lispem, ale tak czy inaczej to był dużo bardziej "odważny" język niż np. C#.

Kończąc dygresję...
W przypadku Go, największą innowacją są chyba goroutines. Można coprawda zastanawiać się czy ten ficzer na poziomie specjalnej składni języka faktycznie ma uzasadnienie, ale fakt jest faktem że działa dośc dobrze. Dzięki temu może świecić w jednej ze swoich nisz, czyli programowaniu równoległym.

Wydaje mi się też, że go było jednym z pierwszych języków które miało ustandaryzowany system paczek od początku (ale pewnie się mylę i jakiś język miał to 30 lat temu :P).

Ale języka Go nie lubię. Już tłumaczę dlaczego:

  • Brak szablonów/generyków. Poważnie? Wszystkie "generyczne" kontenery są przez to bardzo brzydkie.
  • System typów Go jest bardzo słaby (zarówno w porównaniu z "teoretycznymi" językami jak Haskell/Rust, oraz "praktycznym" C++).
  • Range (foreach) można robić tylko na builtinach. Huh, ok.
  • Zwracanie kodów błędu wszędzie zamiast wyjątków.
  • Nie potrafię tego wytłumaczyć, ale ogólna "prostota" języka. Język był jawnie projektowany tak, żeby nie był zbyt trudny dla "szarego programisty", i ogólnie zakłada że programista jest głupi - więc na wszelki wypadek dba o programistę (np. operatora trójargumentowego nie ma, bo mozna go abusować. Przeciążania funkcji nie ma - bo można je abusować. Hashtablice używają hashy, ale nie można ich nadpisywać, bo można to abusować, albo zrobić źle, albo... - i tak dalej).

Edit: tak mi przyszło do głowy, kumulacja powyższych punktów i szczytowe osiągnięcie Go jako języka - funkcja "max":

  • nie mamy szablonów, więc nie możemy zrobić:
Kopiuj
T max(T a, T b) { ... }

// użycie
int x = max(a, b);
  • nie mamy overloadowania funkcji, więc nie możemy zrobić:
Kopiuj
int max(int a, int b) { ... }
short max(short a, short b) { ... }
unsigned max(unsigned a, unsigned b) { ... }
unsigned short max(unsigned short a, unsigned short b) { ... }
float max(float a, float b) { ... }
double max(double a, double b) { ... }

// użycie
int x = max(a, b);

*Nie mamy operatora trójargumentowego więc nie możemy zrobić

Kopiuj
// użycie
int x = a > b ? a : b;

*Co mamy? Mamy ifa.

Kopiuj
// użycie
int x;
if a > b {
    x = a
} else {
    x = b
}

Język na miarę XXI wieku.

No ale to jest tylko moja opinia, niektórzy używają go i lubią (jak widać w tym wątku) więc dla każdego jest dobre coś innego.

edytowany 1x, ostatnio: msm
0

Ja tam Go dopiero musze sprobowac. Malo mnie obchodzi czy jezyk ma perspektywy czy nie. Wiekszosc jezykow poznaje, zeby miec wiedza ze pewne rzeczy mozna zrobic inaczej.

Zwlaszcza ze Go jest reklamowany jako prosty. Plus licze ze moze da sie go wykorzystac pod pare use casow.

Ale przegladajac opinie dp wielu rzeczy sie nie nadaje i wtedy lepiej uzyc javy lub scali.

Chcialbym sprawdzic Go do czegos stosunkowo malego, ewentualnie z duzym ruchem requestow albo jakis real time stuff.

0
msm napisał(a):

Ale języka Go nie lubię. Już tłumaczę dlaczego:

  • Brak szablonów/generyków. Poważnie? Wszystkie "generyczne" kontenery są przez to bardzo brzydkie.
  • System typów Go jest bardzo słaby (zarówno w porównaniu z "teoretycznymi" językami jak Haskell/Rust, oraz "praktycznym" C++).
  • Range (foreach) można robić tylko na builtinach. Huh, ok.
  • Zwracanie kodów błędu wszędzie zamiast wyjątków.
  • Nie potrafię tego wytłumaczyć, ale ogólna "prostota" języka. Język był jawnie projektowany tak, żeby nie był zbyt trudny dla "szarego programisty", i ogólnie zakłada że programista jest głupi - więc na wszelki wypadek dba o programistę (np. operatora trójargumentowego nie ma, bo mozna go abusować. Przeciążania funkcji nie ma - bo można je abusować. Hashtablice używają hashy, ale nie można ich nadpisywać, bo można to abusować, albo zrobić źle, albo... - i tak dalej).

Właśnie wymieiłeś jego największe zalety

0

Odnośnie golang to zastanawiam się czy nie warto się trzymać gołego golanga zamaist korzystać z 'frameworków'.

np. http://nordicapis.com/writing-microservices-in-go/ wygląda bardzo prosto a czasem zyllion frameworków może przeszkadzać.

hauleth
Są routery w Go, które są znacznie szybsze od wbudowanego. A IMHO jeśli potrzebujesz frameworka w Go to znaczy, że robisz coś źle.
R3
Czyli male libki są calkiem spoko ;)
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:10 dni
0
Pijany Terrorysta napisał(a):
msm napisał(a):

Ale języka Go nie lubię. Już tłumaczę dlaczego:

  • Brak szablonów/generyków. Poważnie? Wszystkie "generyczne" kontenery są przez to bardzo brzydkie.
  • System typów Go jest bardzo słaby (zarówno w porównaniu z "teoretycznymi" językami jak Haskell/Rust, oraz "praktycznym" C++).
  • Range (foreach) można robić tylko na builtinach. Huh, ok.
  • Zwracanie kodów błędu wszędzie zamiast wyjątków.
  • Nie potrafię tego wytłumaczyć, ale ogólna "prostota" języka. Język był jawnie projektowany tak, żeby nie był zbyt trudny dla "szarego programisty", i ogólnie zakłada że programista jest głupi - więc na wszelki wypadek dba o programistę (np. operatora trójargumentowego nie ma, bo mozna go abusować. Przeciążania funkcji nie ma - bo można je abusować. Hashtablice używają hashy, ale nie można ich nadpisywać, bo można to abusować, albo zrobić źle, albo... - i tak dalej).

Właśnie wymieiłeś jego największe zalety

Serio @pijany Terorysta? Uważasz to wszystko za zalety? Zwłaszcza tragiczną obsługę błędów? Nie mówię, że wyjątki są dobre, ale to co robi Go jest jeszcze gorsze od wyjątków.


0

Go at Dropbox - Zviad Metreveli - Gopherfest - November 18, 2015

0

Czy w Go uzywa sie dependency injection?

0

Websocket Shootout: Clojure, C++, Elixir, Go, NodeJS, and Ruby
https://hashrocket.com/blog/posts/websocket-shootout

czy takie benchmarki na pewno mają sens?

dabra
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:89
1

@biały Mleczarz testowałem tą samą aplikację napisaną przez nas w Go i Java - produkcyjnie. Z tym, że Go wykorzystywała Revel, zaś wersja w Java Playframework. Responsywność była wyższa po stronie Javy, po prostu było to czuć (nawet bez benchmarków) przy większym obciążeniem.

Problemy zaczynały się przy większej ilości sesji. W tej sytuacji wychodziły problemy z wydajnością driverów MySQL. Teoretycznie wersja w Go potrafiła obsłużyć około 3000 sesji, jednak w praktyce - serwer dławił się przy około 250 sesjach. Wersja w playframework działała znakomicie przy ponad 300 sesji - nadal bardzo wydajnie.

Problemem były także wycieki pamięci po stronie Revel'a - który miał ich dość sporo. Sam Go w stosowanej wersji także miał troszkę za uszami. Po rocznej produkcji, mogę powiedzieć Go jest naprawdę świetny - jednak z wydajnością jest różnie i na pewno nie tak kolorowo jak na wykresach.

Ważnym czynnikiem było wykorzystanie pamięci. Wersja Java wykorzystywała około 2,5 GB RAM w 150 sesjach. Wersja w Go około 600 MB

edytowany 1x, ostatnio: dabra
R3
myslalem, ze w Go nie nalezy korzystac z frameworkow ;)
0

@dabra
Widać, że w Go jest jeszcze dużo miejsca na poprawki.
I ostatnio poprawiono chyba ogólny performance, pojawił się też lepszy lib do JSONa, stop the world GC w nowej wersji ma być na poziomie max 100 mikrosekund i przede wszystkim ponoć poradzono sobie z latency.

Mógłbyś poradzić, gdzie to można jakoś za darmo zdeployować w jakiejś chmurze? Heroku? 4fun. Można na jakimś cloud deployować kontenery Dockera? ;)

edytowany 1x, ostatnio: hauleth
hauleth
Posprzątałem trochę, bo syf. Polski język potrafi być lepszy niż próby spolszczania ang. ("improvementy" vs. "poprawki"). Co do pytania o deplyment to wszędzie gdzie masz dostęp przez SSH: AWS, DigitalOcean, Scaleway, etc.
1
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)