• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

problem z budowaniem programu z różnych pakietów

0 głosów
531 wizyt
pytanie zadane 25 lutego 2016 w Inne języki przez jegor377 Stary wyjadacz (13,230 p.)

Witam!

Ostatnio zainteresowałem się językiem Go. Jest strasznie łatwy toteż szybko nauczyłem się w nim dłubać. Jednak mam problem, bo chcę budować projekt z różnych plików, a nie z jednego. Niby Go na to pozwala, ale same problemy z tym. Wzorując się na tym poradniku stworzyłem trzy proste skrypty. Pierwszy do tworzenia projektu, drugi do uzupełniania go o pakiety, a trzeci do tworzenia sample plików w folderach. Kompilacja pakietów działa bez zarzutów i sam plik main.go też się kompiluje (oczywiście bez importowania pakietów). Skompilowałem pakiet testowy i w main.go uzupełniłem linijkę o ten jeden import. Z tego co widać, to program go importuje, ale nie potrafi użyć w programie. Mówi, że nie może odwołać się do nie exportowanej nazwy, ale ona powinna być exportowana. Nwm już co z tym zrobić, a strasznie chcę w nim programować. Wie ktoś gdzie popełniam błąd? Poniżej skrypty i kod:

main.go

package main

import (
	"fmt"
	testPackage "testPackage"
)

func main() {
	result := testPackage.retString()
	//fmt.Println(result)
	fmt.Println("TEST")
}

testPackage.go

package testPackage

func retString() string {
	return string("Hi World!")
}

skrypty:

goCreate (tworzy projekt):

@echo off
if %1.==. goto :errorProjectName
set goProjectsDir=D:\Dane\Projekty\Go
set projectPath=%goProjectsDir%\%1Code
mkdir %projectPath%
set GOPATH=%projectPath%
cd /d %projectPath%
mkdir %projectPath%\src
cd %projectPath%\src
mkdir %1
cd %1
createGoFile.bat main
exit /b

:errorProjectName
echo You didn't type project name.
exit /b

goPackage (tworzy pakiet):

@echo off
if %1.==. goto :errorPackageName

set packagePath=%GOPATH%\src\%1

mkdir %packagePath%
cd %packagePath%
createGoFile.bat %1
exit /b

:errorPackageName
echo You didn't type package name.
exit /b

createGoFile (tworzy sample plik):

if %1.go.==. goto :errorFileName
echo package %1 >>%1.go
echo. >>%1.go
echo import "fmt">>%1.go
echo. >>%1.go
echo func main() {>>%1.go
echo 	fmt.Println("Hello World\n")>>%1.go
echo }>>%1.go
exit /b

:errorFileName
echo You didn't type file name.
exit /b

console output: <- folder z main.go (src/Test). Pakiet jest w (src/testPackage)

> go install

# Test
.\main.go:9: cannot refer to unexported name testPackage.retString
.\main.go:9: undefined: testPackage.retString

1 odpowiedź

+1 głos
odpowiedź 25 lutego 2016 przez Comandeer Guru (607,960 p.)
wybrane 26 lutego 2016 przez jegor377
 
Najlepsza
A przypadkiem nazwy eksportowane w Go nie muszą się zaczynać dużą literą?
komentarz 26 lutego 2016 przez jegor377 Stary wyjadacz (13,230 p.)
o kurde, jestem w szkolę, więc nie sprawdzę teraz, ale chyba masz rację. Tzn. o ile z tymi nazwami nie jest tak, że są eksportowane tylko ze struktur, ale dzięki. Sprawdzę:)
komentarz 26 lutego 2016 przez jegor377 Stary wyjadacz (13,230 p.)

Nie sprawdziłem, ale wychodzi na to, że masz rację. :)

Widoczność składowych pakietów

 

To bardzo ważna kwestia! W go na zewnątrz pakietu są udostępnione tylko te identyfikatory które zaczynają się wielką literą. To nie żart, to jedyna metoda udostępniania zmiennych, typów czy funkcji poza pakiet. Co do zasady, możemy używać w dowolny sposób tylko tych identyfikatorów, które są pisane z wielkiej litery. Przeanalizujmy przykłady, udostępnianie typów:

komentarz 26 lutego 2016 przez jegor377 Stary wyjadacz (13,230 p.)
dokładnie tak. Dzięki! :D

Podobne pytania

–20 głosów
1 odpowiedź 1,990 wizyt
0 głosów
3 odpowiedzi 3,424 wizyt
0 głosów
1 odpowiedź 1,140 wizyt

93,720 zapytań

142,646 odpowiedzi

323,267 komentarzy

63,270 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...