learn/doc/go_type_variable at main · gitLibs/learn · GitHub
Skip to content

Latest commit

 

History

History
 
 

Folders and files

README.md

back to contents

Go: type, variable

↑ top




Reference

↑ top




type

All you need to know about Go types can be found here. And try this code:

package main

import (
	"fmt"
	"reflect"
)

// type for numeric value
type Int int

// type for struct
type data struct {
	Value string
}

// type for interface
type Interface interface {
	Len() int
}

func (d data) Len() int {
	return len(d.Value)
}

func main() {
	v0 := Int(0)
	fmt.Println(reflect.TypeOf(v0))
	// main.Int

	v1 := data{Value: "A"}
	fmt.Println(reflect.TypeOf(v1))
	// main.data

	v2 := interface{}(v1).(Interface)
	fmt.Println(reflect.TypeOf(v2))
	// main.data
}

↑ top




variable

Try this code:

package main

import (
	"fmt"
	"reflect"
	"unsafe"
)

func main() {
	var val0 string
	fmt.Println(reflect.TypeOf(val0), unsafe.Sizeof(val0), val0)
	// string 16

	var val1 = "A"
	fmt.Println(reflect.TypeOf(val1), unsafe.Sizeof(val1), val1)
	// string 16 A

	val2 := "B"
	fmt.Println(reflect.TypeOf(val2), unsafe.Sizeof(val2), val2)
	// string 16 B

	var data1 = struct{}{}
	fmt.Println(reflect.TypeOf(data1), unsafe.Sizeof(data1), data1)
	// struct {} 0 {}

	var data2 struct{}
	fmt.Println(reflect.TypeOf(data2), unsafe.Sizeof(data2), data2)
	// struct {} 0 {}
}

↑ top




empty struct

Try this and read:

package main

import (
	"fmt"
	"unsafe"
)

func N(n int) []struct{} {
	return make([]struct{}, n)
}

func main() {
	var s0 struct{}
	fmt.Println(unsafe.Sizeof(s0)) // 0

	s1 := struct{}{}
	fmt.Println(unsafe.Sizeof(s1)) // 0

	done := make(chan struct{})
	go func() {
		done <- struct{}{}
	}()
	<-done
	fmt.Println("Done")
	// Done

	for i := range N(10) {
		fmt.Print(i, " ")
	}
	// 0 1 2 3 4 5 6 7 8 9
}

/*
Same in Python:

for i in range(10):
    print i
*/

↑ top