var http = require('http');
var options = {
hostname: 'www.example.com',
localAddress: '202.1.1.1', // сюда нужно будет по очереди подставлять IP, которые у вас будут
};
var req = http.request(options, function(res) {
res.on('data', function (chunk) {
console.log(chunk.toString());
});
});
func (m *LoggingMiddleware) LogBody(next http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
wRecorder := httptest.NewRecorder()
next.ServeHTTP(wRecorder, r)
resp := wRecorder.Result()
body, _ := io.ReadAll(resp.Body)
// не забыть записать ответ в w
}
return http.HandlerFunc(fn)
}
func (m *LoggingMiddleware) LogBody(next http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
var buf bytes.Buffer
logWriter := NewLogToConsoleResponseWriter(&b)
next.ServeHTTP(logWriter, r)
// тут у вас в buf будет ответ сервера, с которым можно работать
// главное потом не забыть записать его в `w`
}
return http.HandlerFunc(fn)
}
package main
import (
"fmt"
"io/ioutil"
"gopkg.in/yaml.v3"
)
func main() {
fmt.Println("start")
c, err := readYaml("./tets.yml")
if err != nil {
panic(err.Error())
}
fmt.Println(c.Master, c.Kibana, c.Data, c.Pass, c.User)
}
type ClusterEnv struct {
Master []string `yaml:"master,flow"`
Data []string `yaml:"data,flow"`
Kibana []string `yaml:"kibana,flow"`
User string `yaml:"user"`
Pass string `yaml:"pass"`
}
func readYaml(filename string) (*ClusterEnv, error) {
buf, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
c := &ClusterEnv{}
err = yaml.Unmarshal(buf, c)
if err != nil {
return nil, fmt.Errorf("in file %q: %v", filename, err)
}
return c, nil
}
package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Your IP is %s", r.RemoteAddr)
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
ip := r.Header.Get("X-Forwarded-For")
// или
ip := r.Header.Get("X-Real-IP")
var fileWork = ioutil.ReadFile("testFile.txt")
// создаём переменную которую будем перезаписывать, сразу наполняем данными и сразу приводим к string чтобы было удобно работать
new_fileWork := string(fileWork)
for _, link := range arrLinks {
var regul = link + ".txt"
myRegexp, err := regexp.Compile(regul)
// new_fileWork передаем как параметр, его же и обновляем, за счёт этого при каждой итерации данные не теряются как в вашем примере
new_fileWork = myRegexp.ReplaceAllString(new_fileWork , link) // Редактируем.
}
var new_fileWorkB = []byte(new_fileWork)
// у вас host = "https://smtp.mail.ru:25", а должен быть "smtp.mail.ru"
auth := smtp.PlainAuth("", from, password, host)
import (
"log"
"net/smtp"
)
func main() {
// Set up authentication information.
// тут порт не указан, скорее всего ругается именно в этой строке
auth := smtp.PlainAuth("", "user@example.com", "password", "mail.example.com")
// Connect to the server, authenticate, set the sender and recipient,
// and send the email all in one step.
to := []string{"recipient@example.net"}
msg := []byte("To: recipient@example.net\r\n" +
"Subject: discount Gophers!\r\n" +
"\r\n" +
"This is the email body.\r\n")
// тут порт указан, т.е. host:port, но не указывается протокол типа https, тут протокол SMTP
err := smtp.SendMail("mail.example.com:25", auth, "sender@example.org", to, msg)
if err != nil {
log.Fatal(err)
}
}
package main
import (
"fmt"
php "github.com/kovetskiy/go-php-serialize"
)
func main() {
s := `a:6:{s:7:"__flash";a:1:{s:3:"mes";s:5:"Hello";}s:4:"__id";s:36:"3c5035d9-aea1-4f08-8325-9e598921e2a9";}`
val, err := php.Decode(s)
if err != nil {
fmt.Println(err)
return
}
session := val.(map[interface {}]interface {})
flash := session["__flash"].(map[interface {}]interface{})
fmt.Println("id", session["__id"])
fmt.Println("mes", flash["mes"])
}
session, ok := val.(map[interface {}]interface {})
if !ok {
// с val явно что-то не так, оно не соответствует типу map[interface {}]interface {}
}
flash, ok := session["__flash"].(map[interface {}]interface{})
if !ok {
// ...
}
closeFrame := ws.NewCloseFrame([]byte{})
// отправляем
err := ws.WriteFrame(wsconn, closeFrame)
header, err := ws.ReadHeader(wsconn)
if header.OpCode == ws.OpClose {
// клиент подтвердил закрытие, соединение можно закрывать
wsconn.Close()
}
type BigStruct struct {
field1 int
filed2 string
field3 uint
field4 []byte
...
field50 string
}
func Report(s BigStruct)
s := BigStruct{}
// заполняем поля
Report(s)
func Report(s *BigStruct)
s := BigStruct{}
// заполняем поля
Report(&s) // тут добавился & - берём адрес структуры, а не саму структуру
// создаём переменную s сразу с типом указатель на BigStruct
s := &BigStruct{}
// заполняем поля
Report(s) // поскольку s уже является указателем - & тут не нужен
var s *BigStruct
var i *int
i = new(int)
*i = 10 // пишем значение
fmt.Printf("i: %v\n", i)
fmt.Printf("*i: %v\n", *i)
i: 0xc0000160d8 (это адрес памяти, где лежит значение переменной i)
*i: 10 (а это её значение)