@Kle6800

Вопрос по пакету «bufio»?

Можете подсказать как сделать так чтобы писалась в БД одной строчкой

package main

import (
	"fmt"
	"net"
	"bufio"
	"time"
	"database/sql"  ///пакет для работы с БД
	_ "github.com/lib/pq" //пакет для работы с БД
)
const (
	DB_HOST		        = "127.0.0.1"
	DB_USER    	        = "postgres"
	DB_PASSWORD 	    = "postgres"
	DB_NAME     	    = "freeswitch"
)
var (
	err error
	db *sql.DB  /// для работы с запросами в БД
)
func init() {
	start := time.Now()
	fmt.Println("Демон Стартовал:",start)
}
func main() {
	// Bind на порт ОС
	listener, _ := net.Listen("tcp", ":9000")
	db_property := "host=" + DB_HOST + " user=" + DB_USER + " password=" + DB_PASSWORD + " dbname=" + DB_NAME + " sslmode=disable"
	db, err = sql.Open("postgres", db_property)
	err = db.Ping()
	defer db.Close() ///закрываем коннект к Базе данных

	for {
		// ждём пока не придёт клиент
		conn, err := listener.Accept()

		if err != nil {
			fmt.Println("Can not connect!!")
			conn.Close()
			continue
		}

		fmt.Println("Connected")

		// создаём Reader для чтения информации из сокета
		bufReader := bufio.NewReader(conn)
		fmt.Println("Start reading")
		go func(conn net.Conn) {
			//defer conn.Close()

			for {
				// побайтово читаем
				rbyte, err := bufReader.ReadByte()

				if err != nil {
					fmt.Println("Can not read!", err)
					break
				}

				fmt.Print(string(rbyte))
				data := string(rbyte)
				ip := conn.RemoteAddr().String()
				start_db := time.Now()
				_, err = db.Exec("INSERT INTO smpp (sms,state,ip,time) VALUES ($1, 'active' , $2, $3 )", data,ip,start_db)  // Метод db.Exec() применяется, когда нужно сделать однократное обращение к базе, не требующее возврата данных.
			}
		}(conn)
	}
}


В таком виде приходит на порт
7812587512gsggsgsag>7812587512gsggsgsag>7812587512gsggsgsag>7812587512gsggsgsag>7812587512gsggsgsag>7812587512gsggsgsag>7812587512gsggsgsag

В Бд пишеться как
d244851bd4cc48e5830db6e746b9b251.PNG
  • Вопрос задан
  • 366 просмотров
Решения вопроса 1
Может вам удобнее читать по линиям, а не по байтам? У bufio.Reader есть прекрасный метод ReadString, который читает до указанного разделителя.
line, err := bufReader.ReadString('\n')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы