func Foo(x interface{}) {
if x == nil {
fmt.Println("empty interface")
return
}
fmt.Println("non-empty interface")
}
func main() {
var x *int = nil
Foo(x)
}
func main() {
ch := make(chan int, 100)
// A
go func() {
for i := 0; i < 10; i++ {
ch <- i
}
}()
// B
go func() {
for {
a, ok := <-ch
if !ok {
fmt.Println("close")
return
}
fmt.Println("a: ", a)
}
}()
close(ch)
fmt.Println("ok")
time.Sleep(time.Second * 10)
}
func Stop(stop <-chan bool) {
close(stop)
}
type Param map[string]interface{}
type Show struct {
*Param
}
func main() {
s := new(Show)
s.Param["day"] = 2
}
syntax error: unexpected semicolon or newline before {
func main() {
fmt.Println("works")
}
var x = []int{2: 2, 3, 0: 1}
func main() {
fmt.Println(x)
}
func incr(p *int) int {
*p++
return *p
}
func main() {
v := 1
incr(&v)
fmt.Println(v)
}
package main
var gvar int
func main() {
var one int
two := 2
var three int
three = 3
func(unused string) {
fmt.Println("Unused arg. No compile error")
}("what?")
}
func main() {
var one int
_ = one
two := 2
fmt.Println(two)
var three int
three = 3
one = three
var four int
four = four
}
type ConfigOne struct {
Daemon string
}
func (c *ConfigOne) String() string {
return fmt.Sprintf("print: %v", c)
}
func main() {
c := &ConfigOne{}
c.String()
}
func main() {
var a = []int{1, 2, 3, 4, 5}
var r = make([]int, 0)
for i, v := range a {
if i == 0 {
a = append(a, 6, 7)
}
r = append(r, v)
}
fmt.Println(r)
}
func main() {
x := interface{}(nil)
y := (*int)(nil)
a := y == x
b := y == nil
_, c := x.(interface{})
println(a, b, c)
}
func main() {
var s []int
s = append(s,1)
var m map[string]int
m["one"] = 1
}
func main() {
var m map[string]int
m = make(map[string]int)
m["one"] = 1
}
func main() {
m := make(map[string]int,2)
cap(m)
}
func main() {
var x = nil
_ = x
}
func main() {
var x interface{} = nil
_ = x
}
type info struct {
result int
}
func work() (int,error) {
return 13,nil
}
func main() {
var data info
data.result, err := work()
fmt.Printf("info: %+v\n",data)
}
non-name data.result on left side of :=
func main() {
var data info
var err error
data.result, err = work() //ok
if err != nil {
fmt.Println(err)
return
}
fmt.Println(data)
}
func main() {
one := 0
one := 1
}
func main() {
one := 0
one, two := 1,2
one,two = two,one
}
func main() {
x := []int{
1,
2
}
_ = x
}
func main() {
x := []int{ // 多行
1,
2,
}
x = x
y := []int{3,4,} // 一行 no error
y = y
}
func test(x byte) {
fmt.Println(x)
}
func main() {
var a byte = 0x11
var b uint8 = a
var c uint8 = a + b
test(c)
}
func main() {
const x = 123
const y = 1.23
fmt.Println(x)
}
const (
x uint16 = 120
y
s = "abc"
z
)
func main() {
fmt.Printf("%T %v\n", y, y)
fmt.Printf("%T %v\n", z, z)
}
uint16 120
string abc
func main() {
var x string = nil
if x == nil {
x = "default"
}
}
func main() {
var x string //defaults to "" (zero value)
if x == "" {
x = "default"
}
}
func main() {
data := []int{1,2,3}
i := 0
++i
fmt.Println(data[i++])
}
func main() {
data := []int{1,2,3}
i := 0
i++
fmt.Println(data[i])
}