Jump to content

Search the Community

Showing results for tags 'golang'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Mans
    • Linux
    • Windows
  • Coding
    • Php
    • Golang
    • JavaScript | Node.js
    • Python|Ruby
    • C|C++|C#
    • Other
    • DataBases
  • Underground
    • Security and its research
    • Hack Tools
    • Social engineering
    • Phreaking
    • TV
    • Spam
    • For beginners
  • Games
    • Generals
  • Other
    • News
    • Creative and Design
    • The Internet
    • SEO
    • Freebie
    • Training courses
    • Video Tutorials
    • Trading floor
    • Verstka
    • Talker
  • k0d.biz
    • Contests
    • Questions, comments and more
    • Site and forum news
    • Violations, complaints

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 9 results

  1. Golang загрузка нескольких файлов из формы Есть некая форма: <form enctype="multipart/form-data" method="post"> <input type="file" name="file" multiple> <input type="submit" value="Отправить" > </form> В которой мы выбрали к примеру 2 файла. Вопрос состоит в следующем: как принять оба файла? Если собирать так: file, fileHeader, err = r.FormFile(name) где - r *http.Request То выбрать вы сможете только один файл, а надо все. Для этого есть минимум 2 варианта: m, err := r.MultipartReader() if err != nil { fmt.Println(err) } for { part, err := m.NextPart() if err == io.EOF { break } if part.FileName() == "" { continue } dst, err := os.Create("./test/" + part.FileName()) if err != nil { fmt.Println(err) } io.Copy(dst, part) } Этот пример от сюда. И второй: func addFiles(r *http.Request) ([]int32, error) { var err error var ids []int32 for _, values := range r.MultipartForm.File { for _, fileHeadetr := range values { var newFile files.File newFile.TmpFile.FileHeader = fileHeadetr newFile.TmpFile.File, err = fileHeadetr.Open() if err != nil { log.Println(err) } var id int32 id, err = newFile.Add() if err != nil { log.Println(err) } else { ids = append(ids, id) } } } return ids, err }
  2. Вся работа с letsencrypt укладывается в пару строчек: import "golang.org/x/crypto/acme/autocert" m := &autocert.Manager{ Cache: autocert.DirCache("golang-autocert"), Prompt: autocert.AcceptTOS, HostPolicy: autocert.HostWhitelist("NameProject", "www."+NameProject), } server := &http.Server{ Addr: ":443", TLSConfig: m.TLSConfig(), Handler: router, } server.ListenAndServeTLS("", "") Где router - router *mux.Router Полный пример: import ( "fmt" "github.com/gorilla/mux" _ "github.com/gorilla/mux" log "github.com/sirupsen/logrus" "golang.org/x/crypto/acme/autocert" "net/http" "os" ) func main(){ router := mux.NewRouter() router.HandleFunc("/robots.txt", func(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { log.Println(err) } http.ServeFile(w, r, "robots.txt") }).Methods("GET") m := &autocert.Manager{ Cache: autocert.DirCache("golang-autocert"), Prompt: autocert.AcceptTOS, HostPolicy: autocert.HostWhitelist("nameproject.org", "www.nameproject.org"), } server := &http.Server{ Addr: ":443", TLSConfig: m.TLSConfig(), Handler: router, } server.ListenAndServeTLS("", "") }
  3. В повседневной работе требуется получать и отправлять различные данные на различных языках и платформах. В данный момент пойдет речь о Golang и отправке html form на js с использование axios, но суть будет ясна и применима с простым <form> html. Разберем все по порядку: axios даёт прекрасную возможность легко и непринужденно отправлять данные различными методами. замечу: здесь отправлять данные можно двумя вариантами наименования обьектов: params - - параметры URL, которые будут отправлены с запросом. Должен быть простым объектом или объектом URLSearchParams data - данные, которые будут отправлены как тело запроса. Применяется только для методов запроса «PUT», «POST» и «PATCH» GET, DELETE: let payload = {'category': ""} axios.get('/api/good/getGood',{ params: payload }).then((response) => { console.log(response); }); POST, PUT, PATCH: getGoods({dispatch, state, commit, getters}, payload){ return axios.post('/api/good/getGoods',{ //.put(...,{}); //.delete(...,{}); data: payload }).then((response) => { console.log(response); }); }, На golang получаем данные из форм, в частности нашу переменную category : func GetGoods(w http.ResponseWriter, r *http.Request) { // они все тут err := r.ParseForm() category := r.Form["category"] if err != nil { log.Println(err) } log.Println(category) } r.ParseForm() - распарсит и даст возоможность получить данные через r.Form Если же Вы отправляете файлы, то парсите так: r.ParseMultipartForm(0) vars := mux.Vars(r) log.Println("id: ", vars["id"])
  4. Ошибка вида: import cycle not allowed Означает - произошла ошибка циклической зависимости. Если пакет а подключается пакет б, то пакет б не должен включать пакет а.
  5. Иногда требуется сделать программу, которая будет в роли слушателя порта и выполнения какой - либо операции. Все бы ничего, но частенько порт уже занят(Пример :8080). Чтобы оставить свои порты в покое: Создадим папку Go и файл docker-compose.yaml: mkdir Go touch docker-compose.yaml Создаем внутри папки Go папку с доменным именем: mkdir Go/mydomain.lo Внутри нее создаем подпапку data и файл для создания образа. mkdir Go/mydomain.lo/data touch Go/mydomain.lo/Dockerfile Внутри dada как раз и кладем наш скомпилированый заранее бинарник(и). Открываем созданный Dockerfile cd /Go/mydomain.lo vim Dockerfile Прописываем в него: FROM archlinux mkdir /go FROM - Указывает откуда взять образ. Я выбрал archlinux образ, вы можете выбрать любой другой ОС тут. ENTRYPOINT /go/вашБин, он стартанет при поднятии контейнера. Переходим обратно к docker-compose.yaml cd ../../.. vim docker-compose.yaml Прописываем в нем версию и наш сервис: Сохраняем и выходим. docker-compose up Теперь при создании контейнера - поднимется и программа, но внутри уже контейнера.
  6. Целочисленные типы int8: целое число от -128 до 127 занимает 1 байт (8 бит) int16: целое число от -32 768 до 32 767 занимает 2 байта (16 бит) int32: целое число от -2 147 483 648 до 2 147 483 647 занимает 4 байта (32 бита) int64: целое число от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 занимает 8 байт(64 бита) uint8: целое число от 0 до 255 занимает 1 байт uint16: целое число от 0 до 65 535 занимает 2 байта uint32: целое число от 0 до 4 294 967 295 занимает 4 байта uint64: целое число от 0 до 18 446 744 073 709 551 615 занимает 8 байт byte: синоним типа uint8, целое число от 0 до 255 занимает 1 байт rune: синоним int32, целое число от -2 147 483 648 до 2 147 483 647 занимает 4 байта int: целое число со знаком, зависимый тип от платформы, 4 или 8 байт, синоним int32, либо int64. uint: целое беззнаковое число, зависимый тип от платформы, 4 или 8 байт, синоним uint32, либо uint64. Дробные(числа с плавающей точкой) float32: от 1.4*10-45 до 3.4*10-38 занимает 4 байта(32 бита) float64: от 4.9*10-324 до 1.8*10-308 занимает 8 байта Комплексные числа complex64: вещественная и мнимая части представляют числа float32 complex128: вещественная и мнимая части представляют числа float64 Bool bool: имеет один из 2-ух значений: true или false Строки string: представляет строковый литерал - последовательность символов, заключенная в двойные кавычки. Кроме обычных символов могут использоваться спец символы: \n: переход на новую строку \r: возврат каретки \t: табуляция \": двойная кавычка внутри строк \\: обратный слеш
  7. Дописать в файл можно двумя способами: 1) Открыть файл с флагом: os.O_APPEND var fileLog *os.File fileLog, err := os.OpenFile(pathFileLog, os.O_APPEND|os.O_WRONLY, 0600) if err != nil{ return err } defer func() { err = fileLog.Close() if err != nil{ log.Fatalln(err) } }() countN, err := fileLog.Write(insertData) if err != nil{ log.Fatalln(err) } log.Println("log countN:", countN) 2)Передвигая указатель seek файла.
  8. Преобразование interface{} в []byte package main import ( "encoding/gob" "bytes" ) func GetBytes(key interface{}) ([]byte, error) { var buf bytes.Buffer enc := gob.NewEncoder(&buf) err := enc.Encode(key) if err != nil { return nil, err } return buf.Bytes(), nil }
  9. Периодически при простое MySql и последующим подключении к базе на языке Go при использовании либы: github.com/jmoiron/sqlx Вываливается ошибка коннекта и все на этом, данные не отдаются, однако при следующем запросе данные успешно получите. Решение: Необходимо выполнить метод к бд: db.SetMaxIdleConns(0) Keeping a connection idle for a long time can cause problems (like in this issue with MySQL on Microsoft Azure). Try db.SetMaxIdleConns(0) if you get connection timeouts because a connection is idle for too long. Ссылка на источник.
×
×
  • Create New...