Go in Practice

Go in Practice

18-10-2020 09:35:58
Стандартная библиотека Go включает в себя пакеты для создания приложения с поддержкой опций командной строки.

В отличии от стандартных, принятых в Linux/BSD, стилей — в пакете из стандартной библиотеке Go используются одинарные или двойные дефисы как взаимозаменяемые.

Т.е. тут не будет возможность указать несколько опций, используя формат tar -xvpf — для Go xvpf будет являться одной опцией, а не набором опций для tar — -x, -v, -p и -f.

Пакет flag


Пакет flag поддерживает несколько вариантов добавления опций.

flag.String()
Вариант первый — с помощью flag.String():


package main
import (
"flag"
"fmt"
)
func main() {

// to save the 'name' option value
var name = flag.String("name", "World", "The 'name' option value")

// parse flag's options
flag.Parse()

// print the 'name'`s value
fmt.Printf("Hello, %s\n", *name)
}




Тут в var name создаём переменную, которая ссылается на объект flag.String, которому передаются имя флага («name«), значение по умолчанию («World«), и строка для отображения в --help.

Вызываем программу без опций:

Указатели



Пару слов об указателях. Есть достаточно понятный разбор указателей в C тут>>> — разницы между указателями в Go и C особо нет, так что можно ознакомиться.

Если кратко — в примере выше мы выполняем fmt.Printf("Hello, %s\n", *name) — в модификатор %s подставляем значение, которое находится по адресу памяти, которое хранится в переменной name (которая, собственно, тут является указателем).

Можно получить это значение так:


package main

import "fmt"

func main() {

a := 1
b := &a

fmt.Println("A: ", a)
fmt.Println("B: ", b)
fmt.Println("B: ", *b)
}



Тут:

создаём переменную с именем a, типа integer, со значением 1
создаём переменную с именем b, типа указатель на integer (см. ниже) и выводим значения:

1. сначала просто значение переменной a
2. потом значение(!), или содержимое переменной b
3. получаем значение a, на которую ссылается b (* и & расммотрим ниже)






Во второй строке мы видим адрес участка памяти, на который указывает указатель b.


В третьей строке — мы получаем значение из этого участка.


Можно было бы выполнить инициализацию переменных более наглядно, с указанием типов, вместо использования :=, тогда код выглядел бы так:





  1. ...

  2. func main() {


  3. var a int = 1

  4. var b *int = &a


  5. fmt.Println("A: ", a)

  6. fmt.Println("B: ", b)

  7. fmt.Println("B: ", *b)


  8. }

  9. ...


...
func main() {

var a int = 1
var b *int = &a

fmt.Println("A: ", a)
fmt.Println("B: ", b)
fmt.Println("B: ", *b)

}
...



В строке var b *int = &a мы указываем, что переменная b вляется указателем на integer данные.


Аналогично создаётся указатель на строковые данные — в типе данных переменной (указателя) вместо *int указываем *string:





  1. ...

  2. var c *string

  3. fmt.Printf("The C var type: %T, default value: %v\n", c, c)

  4. var d string = "This is a string"

  5. c = &d

  6. fmt.Printf("The C var type: %T, default value: %v, string value: %s\n", c, c, *c)

  7. class=" odd">...

...
var c *string
fmt.Printf("The C var type: %T, default value: %v\n", c, c)
var d string = "This is a string"
c = &d
fmt.Printf("The C var type: %T, default value: %v, string value: %s\n", c, c, *c)
...



Тут:



  1. создаём переменную с, указываем тип указатель на строковые данные

  2. с помощью Printf() спецификаторов выводим тип переменной с (%T), и её значение (%v)

  3. создаём переменную d типа string со значением «This is a string«

  4. задаём переменной c адрес памяти переменной d

  5. с помощью Printf() спецификаторов выводим тип переменной с (%T), её значение, и значение, которое находится по адресу, который хранится в c


Выполняем:




go run pointers_example.go

The C var type: *string, default value: <nil>

The C var type: *string, default value: 0xc0000101e0, string value: This is a string





  • Re-play

  • Copy to Clipboard

  • Pause

  • Full View




Операторы * и &


Мы уже видели их использование в примерах выше, кратко остановимся на них.


Оператор * выполняет разыменование указателя.


Под разыменованием имеется ввиду, что выполняется получение значения не самого указателя (в котором хранится адрес, на который ссылается указатель), а значение из участка памяти, на который указатель… указывает 🙂


Вернёмся к предыдущему примеру:





  1. ...

  2. fmt.Printf("The C var type: %T, default value: %v, string value: %s\n", c, c, *c)

  3. class=" odd">...

...
fmt.Printf("The C var type: %T, default value: %v, string value: %s\n", c, c, *c)
...



Тут:



  • default value: %v и с — выводит значение, которое хранится в переменной с — адрес памяти, на который ссылается c

  • string value: %s и — выводит значение, полученное после обращения к адресу из c


Оператор & возвращает адрес переменной.


Например, добавим к нашему предыдущему примеру ещё одну строку, и отобразим адреса, используя Printf() и модификатор %p:





  1. ...

  2. var c *string

  3. fmt.Printf("The C var type: %T, default value: %v\n", c, c)

  4. var d string = "This is a string"

  5. c = &d

  6. fmt.Printf("The C var type: %T, default value: %v, string value: %s\n", c, c, *c)

  7. class=" odd"> fmt.Printf("The D adress: %p\nThe C address: %p\nThe C value: %v\n", &d, &c, c)
    class=" even">...

...
var c *string
fmt.Printf("The C var type: %T, default value: %v\n", c, c)
var d string = "This is a string"
c = &d
fmt.Printf("The C var type: %T, default value: %v, string value: %s\n", c, c, *c)
fmt.Printf("The D adress: %p\nThe C address: %p\nThe C value: %v\n", &d, &c, c)
...



Проверяем:




go run pointers_example.go

The C var type: *string, default value: <nil>

The C var type: *string, default value: 0xc0000101e0, string value: This is a string

The D adress: 0xc0000101e0

The C address: 0xc00000e028

The C value: 0xc0000101e0





  • Re-play

  • Copy to Clipboard

  • Pause

  • Full View




Тут мы получили адрес переменной d0xc0000101e0, переменной с — у которой свой адрес — 0xc00000e028, но при этом с хранит адрес переменной d0xc0000101e0.


Собственно, инициализация данных в указателе с выполняется именно через получение адреса переменной d:





  1. ...

  2. c = &d

  3. ...





САМОЕ ОБСУЖДАЕМОЕ

...
Титан в воздухе
18-10-2020 09:35:58
Это не самолет – это Мрия!!!...
...
Лучшие бюджетные ноутбуки на 2020 год
18-10-2020 09:35:59
Как выбрать лучший ноутбук в 2020 году...
...
Технологические тенденции в 2020 году
18-10-2020 09:35:59
Технологи будущего уже сегодня...
...
Самостоятельная поездка автомобиля под управлением искусственного интеллекта
18-10-2020 09:35:58
Самый далекий перезд без водителя в истории искуственного интеллекта....
...
Ford Bronco наконец дебютирует 9 июля
18-10-2020 09:35:58
После задержек, связанных с коронавирусом, у долгожданной Бронко Форда официально объявлена ​​дата....
...
Tesla Semi готова к «массовому производству»
18-10-2020 09:35:58
Но генеральный директор не указал точные сроки начала производства электрического грузовика....
...
25 самых продаваемых легковых автомобилей, грузовиков и внедорожников 2020 года (пока)
18-10-2020 09:35:58
Хотя пандемия коронавируса привела к хаосу в продажах автомобилей, мы подсчитали рейтинг самых продаваемых в первом квартале....
...
Электрический Mustang
18-10-2020 09:35:58
Ford представляет электрический Mustang с «потрясающим» ускорением...
...
Cамые большие дизайнерские моменты 2018 года
18-10-2020 09:35:59
Мы попросили дизайнеров рассказать нам, что они считают самой важной вещью, которая произошла в отрасли в этом году....
...
Airtable
18-10-2020 09:35:59
Простая в использовании система управления реляционными базами данных...

НАШИ РЕКОМЕНДАЦИИ

Toyota Supra в 2021 году
Toyota Supra в 2021 году
Toyota Supra 2020 года не получит дооснащения, чтобы соответствовать увеличению мощности в 2021 году...
9 различных вариантов использования console log
9 различных вариантов использования console log
Каждый из нас использовал console.logдля отладки больше, чем нам хотелось бы признать....
Расслабление, снятие стресса и развитие сознания
Расслабление, снятие стресса и развитие сознания
Иногда в жизни бывают дни.......
Послушай других и сделай наооборот
Послушай других и сделай наооборот
Основатель Tesla и SpaceX воплотил в жизнь одну идею, противоречащую общепринятому мнению, и это помогло ему заработать миллиарды....
Красный флаг или работа не Вашей мечты.
Красный флаг или работа не Вашей мечты.
В последнее время развелось (были всегда) много организаций на рынке - которые надо обходить стороной....


ИНТЕРЕСНОЕ

Понимание карты и набора в JavaScript
Понимание карты и набора в JavaScript
Эта статья была изначально написана для DigitalOcean ....
Lazareth Wazuma от Феррари
Lazareth Wazuma от Феррари
Lazareth Wazuma V8F Quad – Engine By Ferrari...
20 самых важных секретов настоящих отношений
20 самых важных секретов настоящих отношений
Не простые отношения между женщинами и мужчинами...
Работа в Швеции
Работа в Швеции
Компании в Швеции переходят на 6-часовые рабочие дни и добиваются удивительных результатов...


ЛУЧШИЕ РЕЙТИНГИ

Набор массы
Набор массы
Базовые принципы для новичков
Ежедневные 15-минутные прогулки способны кардинально изменить ваше тело
Ежедневные 15-минутные прогулки способны кардинально изменить ваше тело
Всем известно, как положительно влияют на организм...
Правила для наращивания мышечной массы
Правила для наращивания мышечной массы
Зная интенсивность физических упражнений...
Раскачать грудь
Раскачать грудь
Обычно грудные растут хорошо у тех...

АКТУАЛЬНОЕ

Будущее уже с нами Galaxy Fold
CEO продвижение
Отношения с мужчинами
Раздевалка
Лишь плохие начальники ожидают от своих подчиненных постоянной занятости
Как научиться читать быстрее
Выбирай того, кто ежедневно пишет тебе «С добрым утром»
США скрывают правду о пришельцах
Свечение от ракеты SpaceX американцы приняли за НЛО
Путешествие из Австрии в Италию

ЧИТАЙТЕ ТАКЖЕ

18-10-2020 09:35:59 (120052)
Какую одежду носят манхэттенские модницы летом
Возможно эта новость тебе еще неизвестна
18-10-2020 09:35:59 (120050)
Время сгибаемых смартфонов еще не пришло
Эксперт по технологиям издания Mashable Стэн Шредер написал колонку...
18-10-2020 09:35:59 (120049)
Успешные стартапы, которые начинали как сторонние проекты
Apple, Facebook, Google, SpaceX ...
18-10-2020 09:35:59 (120051)
Надо стараться быть с теми, кто к нам хорошо относится
Маленький гимназист очень плохо учился...
18-10-2020 09:35:59 (120044)
Стопроцентная диета для похудения или питание наоборот
Сделай все наоборот....
18-10-2020 09:35:59 (120046)
Невероятная 12-месячная трансформацией тела
Звезда фитнеса из Сиднея Софи Аллен рассказывает о своей трансформации..