2016-01-27 24 views
17

Tôi khá mới để golang, điều này nên là một câu trả lời đơn giản nhưng tôi đã cố gắng tìm kiếm mọi nơi mà không có may mắn.Golang Global Biến truy cập

Làm cách nào để truy cập biến toàn cầu được khai báo/init trong tệp main.go của tôi trong một gói/tệp .go khác? Giữ nói với tôi rằng biến là undefined (Tôi biết rằng các biến toàn cục là xấu nhưng điều này chỉ được sử dụng như một timestamp)

trong main.go

var StartTime = time.Now() 
func main(){...} 

cố gắng truy cập StartTime trong một khác nhau. hãy gửi tập tin nhưng vẫn giữ StartTime không được xác định

+2

Có thể trùng lặp [go build works fine nhưng go run failed] (http://stackoverflow.com/questions/21293000/go-build-works-fine-but-go-run-fails) –

+0

Là chữ cái đầu tiên trên tên biến được viết hoa? – olif

+0

Có, nó được viết hoa và bản dựng của tôi không thành công – Nighthee

Trả lời

33

Tôi sẽ "tiêm" biến thời gian bắt đầu thay vào đó, nếu không bạn có phụ thuộc vòng tròn giữa các gói.

main.go

var StartTime = time.Now() 
func main() { 
    otherPackage.StartTime = StartTime 
} 

otherpackage.go

var StartTime time.Time 
+0

Đúng rồi! Cảm ơn! – Nighthee

3

tôi có thể tạo một tập tin dif.go có chứa mã của bạn:

package dif 

import (
    "time" 
) 

var StartTime = time.Now() 

Bên ngoài thư mục tôi tạo của tôi main.go, nó được rồi!

package main 

import (
    dif "./dif" 
    "fmt" 
) 

func main() { 
    fmt.Println(dif.StartTime) 
} 

Đầu ra:

2016-01-27 21:56:47.729019925 +0800 CST 

tập tin cấu trúc thư mục:

folder 
    main.go 
    dif 
    dif.go 

Nó hoạt động!

+0

'dif' của tôi là một API an toàn và sẽ không được gọi khi chương trình bắt đầu nhưng chỉ khi được gọi thông qua URL, vì vậy tôi cần phải đặt StartTime trong main.go và chuyển nó sang dif, bạn chuyển nó từ dif để chính, cảm ơn cho thử mặc dù! – Nighthee