f, err := os.OpenFile("file.txt", os.O_RDWR, 0666)
if err != nil {
log.Fatalln(err)
}
type MySQLStorage struct {
db *sql.DB
}
func NewMySQLStorage(db *sql.DB) *MySQLStorage {
return &MySQLStorage{
db: db,
}
}
func (sg *MySQLStorage) StorePurchases(ctx context.Context, sp []*Purchase) ([]*Purchase, error) {
for _, p := range sp {
fmt.Printf("%+v\n", p)
}
return sp, nil
}
func (sg *MySQLStorage) StoreSubscriptionPurchases(ctx context.Context, sp []*SubscriptionPurchase) ([]*SubscriptionPurchase, error) {
for _, p := range sp {
fmt.Printf("%+v\n", p)
}
return sp, nil
}
db := connectToDB...
sg := NewMySQLStorage(db)
NewValidate(sg "", googleConfig)
package main
import "testing"
func Test_sum(t *testing.T) {
tt := []struct {
args GetArgs
sum int
}{
{Args {2, 4}, 6},
{Args {2, -2}, 0},
}
for _, tc := range tt {
tci := tc.args.(GetArgs)
s := Sum(tci)
if s != tc.sum {
t.Errorf("sum of %v and %v should be %v, received- %v", tc.args.GetA(), tc.args.GetB(), tc.sum, s)
}
}
}
package main
import (
"fmt"
"unsafe"
)
type S1 struct {
f1 int
}
func main() {
s1 := S1{}
s2 := struct{}{}
fmt.Printf("s1 size: %v\n", unsafe.Sizeof(s1))
fmt.Printf("s2 size: %v\n", unsafe.Sizeof(s2))
}
s1 size: 8
s2 size: 0
type FileInfo interface {
Name() string // base name of the file
Size() int64 // length in bytes for regular files; system-dependent for others
Mode() FileMode // file mode bits
ModTime() time.Time // modification time
IsDir() bool // abbreviation for Mode().IsDir()
Sys() interface{} // underlying data source (can return nil)
}
type FileInfo = fs.FileInfo
package main
import (
"fmt"
"io/ioutil"
"log"
)
func main() {
// текущая папка
files, err := ioutil.ReadDir(".")
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Println(file.Name(), file.IsDir())
}
}
type Order struct {
ID uint `gorm:"primaryKey;autoIncrement;unique"json:"id"`
Owner string `json:"owner"`
Status string `gorm:"default:ordered"json:"status"`
Phone int `json:"phone"`
Order []OrderProduct `gorm:"foreignKey:OrderId"json:"products"`
}
type OrderProduct struct {
ID uint `gorm:"primaryKey;autoIncrement;unique"json:"id"`
// добавляем это поле, чтобы была связь с таблицей Orders
OrderID uint `json:"-"`
Brand string `json:"brand"`
ItemId int `json:"item_id"`
Img string `json:"img"`
ItemTotal int `json:"item_total"`
Price string `json:"price"`
Quantity int `json:"quantity"`
Title string `json:"title"`
Type string `json:"type"`
}
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
num := make(chan int, 1000) // 1000 - размер буффера канала
wg.Add(1)
go func() {
for i := 0; i < 1000; i++ {
num <- i
fmt.Printf("write to channel: %d\n", i)
// задержка нужна только на время теста
time.Sleep(100 * time.Microsecond)
}
close(num)
wg.Done()
}()
wg.Add(1)
go func() {
for {
val, ok := <-num
if !ok {
break
}
fmt.Printf("goroutine 1 got: %d\n", val)
}
wg.Done()
}()
wg.Add(1)
go func() {
for {
val, ok := <-num
if !ok {
break
}
fmt.Printf("goroutine 2 got: %d\n", val)
}
wg.Done()
}()
wg.Wait()
}
sudo chown -R ваш_логин /home/work/src
и установить правильные права на папку /tmp chmod 777 /tmp
export PATH=$PATH:/usr/lib/golang/bin
which go
, ответ может быть таким /usr/lib/golang/bin/go - тогда нужно прописать как я написал.package main
import (
"fmt"
"log"
"os"
"strconv"
)
func main() {
var what string
var input string
fmt.Print("Выберите действие (+, -)")
fmt.Fscan(os.Stdin, &what)
if what != `+` && what != `-` {
log.Fatalf("действие указанно не корректно\n")
}
fmt.Print("Введите первое значение: ")
fmt.Fscan(os.Stdin, &input)
a, err := strconv.ParseFloat(input, 64)
if err != nil {
log.Fatalf("число указано не корректно: %v\n", err)
}
fmt.Print("Введите второе значение: ")
fmt.Fscan(os.Stdin, &input)
b, err := strconv.ParseFloat(input, 64)
if err != nil {
log.Fatalf("число указано не корректно: %v\n", err)
}
var c float64
if what == "+" {
c = a + b
} else if what == "-" {
c = a - b
}
fmt.Printf("Результат: %v\n", c)
}
https://domain.com/products/chairs?height=200&width=100
r.HandleFunc("/products/{category_handle}", h.ShowProducts).Methods("GET")
// из извлекаем из URL категорию
vars := mux.Vars(r)
categoryHandle := vars["categoryHandle"]
// получаем параметры
height, _ := strconv.Atoi(r.URL.Query().Get("height"))
width, _ := strconv.Atoi(r.URL.Query().Get("width"))
server {
listen *:80;
server_name yourdomain1.com; # домен, который вам нужно
...
location / {
proxy_pass http://127.0.0.1:9000; # IP адрес и порт, на котором слушает сервис Go lang.
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen *:80;
server_name yourdomain2.com; # домен, который вам нужно
...
location / {
proxy_pass http://127.0.0.1:9001; # IP адрес и порт, на котором слушает сервис Go lang.
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
func SortBytes(arr []byte) {
sort.Slice(arr, func(i, j int) bool {
return arr[i] < arr[j]
})
}
// потом использовать вот так
arr := []byte{4, 3, 2, 1, 6, 3, 77, 8,3}
sortBytes(arr)
fmt.Println(arr)
sort.Slice(arr, func(i, j int) bool {
return arr[i] < arr[j]
})
fmt.Println(arr)