LINUX.ORG.RU

private field

 


1

4

а что в golang переменную член структуры нельзя сделать приватной? какой тогда смысл создавать методы get()/set() если сама переменная доступна?

★★

нинужно. очевидно же.

anonymous
()
Ответ на: комментарий от quester

foo/foo.go

package foo

type Quester struct {
    Exported  string
    private   string
}

bar/bar.go

package bar

import (
   "your.repo.example.com/foo"
   "fmt"
)

func test() {

	obj := foo.Quester{}
	
	obj.private = "error access"
	
	fmt.Println(obj.private)
}

main.go

package main

import (
    "your.repo.example.com/bar"
)

func main() {
    bar.test()
}

Difrex ★★★★
()
Последнее исправление: Difrex (всего исправлений: 4)
Ответ на: комментарий от Difrex

как это скомпилить? я пробую менять «your.repo.example.com/bar» на "./bar" и «bar» и все три файла скармливать

go build foo.go bar.go main.go

quester ★★
() автор топика

какой тогда смысл создавать методы get()/set() если сама переменная доступна?

Должно быть у тебя недоученный ООП головного мозга. Ты вообще хоть раз задумывался, зачем вообще нужны геттеры/сеттеры, если в любом языке можно сделать публичные поля и на прямую их изменять?

Siado ★★★★★
()
Ответ на: комментарий от quester
mkdir lor
cd lor
mkdir -p $GOPATH/src/your.repo.example.com/{foo,bar}
cat > $GOPATH/src/your.repo.example.com/foo/foo.go
...
^D
cat > $GOPATH/src/your.repo.example.com/bar/bar.go
...
^D
cat > main.go
...
^D

go build
go build
# your.repo.example.com/bar
../../../.local/src/your.repo.example.com/bar/bar.go:12: obj.private undefined (cannot refer to unexported field or method private)
../../../.local/src/your.repo.example.com/bar/bar.go:14: obj.private undefined (cannot refer to unexported field or method private)
Difrex ★★★★
()
Последнее исправление: Difrex (всего исправлений: 1)
Ответ на: комментарий от Difrex

спасибо за подробное объяснение. в bar нужно заменить test() на Test() иначе оно то-же не будет экспортировано как я только что прочитал

quester ★★
() автор топика
Ответ на: комментарий от jabocrack

каждый класс в свой пакет заворачивают?

А что, в Go уже завезли классы?

i-rinat ★★★★★
()
Ответ на: комментарий от jabocrack

я вот то-же начал копать

пока очевидные плюсы: 1) создатели 2) по тестам он жабу с js рвет в два раза 3) легкая многопоточность и обмен с потоками через пайпы на которых засыпают

минусы: K&R style вшитый в язык

для web оно видимо как жаба и nodejs создает свой webserver, нужно посмотреть как это делается на нем, наверное epoll

еще не ясно можно ли внешние плагины писать скажем на C++

quester ★★
() автор топика
Ответ на: комментарий от quester

еще не ясно можно ли внешние плагины писать скажем на C++

import «C» и пиши на сях.

А вообще для плагинов стоит посмотреть на https://github.com/Shopify/go-lua

Difrex ★★★★
()
Ответ на: комментарий от quester

расскажи это тем кто в разных книжках про goland показывает как делать геттеры/сеттеры

Что мне рассказать?

Siado ★★★★★
()
Ответ на: комментарий от Siado

геттеры/сеттеры могут быть полезны чтобы скрыть реализацию и отлавливать момент получения/присвоения переменной. как видим в golang возможность скрыть переменную есть

quester ★★
() автор топика
Ответ на: комментарий от jabocrack

гошники каждый класс

а ежик в кедах.

Вообще как-то странно искать классы в не ООП ЯП где нет классов.

Dred ★★★★★
()

совсем поехали со своими геттерами и сеттерами, на каждый чих их клипают, в итоге простенькая классовая реализация класса с полями обрастает в хучу бесполезных методов вида this.a = a

Dred ★★★★★
()

Если нужно скрыть все потроха реализации, обверни все интерфейсом.

nikolnik ★★★
()
Ответ на: комментарий от pftBest

LoL and what? Есть Ёзыги где без них душно. А есть - где пофиг. Go - из вторых. ТЧК.

anonymous
()
Ответ на: комментарий от Dred

уже понятно что нет классов

возможно что это даже плюс языка

jabocrack
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.