Go
- Дата создания:
- ноябрь 2009
- Создан под влиянием:
- Повлиял на:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .go
- Реализации и версии (свернуть все | развернуть все):
Go — компилируемый многопоточный язык программирования со сборкой мусора, созданный компанией Google.
Элементы синтаксиса:
Комментарий до конца строки | // |
---|---|
Комментарии, которые не могут быть вложенными | /* ... */ |
Присваивание значения переменной | = |
Объявление переменной | var variable type |
Объявление переменной с присваиванием значения | variable := value OR var vartype = value |
Блок | { ... } |
Равенство | == |
Неравенство | != |
Сравнение | < > <= >= |
Определение функции | func f(p1 type1, p2 type2, ...) returntype { ... } |
Вызов функции | f(a, b, ...) |
Вызов функции без параметров | f() |
Последовательность | ; OR newline |
Если - то | if (condition) { ... } |
Если - то - иначе | if (condition) { ... } else { ... } |
Бесконечный цикл | for { ... } |
Цикл с предусловием | for condition { ... } |
Цикл for - next для диапазона целых чисел с инкрементом на 1 | for i := 1; i <= 10; i++ { ... } |
Цикл for - next для диапазона целых чисел с декрементом на 1 | for i := 10; i >= 1; i-- { ... } |
Примеры:
Hello, World!:
Пример для версий gc-2010-07-14package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Факториал:
Пример для версий gc-2010-07-14В примере показаны рекурсивный и итеративный способы вычисления факториала, а также создание обобщенной функции, которая выводит их результаты универсальным способом.
package main
import "fmt"
//Recursive Factorial
func factr(n uint64) uint64 {
if (n < 2) { return 1 }
return n * factr(n-1)
}
//Iterative Factorial
func facti(n uint64) uint64 {
var ret uint64 = 1
for ; n > 0; n-- {
ret *= n
}
return ret
}
func printFact(fact func(uint64) uint64) {
for i := 0; i < 17; i++ {
fmt.Printf("%d! = %d\n", i, fact(uint64(i)))
}
}
func main() {
printFact(factr)
fmt.Println("--")
printFact(facti)
}
Числа Фибоначчи:
Пример для версий gc-2010-07-14В этом примере показаны все три способа вычисления чисел Фибоначчи.
package main
import ("fmt"
"math")
//Fibonacci Recursive
func fibr(n int) int {
if n < 2 { return 1 }
return fibr(n-2) + fibr(n-1)
}
//Fibonacci Iterative
func fibi(n int) int {
var a, b int = 1, 1
for i := 0; i < n; i++ {
a, b = b, a+b
}
return a
}
//Fibonacci Binet
func fibb(n int) int {
g := (1 + math.Sqrt(5)) / 2
ret := (math.Pow(g, float64(n)) - math.Pow(1-g, float64(n))) / math.Sqrt(5)
return int(ret)
}
type fibfunc func(int) int
//Implements a general printing method for fibonacci functions
func printFib(fib fibfunc, a, b int) {
for i := a; i < b; i++ {
fmt.Printf("%d, ", fib(i))
}
fmt.Println("...")
}
func main() {
printFib(fibr, 0, 16)
printFib(fibi, 0, 16)
printFib(fibb, 1, 17)
}
Квадратное уравнение:
Пример для версий gc-2010-07-14При импорте нескольких пакетов перед именем одного из них можно поставить точку, и использовать его функции без префикса имени пакета, как fmt
в этом примере.
Чтобы прочитать число, введенное пользователем, следует прочитать строку из консоли, убрать последний символ переноса строки и преобразовать ее в нужный формат числа. В данном случае входные переменные будут целочисленными, но в дальнейшем будут использоваться для вычислений с плавающей точкой. Go не поддерживает неявные преобразования типов, поэтому лучше сразу трактовать входные данные как float64 (тип данных, который передается в качестве аргумента в math.Sqrt
).
= — простое присваивание, := — присваивание с объявлением переменной, находящейся слева от знака присваивания. Следует отметить, что объявленные, но неиспользованные переменные считаются ошибками компиляции.
package main
import (
"os"
. "fmt"
"math"
"bufio"
"strconv")
func main() {
in := bufio.NewReader(os.Stdin)
line, err := in.ReadString('\n')
line = line[0 : len(line)-1]
A, err := strconv.Atof64(line)
if (A == 0) {
Print("Not a quadratic equation.")
return
}
line, err = in.ReadString('\n')
line = line[0 : len(line)-1]
B, err := strconv.Atof64(line)
line, err = in.ReadString('\n')
line = line[0 : len(line)-1]
C, err := strconv.Atof64(line)
if err != nil {
Print(err)
}
D := B*B-4*A*C
if (D == 0) {
Printf("x = %f", -B/2/A)
return
}
if (D>0) {
Printf("x1 = %f\nx2 = %f", -B/2/A + math.Sqrt(D)/2/A, -B/2/A - math.Sqrt(D)/2/A)
} else {
Printf("x1 = (%f, %f)\nx2 = (%f, %f)", -B/2/A, math.Sqrt(-D)/2/A, -B/2/A, -math.Sqrt(-D)/2/A)
}
}
Комментарии
]]>blog comments powered by Disqus
]]>