func ServeWs(hub *Hub, w http.ResponseWriter, r *http.Request) {
conn, err := wsupgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return
}
client := &Client{hub: hub, conn: conn, send: make(chan []byte, 256)}
client.hub.register <- client
for {
var msg MsgType
err := conn.ReadJSON(&msg)
if err != nil {
client.hub.unregister <- client
return
}
}
}
package main
import (
"bufio"
"fmt"
"log"
"os/exec"
)
func main() {
cmd := exec.Command("cmd", "/C", "C:/gopath/src/script/for.exe")
// Получаем reader для STDOUT запущенной программы
// Это нужно делать до её запуска
stdoutPipe, err := cmd.StdoutPipe()
if err != nil {
log.Fatal("Cannot get stdout pipe: ", err)
}
// Запускаем команду
err = cmd.Start()
if err != nil {
log.Fatal("Cannot start the command: ", err)
}
// Создаём более удобный интерфейс чтения
r := bufio.NewReader(stdoutPipe)
// Читаем из stdout одну строку (пока не встретим перевод строки \n)
str, err := r.ReadString('\n')
if err != nil {
log.Fatal("Cannot read from STDOUT: ", err)
}
fmt.Println(str)
}
package main
import (
"fmt"
"strconv"
)
func main() {
var t map[string]interface{} // Создаем переменную, сейчас она nil и мы не можем в неё класть ключи
t = make(map[string]interface{}) // Создаем map в памяти, теперь можем класть ключи
t["key"] = "1" // Кладём ключ
var num int
rawValue, ok := t["key"] // Вытаскиваем ключ из map
if ok {
stringValue, ok := rawValue.(string) // Вытаскиваем string из interface{}
if ok {
var err error
num, err = strconv.Atoi(stringValue) // Парсим string в int
if err == nil {
fmt.Println(num)
} else {
fmt.Println("Число имеет неверный формат")
}
} else {
fmt.Println("Внутри interface{} лежит не тип string")
}
} else {
fmt.Println("Такого ключа нет в map")
}
}
NewFoo(sliceBar...)