Это подробное руководство по основам языка Go, включающее примеры программ, которые демонстрируют различные концепции программирования на Go.
Каждая программа на Go начинается с функции main
:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Основные типы данных в Go:
int
— целые числаfloat32
— числа с плавающей запятой одинарной точностиfloat64
— числа с плавающей запятой двойной точностиrune
— одиночные символыПример использования арифметических операций в Go:
package main
import "fmt"
func main() {
a := 10
b := 20
sum := a + b
diff := b - a
prod := a * b
div := b / a
mod := b % a
fmt.Println("Sum:", sum)
fmt.Println("Difference:", diff)
fmt.Println("Product:", prod)
fmt.Println("Division:", div)
fmt.Println("Modulus:", mod)
}
Ввод и вывод данных с использованием fmt.Scan
и fmt.Println
:
package main
import (
"fmt"
)
func main() {
var num int
fmt.Print("Enter an integer: ")
fmt.Scan(&num)
fmt.Println("You entered:", num)
}
Пример использования оператора if-else
:
package main
import (
"fmt"
)
func main() {
var num int
fmt.Print("Enter an integer: ")
fmt.Scan(&num)
if num > 0 {
fmt.Println("The number is positive.")
} else if num < 0 {
fmt.Println("The number is negative.")
} else {
fmt.Println("The number is zero.")
}
}
Пример цикла for
:
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Println("i =", i)
}
}
Пример работы с массивами:
package main
import "fmt"
func main() {
arr := [5]int{1, 2, 3, 4, 5}
for i, value := range arr {
fmt.Println("arr[", i, "] =", value)
}
}
Пример создания и использования функции:
package main
import "fmt"
func greet() {
fmt.Println("Hello from the function!")
}
func main() {
greet()
}
Пример создания и использования структур:
package main
import "fmt"
type Rectangle struct {
width float64
height float64
}
func (r Rectangle) area() float64 {
return r.width * r.height
}
func (r Rectangle) display() {
fmt.Printf("Width: %.2f, Height: %.2f, Area: %.2f\n", r.width, r.height, r.area())
}
func main() {
rect := Rectangle{width: 5.0, height: 3.0}
rect.display()
}
В Go нет классического наследования, но можно использовать композицию:
package main
import "fmt"
type Animal struct {
name string
}
func (a Animal) speak() {
fmt.Println(a.name, "makes a sound.")
}
type Dog struct {
Animal
}
func (d Dog) speak() {
fmt.Println(d.name, "barks.")
}
func main() {
dog := Dog{Animal{name: "Rex"}}
dog.speak()
}
Пример работы с указателями:
package main
import "fmt"
func main() {
num := 10
ptr := &num
fmt.Println("Value of num:", num)
fmt.Println("Value via pointer:", *ptr)
}
В Go нет прямого управления динамической памятью, используется сборщик мусора:
package main
import "fmt"
func main() {
num := new(int)
*num = 10
fmt.Println("Value:", *num)
}
Пример работы с коллекциями в Go:
package main
import "fmt"
func main() {
list := []string{"Hello", "World"}
for _, item := range list {
fmt.Println(item)
}
}
Пример обработки ошибок в Go:
package main
import (
"errors"
"fmt"
)
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
result, err = divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}
Пример работы с файлами в Go:
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
err := ioutil.WriteFile("example.txt", []byte("Hello, file!"), 0644)
if err != nil {
fmt.Println("Error creating file:", err)
return
}
data, err := ioutil.ReadFile("example.txt")
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Println(string(data))
}