• 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

VPS Starter Arubacloud
0 głosów
366 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 (599,730 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,474 wizyt
0 głosów
3 odpowiedzi 2,731 wizyt
0 głosów
1 odpowiedź 465 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...