2014-12-13 42 views
18

Sử dụng struct và một chức năng đó là nghĩa vụ để in ra các phần tử của struct, tôi đã viết chương trình đơn giản này:Lỗi: struct Loại không phải là một biểu hiện

package main 

import "fmt" 

type Salutation struct { 
    name  string 
    greeting string 
} 

func Greet(salutation Salutation) { 
    fmt.Println(salutation.name) 
    fmt.Println(salutation.greeting) 
} 

func main() { 
    var s = Salutation 
    s.name = "Alex" 
    s.greeting = "Hi" 
    Greet(s) 
} 

Khi tôi chạy nó tôi nhận được lỗi go:16: type Salutation is not an expression. Có gì sai ở đây?

Điều thú vị là đủ, khi tôi thay đổi định nghĩa của s thành var s = Salutation {"Alex", "Hi"} nó hoạt động tốt. Nhưng về cơ bản chúng là những cách khác nhau để định nghĩa cùng một thực thể. Đó là lý do tại sao tôi không hiểu nguồn gốc của lỗi.

Trả lời

31

Lỗi này là trên dòng này

var s = Salutation 

Những điều cần bên phải = phải đánh giá một giá trị. Salutation là loại, không phải là giá trị. Dưới đây là ba cách để khai báo s:

var s Salutation  // variable declaration using a type 

var s = Salutation{} // variable declaration using a value 

s := Salutation{}  // short variable declaration 

Kết quả của cả ba khai báo là giống hệt nhau. Biến thể thứ ba thường được ưu tiên thứ hai, nhưng không thể được sử dụng để khai báo một biến cấp gói.

Xem đặc điểm ngôn ngữ for all of the details on variable declarations.

+0

'loại salution struct {}' là có thể đăng nhập 'struct'' fmt.Println (salution, "struct typee") '@Cerise Limon – muthukumar

Các vấn đề liên quan